{-# LANGUAGE OverloadedStrings #-} {-# OPTIONS_GHC -F -pgmF htfpp #-} -- | test wallets and transfers module Web.MangoPay.WalletsTest where import Web.MangoPay import Web.MangoPay.TestUtils import Test.Framework import Test.HUnit (Assertion) import Data.Default import Data.Maybe (isJust, fromJust) -- | test wallet API test_Wallet :: Assertion test_Wallet = do usL<-testMP $ listUsers def (Just $ Pagination 1 1) assertEqual 1 (length $ plData usL) let uid=urId $ head $ plData usL let w=Wallet Nothing Nothing (Just "custom") [uid] "my wallet" "EUR" Nothing w2<-testMP $ createWallet w assertBool (isJust $ wId w2) assertBool (isJust $ wCreationDate w2) w3<-testMP $ modifyWallet w2{wTag=Just "custom2"} assertEqual (Just "custom2") (wTag w3) assertEqual (wId w2) (wId w3) w4<-testMP $ fetchWallet (fromJust $ wId w2) assertEqual (Just "custom2") (wTag w4) assertEqual (wId w2) (wId w4) assertEqual (Just $ Amount "EUR" 0) (wBalance w4) ws<-testMP $ listWallets uid def (Just $ Pagination 1 100) assertBool (not (null $ plData ws)) assertEqual 1 (length $ filter ((wId w3 ==) . wId) $ plData ws) -- | test transfer API + notifications on failure test_FailedTransfer :: Assertion test_FailedTransfer = do usL<-testMP $ listUsers def (Just $ Pagination 1 2) assertEqual 2 (length $ plData usL) let [uid1,uid2] = map urId $ plData usL assertBool (uid1 /= uid2) ws<- testMP $ listWallets uid1 def Nothing assertBool $ not $ null $ plData ws let uw1=fromJust $ wId $ head $ plData ws let w2=Wallet Nothing Nothing (Just "custom") [uid2] "my wallet" "EUR" Nothing w2'<-testMP $ createWallet w2 let uw2=fromJust $ wId w2' assertBool (uw1 /= uw2) -- transfer will fail since I have no money testEventTypes [TRANSFER_NORMAL_CREATED {- Fixed in Okapi -} , TRANSFER_NORMAL_FAILED] $ do let t1=Transfer Nothing Nothing Nothing uid1 (Just uid2) (Amount "EUR" 100) (Amount "EUR" 1) uw1 uw2 Nothing Nothing Nothing Nothing Nothing t1'<-testMP $ createTransfer t1 assertBool (isJust $ tId t1') assertEqual (Just $ Amount "EUR" 99) (tCreditedFunds t1') t2'<-testMP $ fetchTransfer (fromJust $ tId t1') assertEqual t1' t2' ts1 <- testMP $ listTransactions uw1 def def Nothing assertEqual 1 (length $ filter ((tId t1'==) . txId) $ plData ts1) ts1f <- testMP $ listTransactions uw1 (def{tfStatus=Just Failed}) def Nothing assertEqual 1 (length $ filter ((tId t1'==) . txId) $ plData ts1f) ts1ft <- testMP $ listTransactions uw1 (def{tfStatus=Just Failed,tfType=Just TRANSFER}) def Nothing assertEqual 1 (length $ filter ((tId t1'==) . txId) $ plData ts1ft) ts1st <- testMP $ listTransactions uw1 (def{tfStatus=Just Succeeded,tfType=Just TRANSFER}) def Nothing assertEqual 0 (length $ filter ((tId t1'==) . txId) $ plData ts1st) ts2 <- testMP $ listTransactions uw2 def def Nothing assertEqual 1 (length $ filter ((tId t1'==) . txId) $ plData ts2) uts1 <- testMP $ listTransactionsForUser uid1 def def Nothing assertEqual 1 (length $ filter ((tId t1'==) . txId) $ plData uts1) return $ tId t1' -- | test transfer API + notifications on success test_SuccessfulTransfer :: Assertion test_SuccessfulTransfer = do usL<-testMP $ listUsers def (Just $ Pagination 1 2) assertEqual 2 (length $ plData usL) let [uid1,uid2] = map urId $ plData usL assertBool (uid1 /= uid2) ws<- testMP $ listWallets uid1 def Nothing assertBool $ not $ null $ plData ws let uw1=fromJust $ wId $ head $ plData ws let w2=Wallet Nothing Nothing (Just "custom") [uid2] "my wallet" "EUR" Nothing w2'<-testMP $ createWallet w2 let uw2=fromJust $ wId w2' assertBool (uw1 /= uw2) cr<-testMP $ unsafeFullRegistration uid1 "EUR" testCardInfo1 assertBool (isJust $ crCardId cr) let cid=fromJust $ crCardId cr testEventTypes [PAYIN_NORMAL_CREATED,PAYIN_NORMAL_SUCCEEDED] $ do let cp=mkCardPayin uid1 uid1 uw1 (Amount "EUR" 333) (Amount "EUR" 1) "http://dummy" cid cp2<-testMP $ createCardPayin cp assertEqual (Just Succeeded) (cpStatus cp2) return $ cpId cp2 testEventTypes [TRANSFER_NORMAL_CREATED {- Fixed in Okapi -} , TRANSFER_NORMAL_SUCCEEDED] $ do let t1=Transfer Nothing Nothing Nothing uid1 (Just uid2) (Amount "EUR" 100) (Amount "EUR" 1) uw1 uw2 Nothing Nothing Nothing Nothing Nothing t1'<-testMP $ createTransfer t1 assertBool (isJust $ tId t1') assertEqual (Just $ Amount "EUR" 99) (tCreditedFunds t1') t2'<-testMP $ fetchTransfer (fromJust $ tId t1') assertEqual t1' t2' ts1 <- testMP $ listTransactions uw1 def def Nothing assertEqual 1 (length $ filter ((tId t1'==) . txId) $ plData ts1) ts2 <- testMP $ listTransactions uw2 def def Nothing assertEqual 1 (length $ filter ((tId t1'==) . txId) $ plData ts2) uts1 <- testMP $ listTransactionsForUser uid1 def def Nothing assertEqual 1 (length $ filter ((tId t1'==) . txId) $ plData uts1) return $ tId t1' test_OrderTransactions :: Assertion test_OrderTransactions = do usL<-testMP $ listUsers def (Just $ Pagination 1 2) assertEqual 2 (length $ plData usL) let uid1 = head $ map urId $ plData usL uts1 <- testMP $ listTransactionsForUser uid1 def (TxByExecutionDate ASC) Nothing assertBool $ length (plData uts1) > 1 uts2 <- testMP $ listTransactionsForUser uid1 def (TxByExecutionDate DESC) Nothing assertEqual (map txId $ plData uts1) $ reverse $ map txId $ plData uts2 utsc1 <- testMP $ listTransactionsForUser uid1 def (TxByCreationDate ASC) Nothing assertBool $ length (plData utsc1) > 1 utsc2 <- testMP $ listTransactionsForUser uid1 def (TxByCreationDate DESC) Nothing assertEqual (map txId $ plData utsc1) $ reverse $ map txId $ plData utsc2 test_OrderEvents :: Assertion test_OrderEvents = do evt1 <- testMP $ searchAllEvents def{espSortByDate=Just ASC} evt2 <- testMP $ searchAllEvents def{espSortByDate=Just DESC} assertEqual evt1 $ reverse evt2