{-# 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]