stripe-haskell-0.1.4.1: tests/Test/Subscription.hs
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE OverloadedStrings #-}
module Test.Subscription where
import Data.Either
import Control.Monad
import Data.Maybe
import Test.Hspec
import Test.Util
import Web.Stripe
import Web.Stripe.Subscription
import Web.Stripe.Customer
import Web.Stripe.Plan
import Web.Stripe.Coupon
subscriptionTests :: StripeConfig -> Spec
subscriptionTests config = do
describe "Subscription tests" $ do
it "Succesfully creates a Subscription" $ do
planid <- makePlanId
result <- stripe config $ do
Customer { customerId = cid } <- createEmptyCustomer
void $ createPlan planid
0 -- free plan
USD
Month
"sample plan"
[]
sub <- createSubscription cid planid []
void $ deletePlan planid
void $ deleteCustomer cid
return sub
result `shouldSatisfy` isRight
it "Succesfully retrieves a Subscription" $ do
planid <- makePlanId
result <- stripe config $ do
Customer { customerId = cid } <- createEmptyCustomer
void $ createPlan planid
0 -- free plan
USD
Month
"sample plan"
[]
Subscription { subscriptionId = sid } <- createSubscription cid planid []
sub <- getSubscription cid sid
void $ deletePlan planid
void $ deleteCustomer cid
return sub
result `shouldSatisfy` isRight
it "Succesfully retrieves a Subscription expanded" $ do
planid <- makePlanId
result <- stripe config $ do
Customer { customerId = cid } <- createEmptyCustomer
void $ createPlan planid
0 -- free plan
USD
Month
"sample plan"
[]
Subscription { subscriptionId = sid } <- createSubscription cid planid []
sub <- getSubscriptionExpandable cid sid ["customer"]
void $ deletePlan planid
void $ deleteCustomer cid
return sub
result `shouldSatisfy` isRight
it "Succesfully retrieves a Customer's Subscriptions expanded" $ do
planid <- makePlanId
result <- stripe config $ do
Customer { customerId = cid } <- createEmptyCustomer
void $ createPlan planid
0 -- free plan
USD
Month
"sample plan"
[]
void $ createSubscription cid planid []
sub <- getSubscriptionsExpandable cid Nothing Nothing Nothing ["data.customer"]
void $ deletePlan planid
void $ deleteCustomer cid
return sub
result `shouldSatisfy` isRight
it "Succesfully retrieves a Customer's Subscriptions" $ do
planid <- makePlanId
result <- stripe config $ do
Customer { customerId = cid } <- createEmptyCustomer
void $ createPlan planid
0 -- free plan
USD
Month
"sample plan"
[]
void $ createSubscription cid planid []
sub <- getSubscriptions cid Nothing Nothing Nothing
void $ deletePlan planid
void $ deleteCustomer cid
return sub
result `shouldSatisfy` isRight
it "Succesfully updates a Customer's Subscriptions" $ do
planid <- makePlanId
secondPlanid <- makePlanId
couponid <- makeCouponId
result <- stripe config $ do
Coupon { } <-
createCoupon
(Just couponid)
Once
(Just $ AmountOff 1)
(Just USD)
Nothing
Nothing
Nothing
Nothing
[]
Customer { customerId = cid } <- createEmptyCustomer
void $ createPlan planid
0 -- free plan
USD
Month
"sample plan"
[]
void $ createPlan secondPlanid
0 -- free plan
USD
Year
"second sample plan"
[]
Subscription { subscriptionId = sid } <- createSubscription cid planid []
_ <- updateSubscription cid sid (Just couponid) Nothing [("hi","there")]
sub <- updateSubscription cid sid (Just couponid) (Just secondPlanid) [("hi","there")]
void $ deletePlan planid
void $ deletePlan secondPlanid
void $ deleteCustomer cid
return sub
result `shouldSatisfy` isRight
let Right Subscription {..} = result
subscriptionMetaData `shouldBe` [("hi", "there")]
subscriptionDiscount `shouldSatisfy` isJust
it "Succesfully cancels a Customer's Subscription" $ do
planid <- makePlanId
result <- stripe config $ do
Customer { customerId = cid } <- createEmptyCustomer
void $ createPlan planid
0 -- free plan
USD
Month
"sample plan"
[]
Subscription { subscriptionId = sid } <- createSubscription cid planid []
sub <- cancelSubscription cid sid False
void $ deletePlan planid
void $ deleteCustomer cid
return sub
result `shouldSatisfy` isRight
let Right Subscription {..} = result
subscriptionStatus `shouldBe` Canceled