module Web.Stripe.Test.Charge where
import Data.Either
import Test.Hspec
import Web.Stripe.Charge
import Web.Stripe.Customer
import Web.Stripe.Test.Prelude
chargeTests :: StripeSpec
chargeTests stripe =
describe "Charge tests" $ do
chargeCustomerTest
retrieveChargeTest
updateChargeTest
retrieveExpandedChargeTest
retrieveAllChargesTest
captureChargeTest
where
cn = CardNumber "4242424242424242"
em = ExpMonth 12
ey = ExpYear 2020
cvc = CVC "123"
cardinfo = (mkNewCard cn em ey) { newCardCVC = Just cvc }
chargeCustomerTest =
it "Charges a customer succesfully" $ do
result <- stripe $ do
Customer { customerId = cid } <- createCustomer -&- cardinfo
charge <- createCharge (Amount 100) USD -&- cid
void $ deleteCustomer cid
return charge
result `shouldSatisfy` isRight
retrieveChargeTest =
it "Retrieves a charge succesfully" $ do
result <- stripe $ do
Customer { customerId = cid } <- createCustomer -&- cardinfo
Charge { chargeId = chid } <- createCharge (Amount 100) USD -&- cid
result <- getCharge chid
void $ deleteCustomer cid
return result
result `shouldSatisfy` isRight
updateChargeTest =
it "Updates a charge succesfully" $ do
result <- stripe $ do
Customer { customerId = cid } <- createCustomer -&- cardinfo
Charge { chargeId = chid } <- createCharge (Amount 100) USD -&- cid
_ <- updateCharge chid
-&- Description "Cool"
-&- MetaData [("hi", "there")]
result <- getCharge chid
void $ deleteCustomer cid
return result
result `shouldSatisfy` isRight
let Right Charge { chargeMetaData = cmd, chargeDescription = desc } = result
cmd `shouldBe` (MetaData [("hi", "there")])
desc `shouldSatisfy` (==(Just $ Description "Cool"))
retrieveExpandedChargeTest =
it "Retrieves an expanded charge succesfully" $ do
result <- stripe $ do
Customer { customerId = cid } <- createCustomer -&- cardinfo
Charge { chargeId = chid } <- createCharge (Amount 100) USD -&- cid
result <- getCharge chid
-&- ExpandParams [ "balance_transaction"
, "customer"
, "invoice"
]
void $ deleteCustomer cid
return result
result `shouldSatisfy` isRight
retrieveAllChargesTest =
it "Retrieves all charges" $ do
result <- stripe $ do c <- getCharges
return c
result `shouldSatisfy` isRight
captureChargeTest =
it "Captures a charge - 2 Step Payment Flow" $ do
result <- stripe $ do
Customer { customerId = cid } <- createCustomer -&- cardinfo
Charge { chargeId = chid } <- createCharge (Amount 100) USD
-&- cid
-&- (Capture False)
result <- captureCharge chid
void $ deleteCustomer cid
return result
result `shouldSatisfy` isRight
let Right Charge { chargeCaptured = captured } = result
captured `shouldBe` True