packages feed

paypal-adaptive-hoops-0.5.1.0: tests/Unit/Parser.hs

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