{-# LANGUAGE OverloadedStrings #-} module Test.Plan where import Control.Monad (void) import Data.Either (isRight) import Data.Time import Test.Hspec import Test.Util (makePlanId) import Web.Stripe import Web.Stripe.Plan import Web.Stripe.Customer planTests :: StripeConfig -> Spec planTests config = do describe "Plan tests" $ do it "Succesfully creates a Plan" $ do planid <- makePlanId result <- stripe config $ do p <- createPlan planid 0 -- free plan USD Month "sample plan" [] void $ deletePlan planid return p result `shouldSatisfy` isRight it "Succesfully deletes a Plan" $ do planid <- makePlanId result <- stripe config $ do Plan { planId = pid } <- createPlan planid 0 -- free plan USD Month "sample plan" [] deletePlan pid result `shouldSatisfy` isRight it "Succesfully updates a Plan" $ do planid <- makePlanId result <- stripe config $ do Plan { planId = pid } <- createPlan planid 0 -- free plan USD Month "sample plan" [] r <- updatePlanBase pid (Just "cookie") (Just "test") [("key","value")] void $ deletePlan pid return r result `shouldSatisfy` isRight let Right Plan { planMetaData = pm , planName = pname , planDescription = pdesc } = result pm `shouldBe` [("key", "value")] pname `shouldBe` "cookie" pdesc `shouldBe` Just "test" it "Succesfully creates a Plan with a TrialPeriod" $ do planid <- makePlanId today <- getCurrentTime let trialPeriod = UTCTime (addDays 14 $ utctDay today) (utctDayTime today) result <- stripe config $ do p <- createPlan planid 100 -- lets charge for it USD Month "sample 100 plan" [] c <- createCustomerBase Nothing Nothing Nothing Nothing Nothing Nothing Nothing -- couponId Nothing (Just $ Email "test@example.com") (Just planid) Nothing (Just $ TrialPeriod trialPeriod) [] void $ deletePlan planid void $ deleteCustomer $ customerId c return (p, c) result `shouldSatisfy` isRight it "Succesfully retrieves a Plan" $ do planid <- makePlanId result <- stripe config $ do Plan { planId = pid } <- createPlan planid 0 -- free plan USD Month "sample plan" [] r <- getPlan pid void $ deletePlan pid return r result `shouldSatisfy` isRight it "Succesfully retrieves a list of Plans" $ do result <- stripe config $ getPlans Nothing Nothing Nothing result `shouldSatisfy` isRight