{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RebindableSyntax #-}
{-# LANGUAGE RecordWildCards #-}
module Web.Stripe.Test.Refund where
import Data.Either
import Test.Hspec
import Web.Stripe.Charge
import Web.Stripe.Customer
import Web.Stripe.Refund
import Web.Stripe.Test.Prelude
cn :: CardNumber
cn = CardNumber "4242424242424242"
em :: ExpMonth
em = ExpMonth 12
ey :: ExpYear
ey = ExpYear 2020
cvc :: CVC
cvc = CVC "123"
cardinfo :: NewCard
cardinfo = (mkNewCard cn em ey) { newCardCVC = Just cvc }
refundTests :: StripeSpec
refundTests stripe = do
describe "Refund Tests" $ do
it "Creates a refund succesfully" $ do
result <- stripe $ do
Customer { customerId = cid } <- createCustomer -&- cardinfo
Charge { chargeId = chid } <- createCharge (Amount 100) USD -&- cid
refund <- createRefund chid
void $ deleteCustomer cid
return refund
result `shouldSatisfy` isRight
it "Retrieves a refund succesfully" $ do
result <- stripe $ do
Customer { customerId = cid } <- createCustomer -&- cardinfo
Charge { chargeId = chid } <- createCharge (Amount 100) USD -&- cid
Refund { refundId = rid } <- createRefund chid
void $ deleteCustomer cid
void $ getRefund chid rid
result `shouldSatisfy` isRight
it "Retrieves a refund succesfully with expansion" $ do
result <- stripe $ do
Customer { customerId = cid } <- createCustomer -&- cardinfo
Charge { chargeId = chid } <- createCharge (Amount 100) USD -&- cid
Refund { refundId = rid } <- createRefund chid
r <- getRefund chid rid -&- ExpandParams ["balance_transaction"]
void $ deleteCustomer cid
return r
result `shouldSatisfy` isRight
it "Updates a refund succesfully" $ do
result <- stripe $ do
Customer { customerId = cid } <- createCustomer -&- cardinfo
Charge { chargeId = chid } <- createCharge (Amount 100) USD -&- cid
Refund { refundId = rid } <- createRefund chid
ref <- updateRefund chid rid -&- (MetaData [("hello","there")])
void $ deleteCustomer cid
return ref
result `shouldSatisfy` isRight
let Right Refund{..} = result
refundMetaData `shouldBe` (MetaData [("hello","there")])
it "Retrieves all refunds for a Charge" $ do
result <- stripe $ do
Customer { customerId = cid } <- createCustomer -&- cardinfo
Charge { chargeId = chid } <- createCharge (Amount 100) USD -&- cid
Refund { } <- createRefund chid
r <- getRefunds chid
void $ deleteCustomer cid
return r
result `shouldSatisfy` isRight
let Right StripeList {..} = result
length list `shouldBe` 1
it "Retrieves all refunds for a Charge with expansion" $ do
result <- stripe $ do
Customer { customerId = cid } <- createCustomer -&- cardinfo
Charge { chargeId = chid } <- createCharge (Amount 100) USD -&- cid
Refund { } <- createRefund chid
r <- getRefunds chid -&- ExpandParams ["data.balance_transaction"]
void $ deleteCustomer cid
return r
result `shouldSatisfy` isRight
let Right StripeList {..} = result
length list `shouldBe` 1