packages feed

stripe-haskell-0.1.4.1: tests/Test/Coupon.hs

{-# LANGUAGE OverloadedStrings #-}
module Test.Coupon where

import           Control.Monad
import           Data.Either
import           Test.Hspec
import           Test.Util

import           Web.Stripe
import           Web.Stripe.Coupon

couponTests :: StripeConfig -> Spec
couponTests config = do
  describe "Coupon tests" $ do
    it "Succesfully create a coupon" $ do
      couponName <- makeCouponId
      result <- stripe config $ do
        c@(Coupon { couponId = cid }) <-
          createCoupon
             (Just couponName)
             Once
             (Just $ AmountOff 1)
             (Just USD)
             Nothing
             Nothing
             Nothing
             Nothing
             []
        void $ deleteCoupon cid
        return c
      result `shouldSatisfy` isRight
    it "Succesfully retrieve a coupon" $ do
      couponName <- makeCouponId
      result <- stripe config $ do
                Coupon { couponId = cid } <- createCoupon
                                  (Just couponName)
                                  Once
                                  (Just $ AmountOff 1)
                                  (Just USD)
                                  Nothing
                                  Nothing
                                  Nothing
                                  Nothing
                                  []
                res <- getCoupon cid
                void $ deleteCoupon cid
                return res
      result `shouldSatisfy` isRight
    it "Succesfully delete a coupon" $ do
      couponName <- makeCouponId
      result <- stripe config $ do
                Coupon { couponId = cid } <- createCoupon
                                  (Just couponName)
                                  Once
                                  (Just $ AmountOff 1)
                                  (Just USD)
                                  Nothing
                                  Nothing
                                  Nothing
                                  Nothing
                                  []
                deleteCoupon cid
      result `shouldSatisfy` isRight
    it "Succesfully update a coupon" $ do
      couponName <- makeCouponId
      result <- stripe config $ do
                Coupon { couponId = cid } <- createCoupon
                                  (Just couponName)
                                  Once
                                  (Just $ AmountOff 1)
                                  (Just USD)
                                  Nothing
                                  Nothing
                                  Nothing
                                  Nothing
                                  []
                r <- updateCoupon cid [("hi", "there")]
                void $ deleteCoupon cid
                return r
      result `shouldSatisfy` isRight
      let Right (Coupon { couponMetaData = cmd }) = result
      cmd `shouldBe` [("hi", "there")]
    it "Succesfully retrieves all coupons" $ do
      result <- stripe config $ getCoupons Nothing Nothing Nothing
      result `shouldSatisfy` isRight