{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RebindableSyntax  #-}
module Web.Stripe.Test.Balance where

import           Data.Either
import           Test.Hspec
import           Web.Stripe.Test.Prelude

import           Web.Stripe.Balance
import           Web.Stripe.Charge
import           Web.Stripe.Customer
import           Web.Stripe.StripeRequest (Expandable (..))

balanceTests :: StripeSpec
balanceTests stripe = do
  describe "Balance tests" $ do
    it "Succesfully retrieves a Balance" $ do
      result <- stripe $ do b <- getBalance
                            return b
      result `shouldSatisfy` isRight
    it "Succesfully retrieves a Balance Transaction" $ do
      result <- stripe $ do
          Customer { customerId = cid } <-
            createCustomer
              -&- ((mkNewCard cn em ey) { newCardCVC = Just cvc })
          Charge { chargeBalanceTransaction = Just (Id txid) } <-
            createCharge (Amount 100) USD -&- cid
          balance <- getBalanceTransaction txid
          void $ deleteCustomer cid
          return balance
      result `shouldSatisfy` isRight
    it "Succesfully retrieves an Expanded Balance Transaction" $ do
       result <- stripe $ do
          Customer { customerId = cid } <-
            createCustomer
              -&- ((mkNewCard cn em ey) { newCardCVC = Just cvc })
          Charge   { chargeBalanceTransaction = Just (Id txid)
                   } <- createCharge (Amount 100) USD -&- cid
          result <- getBalanceTransaction txid -&- ExpandParams ["source"]
          void $ deleteCustomer cid
          return result
       result `shouldSatisfy` isRight
    it "Succesfully retrieves Balance Transaction History" $ do
      result <- stripe $ do b <- getBalanceTransactionHistory
                            return b
      result `shouldSatisfy` isRight
  where
    cn  = CardNumber "4242424242424242"
    em  = ExpMonth 12
    ey  = ExpYear 2020
    cvc = CVC "123"