{-# LANGUAGE OverloadedStrings #-} module Unit.Parser (unitParser) where import Data.Default import Test.Framework (Test, testGroup) import Test.Framework.Providers.HUnit (testCase) import Test.HUnit (Assertion) import Unit.Utils import Web.PayPal.Adaptive unitParser :: Test unitParser = testGroup "parsers" [ testCase "correctly encodes a SendPayment" serializeSendPayment , testCase "correctly encodes a CreatePayment" serializeCreatePayment , testCase "correctly decodes a SendPayment response" parseSendResp , testCase "correctly decodes a CreatePayment response" parseCreateResp , testCase "correctly decodes a LookupPayment response" parseLookupResp , testCase "correctly decodes an error code response" parseErrResp ] serializeSendPayment :: Assertion serializeSendPayment = "tests/JSON/serializeSendPayment.json" `eqSerialized` a where a = def { _spReceiverList = rl , _spSenderEmail = "payments@mail.com" } rl = ReceiverList { _rlAmount = USD 100 , _rlEmail = "user@mail.com" } serializeCreatePayment :: Assertion serializeCreatePayment = "tests/JSON/serializeCreatePayment.json" `eqSerialized` a where a = def { _cpReceiverList = rl , _cpSenderEmail = "user@mail.com" } rl = ReceiverList { _rlAmount = USD 100 , _rlEmail = "payments@mail.com" } parseSendResp :: Assertion parseSendResp = expected `eqParsed` "tests/JSON/parseSendResp.json" where expected = PayResp { _prPayError = Nothing , _prPayExecStatus = PeCompleted , _prPayKey = PayKey "AP-21C62741YR509274N" , _prPayInfo = [p] } p = PayInfo { _piReceiver = r , _piSenderTransactionId = Just (TransactionId "7TU31598YN877045D") , _piTransactionStatus = Just TsCompleted , _piTransactionId = Just (TransactionId "1DG71997KF688883E") } r = Receiver { _reAmount = "1.00" , _reEmail = "user@mail.com" , _reAccountId = "69D9D7KVA6WAN" } parseCreateResp :: Assertion parseCreateResp = expected `eqParsed` "tests/JSON/parseCreateResp.json" where expected = PayResp { _prPayError = Nothing , _prPayExecStatus = PeCreated , _prPayKey = PayKey "AP-3NL080742J1818731" , _prPayInfo = [] } -- TODO: add tests for lookups of Created payments as well as Completed. parseLookupResp :: Assertion parseLookupResp = expected `eqParsed` "tests/JSON/parseLookupResp.json" where expected = PayResp { _prPayError = Nothing , _prPayExecStatus = PeCompleted , _prPayKey = PayKey "AP-5XY65045XE4097324" , _prPayInfo = [p] } p = PayInfo { _piReceiver = r , _piSenderTransactionId = Just (TransactionId "9U084775U2533540T") , _piTransactionStatus = Just TsCompleted , _piTransactionId = Just (TransactionId "0CL88103PF900230J") } r = Receiver { _reAmount = "1.00" , _reEmail = "user@mail.com" , _reAccountId = "69D9D7KVA6WAN" } parseErrResp :: Assertion parseErrResp = expected `eqParsed` "tests/JSON/parseErrResp.json" where expected = AeErrCodes [560022]