packages feed

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

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Test.Customer where

import           Data.Either
import           Data.Maybe
import           Test.Hspec
import           Web.Stripe
import           Web.Stripe.Customer

customerTests :: StripeConfig -> Spec
customerTests config =
  describe "Customer tests" $ do
    it "Creates an empty customer" $ do
      result <- stripe config $ do
        c@Customer{..} <- createEmptyCustomer
        _ <- deleteCustomer customerId
        return c
      result `shouldSatisfy` isRight
    it "Deletes a customer" $ do
      result <- stripe config $ do
        c@Customer{..} <- createEmptyCustomer
        _ <- deleteCustomer customerId
        return c
      result `shouldSatisfy` isRight
    it "Gets a customer" $ do
      result <- stripe config $ do
        Customer { customerId = cid } <- createEmptyCustomer
        customer <- getCustomer cid
        _ <- deleteCustomer cid
        return customer
      result `shouldSatisfy` isRight
    it "Gets a customer expandable" $ do
      result <- stripe config $ do
        Customer { customerId = cid } <- createEmptyCustomer
        customer <- getCustomerExpandable cid ["default_card"]
        _ <- deleteCustomer cid
        return customer
      result `shouldSatisfy` isRight
    it "Gets customers" $ do
      result <- stripe config $ getCustomers (Just 100) Nothing Nothing 
      result `shouldSatisfy` isRight
    it "Gets customers expandable" $ do
      result <- stripe config $ getCustomersExpandable
                 Nothing Nothing Nothing ["data.default_card"]
      result `shouldSatisfy` isRight
    it "Updates a customer" $ do
      result <- stripe config $ do
        Customer { customerId = cid } <- createEmptyCustomer
        customer <- updateCustomerBase cid
                      bal
                      Nothing
                      Nothing
                      Nothing
                      Nothing
                      Nothing
                      Nothing
                      Nothing
                      desc 
                      email
                      meta
        _ <- deleteCustomer cid
        return customer
      result `shouldSatisfy` isRight
      let Right Customer{..} = result
      customerAccountBalance `shouldBe` (fromJust bal)
      customerDescription `shouldBe` desc
      customerEmail `shouldBe` email
      customerMetaData `shouldBe` meta
  where
    bal = Just 100
    desc = Just "hey"
    email = Just $ Email "djohnson.m@gmail.com"
    meta = [("hey","there")]