{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Test.Card where
import Control.Monad
import Data.Either
import Data.Maybe
import Test.Hspec
import Web.Stripe
import Web.Stripe.Card
import Web.Stripe.Customer
import Web.Stripe.Recipient
import Web.Stripe.Token
cardTests :: StripeConfig -> Spec
cardTests config = do
describe "Card tests" $ do
it "Can create a Customer Card by CardNumber" $ do
result <- stripe config $ do
Customer { customerId = cid } <- createEmptyCustomer
card <- createCustomerCard cid credit em ey cvc
void $ deleteCustomer cid
return card
result `shouldSatisfy` isRight
it "Can create a Customer Card by TokenId" $ do
result <- stripe config $ do
Token { tokenId = tkid } <- createCardToken credit em ey cvc
Customer { customerId = cid } <- createEmptyCustomer
card <- createCustomerCardByToken cid tkid
void $ deleteCustomer cid
return card
result `shouldSatisfy` isRight
it "Can retrieve a Customer Card" $ do
result <- stripe config $ do
Customer { customerId = customerid
, customerCards = StripeList { list = [ Card { cardId = cardid } ] }
} <- createCustomerByCard credit em ey cvc
card <- getCustomerCard customerid cardid
void $ deleteCustomer customerid
return card
result `shouldSatisfy` isRight
let Right Card{..} = result
cardLastFour `shouldBe` "4242"
cardExpMonth `shouldBe` em
cardExpYear `shouldBe` ey
it "Can retrieve a Customer's Card with expansion" $ do
result <- stripe config $ do
Customer { customerId = customerid
, customerCards = StripeList { list = [ Card { cardId = cardid } ] }
} <- createCustomerByCard credit em ey cvc
card <- getCustomerCardExpandable customerid cardid ["customer"]
void $ deleteCustomer customerid
return card
result `shouldSatisfy` isRight
let Right Card{..} = result
cardLastFour `shouldBe` "4242"
cardExpMonth `shouldBe` em
cardExpYear `shouldBe` ey
it "Can retrieve a Customer's Cards" $ do
result <- stripe config $ do
Customer { customerId = customerid
} <- createCustomerByCard credit em ey cvc
card <- getCustomerCards customerid Nothing Nothing Nothing
void $ deleteCustomer customerid
return card
result `shouldSatisfy` isRight
it "Can retrieve a Customer's Cards with Expansion" $ do
result <- stripe config $ do
Customer { customerId = customerid
} <- createCustomerByCard credit em ey cvc
card <- getCustomerCardsExpandable customerid Nothing Nothing Nothing ["data.customer"]
void $ deleteCustomer customerid
return card
result `shouldSatisfy` isRight
it "Can delete a Customer's Cards" $ do
result <- stripe config $ do
Customer { customerId = customerid
, customerDefaultCard = Just cardid
} <- createCustomerByCard credit em ey cvc
result <- deleteCustomerCard customerid cardid
void $ deleteCustomer customerid
return result
result `shouldSatisfy` isRight
it "Can update a Customer's Card" $ do
result <- stripe config $ do
Customer { customerId = customerid
, customerDefaultCard = Just cardid
} <- createCustomerByCard credit em ey cvc
result <- updateCustomerCard customerid cardid
cardname
cardcity
cardcountry
cardaddressOne
cardaddressTwo
cardaddressState
cardzip
void $ deleteCustomer customerid
return result
result `shouldSatisfy` isRight
let Right Card{..} = result
cardName `shouldBe` cardname
cardAddressCity `shouldBe` cardcity
cardAddressCountry `shouldBe` cardcountry
cardAddressLine1 `shouldBe` cardaddressOne
cardAddressLine2 `shouldBe` cardaddressTwo
cardAddressState `shouldBe` cardaddressState
cardAddressZip `shouldBe` cardzip
describe "Recipient Card tests" $ do
it "Can create a RecipientCard by CardNumber" $ do
result <- stripe config $ do
r@Recipient{..} <- createRecipientByCard firstname lastname Nothing Individual debit em ey cvc
void $ deleteRecipient recipientId
return r
result `shouldSatisfy` isRight
let Right Recipient {..} = result
length (list recipientCards) `shouldBe` 1
it "Can create a RecipientCard by Card TokenId" $ do
result <- stripe config $ do
Token { tokenId = tkid } <- createCardToken debit em ey cvc
Recipient { recipientId = rid } <- createRecipient firstname lastname (Just 'M') Individual
rcard <- createRecipientCardByToken rid tkid
void $ deleteRecipient rid
return rcard
result `shouldSatisfy` isRight
it "Fails to create a RecipientCard by BankAccount TokenId" $ do
result <- stripe config $ do
Token { tokenId = tkid } <- createBankAccountToken country routingnumber accountnumber
Recipient { recipientId = rid } <- createRecipient firstname lastname (Just 'M') Corporation
rcard <- createRecipientCardByToken rid tkid
void $ deleteRecipient rid
return rcard
result `shouldSatisfy` isLeft
it "Can retrieve a RecipientCard" $ do
result <- stripe config $ do
Recipient{..} <- createRecipientByCard firstname lastname Nothing Individual debit em ey cvc
rcard <- getRecipientCard recipientId (fromJust recipientDefaultCard)
void $ deleteRecipient recipientId
return rcard
result `shouldSatisfy` isRight
it "Can retrieve a RecipientCard Expanded" $ do
result <- stripe config $ do
Recipient{..} <- createRecipientByCard firstname lastname Nothing Individual debit em ey cvc
rcard <- getRecipientCardExpandable recipientId (fromJust recipientDefaultCard) ["recipient"]
void $ deleteRecipient recipientId
return rcard
result `shouldSatisfy` isRight
it "Can retrieve a Recipient's Cards" $ do
result <- stripe config $ do
Recipient{..} <- createRecipientByCard firstname lastname Nothing Individual debit em ey cvc
rcard <- getRecipientCards recipientId Nothing Nothing Nothing
void $ deleteRecipient recipientId
return rcard
result `shouldSatisfy` isRight
it "Can retrieve a Recipient's Cards Expanded" $ do
result <- stripe config $ do
Recipient{..} <- createRecipientByCard firstname lastname Nothing Individual debit em ey cvc
rcard <- getRecipientCardsExpandable recipientId Nothing Nothing Nothing ["data.recipient"]
void $ deleteRecipient recipientId
return rcard
result `shouldSatisfy` isRight
it "Can delete a Recipient Card Expanded" $ do
result <- stripe config $ do
Recipient{..} <- createRecipientByCard firstname lastname Nothing Individual debit em ey cvc
rcard <- deleteRecipientCard recipientId (fromJust recipientDefaultCard)
void $ deleteRecipient recipientId
return rcard
result `shouldSatisfy` isRight
it "Can update a Recipient's Card" $ do
result <- stripe config $ do
Recipient{..} <- createRecipientByCard firstname lastname Nothing Individual debit em ey cvc
rcard@RecipientCard{..} <-
updateRecipientCard
recipientId
(fromJust recipientDefaultCard)
cardname
cardcity
cardcountry
cardaddressOne
cardaddressTwo
cardaddressState
cardzip
void $ deleteRecipient recipientId
return rcard
result `shouldSatisfy` isRight
let Right RecipientCard{..} = result
recipientCardName `shouldBe` cardname
recipientCardAddressCity `shouldBe` cardcity
recipientCardAddressCountry `shouldBe` cardcountry
recipientCardAddressLine1 `shouldBe` cardaddressOne
recipientCardAddressLine2 `shouldBe` cardaddressTwo
recipientCardAddressState `shouldBe` cardaddressState
recipientCardAddressZip `shouldBe` cardzip
it "Fails to add a Credit Card to a Recipient" $ do
result <- stripe config $
createRecipientByCard firstname lastname Nothing Individual credit em ey cvc
result `shouldSatisfy` isLeft
where
credit = CardNumber "4242424242424242"
debit = CardNumber "4000056655665556"
em = ExpMonth 12
ey = ExpYear 2015
cvc = CVC "123"
country = Country "US"
routingnumber = RoutingNumber "110000000"
accountnumber = AccountNumber "000123456789"
firstname = FirstName "David"
lastname = LastName "Johnson"
cardname = Just "cardName"
cardcity = Just (AddressCity "Chicago")
cardcountry = Just (AddressCountry "US")
cardaddressOne = Just (AddressLine1 "123 Fake Street")
cardaddressTwo = Just (AddressLine2 "456 Fake Street")
cardaddressState = Just (AddressState "IL")
cardzip = Just (AddressZip "60610")