stripe-haskell-0.1.4.1: tests/Test/Charge.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Test.Charge where
import Control.Monad
import Data.Either
import Data.Text (Text)
import Test.Hspec
import Web.Stripe
import Web.Stripe.Charge
import Web.Stripe.Customer
chargeTests :: StripeConfig -> Spec
chargeTests config =
describe "Charge tests" $ do
chargeCustomerTest
retrieveChargeTest
updateChargeTest
retrieveExpandedChargeTest
retrieveAllChargesTest
captureChargeTest
where
cn = CardNumber "4242424242424242"
em = ExpMonth 12
ey = ExpYear 2015
cvc = CVC "123"
chargeCustomerTest =
it "Charges a customer succesfully" $ do
result <- stripe config $ do
Customer { customerId = cid } <- createCustomerByCard cn em ey cvc
charge <- chargeCustomer cid USD 100 Nothing
void $ deleteCustomer cid
return charge
result `shouldSatisfy` isRight
retrieveChargeTest =
it "Retrieves a charge succesfully" $ do
result <- stripe config $ do
Customer { customerId = cid } <- createCustomerByCard cn em ey cvc
Charge { chargeId = chid } <- chargeCustomer cid USD 100 Nothing
result <- getCharge chid
void $ deleteCustomer cid
return result
result `shouldSatisfy` isRight
updateChargeTest =
it "Updates a charge succesfully" $ do
result <- stripe config $ do
Customer { customerId = cid } <- createCustomerByCard cn em ey cvc
Charge { chargeId = chid } <- chargeCustomer cid USD 100 Nothing
_ <- updateCharge chid "Cool" [("hi", "there")]
result <- getCharge chid
void $ deleteCustomer cid
return result
result `shouldSatisfy` isRight
let Right Charge { chargeMetaData = cmd, chargeDescription = desc } = result
cmd `shouldBe` [("hi", "there")]
desc `shouldSatisfy` (==(Just "Cool" :: Maybe Text))
retrieveExpandedChargeTest =
it "Retrieves an expanded charge succesfully" $ do
result <- stripe config $ do
Customer { customerId = cid } <- createCustomerByCard cn em ey cvc
Charge { chargeId = chid } <- chargeCustomer cid USD 100 Nothing
result <- getChargeExpandable chid ["balance_transaction", "customer", "invoice"]
void $ deleteCustomer cid
return result
result `shouldSatisfy` isRight
retrieveAllChargesTest =
it "Retrieves all charges" $ do
result <- stripe config $ getCharges Nothing Nothing Nothing
result `shouldSatisfy` isRight
captureChargeTest =
it "Captures a charge - 2 Step Payment Flow" $ do
result <- stripe config $ do
Customer { customerId = cid } <- createCustomerByCard cn em ey cvc
Charge { chargeId = chid } <- chargeBase 100 USD Nothing (Just cid)
Nothing Nothing Nothing False
Nothing Nothing Nothing Nothing []
result <- captureCharge chid Nothing Nothing
void $ deleteCustomer cid
return result
result `shouldSatisfy` isRight
let Right Charge { chargeCaptured = captured } = result
captured `shouldBe` True