packages feed

mangopay-1.4: test/Web/MangoPay/CardsTest.hs

{-# LANGUAGE OverloadedStrings, ScopedTypeVariables #-}
{-# OPTIONS_GHC -F -pgmF htfpp #-}
-- | test cards
module Web.MangoPay.CardsTest where

import Web.MangoPay
import Web.MangoPay.TestUtils

import Data.Maybe (isJust, isNothing, fromJust)
import Test.Framework
import Test.HUnit (Assertion)

import qualified Data.Text as T
import qualified Control.Exception.Lifted as L

-- | test a card registration using euro currency
test_CardEUR :: Assertion
test_CardEUR = doTestCard "EUR"

-- | test a card registration using dollar currency
test_CardUSD :: Assertion
test_CardUSD = doTestCard "USD"

-- | perform the actual test of card registration in the provided currency
doTestCard :: T.Text->Assertion
doTestCard curr=L.handle (\(e::MpException)->assertFailure (show e)) $ do
  usL<-testMP $ listUsers (Just $ Pagination 1 1)
  assertEqual 1 (length $ plData usL)
  let uid=urId $ head $ plData usL
  let cr1=mkCardRegistration uid curr
  cr2<-testMP $ storeCardRegistration cr1
  assertBool (isJust $ crId cr2)
  assertBool (isJust $ crCreationDate cr2)
  assertBool (isJust $ crCardRegistrationURL cr2)
  assertBool (isJust $ crAccessKey cr2)
  assertBool (isJust $ crPreregistrationData cr2)  
  assertBool (isNothing $ crRegistrationData cr2)  
  assertBool (isNothing $ crCardId cr2)  
  cr3<-unsafeRegisterCard testCardInfo1 cr2
  assertBool (isJust $ crRegistrationData cr3)  
  cr4<-testMP $ storeCardRegistration cr3
  assertBool (isJust $ crCardId cr4)  
  let cid=fromJust $ crCardId cr4
  c<-testMP $ fetchCard cid
  assertEqual cid $ cId c
  assertBool $ not $ T.null $ cAlias c 
  assertBool $ not $ T.null $ cCardProvider c
  assertEqual (ciExpire testCardInfo1) (cExpirationDate c)
  --assertBool $ not $ T.null $ cExpirationDate c
  assertEqual UNKNOWN $ cValidity c
  assertBool $ cActive c
  assertEqual uid $ cUserId c
  assertEqual "CB_VISA_MASTERCARD" $ cCardType c
  cs<-testMP $ getAll $ listCards uid
  assertBool $ not $ null cs
  assertBool $ any (\ c1 -> cId c1 == cid) cs