content: {-# LANGUAGE RecordWildCards #-}
  {-# LANGUAGE OverloadedStrings #-}
  {-# LANGUAGE RebindableSyntax #-}
  {-# LANGUAGE RankNTypes #-}
  module Web.Stripe.Test.Transfer where
  
  import           Data.Maybe
  import           Data.Either
  import           Data.String
  import           Web.Stripe.Test.Prelude
  
  import           Web.Stripe.Recipient
  import           Web.Stripe.Transfer
  
  ------------------------------------------------------------------------------
  -- the tests
  
  transferTests :: StripeSpec
  transferTests stripe =
    describe "Transfer tests" $ do
      -- it "Create a new transfer" $ do
      --   result <- stripe $ do
      --     Recipient { recipientId = rid } <-
      --       createRecipient name Individual -&- bankinfo
      --     transfer <- createTransfer rid (Amount 100) USD
      --     void $ deleteRecipient rid
      --     return transfer
      --   result `shouldSatisfy` isRight
      -- it "Retrieves a transfer" $ do
      --   result <- stripe $ do
      --     Recipient { recipientId = rid } <-
      --       createRecipient name Individual -&- bankinfo
      --     Transfer { transferId = tid }
      --        <- createTransfer rid (Amount 100) USD
      --     t <- getTransfer tid
      --     void $ deleteRecipient rid
      --     return t
      --   result `shouldSatisfy` isRight
      -- it "Retrieves a transfer expandable" $ do
      --   result <- stripe $ do
      --     Recipient { recipientId = rid } <-
      --       createRecipient name Individual -&- bankinfo
      --     Transfer { transferId = tid }
      --        <- createTransfer rid (Amount 100) USD
      --     t <- getTransfer tid -&- ExpandParams ["recipient", "balance_transaction"]
      --     void $ deleteRecipient rid
      --     return t
      --   result `shouldSatisfy` isRight
      it "Retrieves transfers" $ do
        result <- stripe $ do t <- getTransfers
                              return t
        result `shouldSatisfy` isRight
      it "Retrieves transfers expandable" $ do
        result <- stripe $ do t <- getTransfers -&- ExpandParams
                                     [ "data.recipient"
                                     , "data.balance_transaction"
                                     ]
                              return t
        result `shouldSatisfy` isRight
      -- it "Updates a transfer" $ do
      --   result <- stripe $ do
      --     Recipient { recipientId = rid } <-
      --       createRecipient name Individual -&- bankinfo
      --     Transfer { transferId = tid }
      --        <- createTransfer rid (Amount 100) USD
      --     t <- updateTransfer tid
      --           -&- (Description "hey there")
      --           -&- (MetaData [("hey", "there")])
      --     void $ deleteRecipient rid
      --     return t
      --   result `shouldSatisfy` isRight
      --   let Right Transfer {..} = result
      --   transferMetaData `shouldBe` (MetaData [("hey", "there")])
      --   transferDescription `shouldBe` (Just (Description "hey there"))
      it "Can't Cancel a committed transfer" $ do
        result <- stripe $ do
          Recipient { recipientId = rid } <-
            createRecipient
              name
              Individual
              -&- bankinfo
          Transfer { transferId = tid }
             <- createTransfer rid (Amount 100) USD
          t <- cancelTransfer tid
          void $ deleteRecipient rid
          return t
        result `shouldSatisfy` isLeft
    where
      country       = Country "US"
      routingnumber = RoutingNumber "110000000"
      accountnumber = AccountNumber "000123456789"
      name          = Name "David Johnson"
      bankinfo      = NewBankAccount country routingnumber accountnumber
  