summaryrefslogtreecommitdiff
path: root/tests/test_withdrawal.py
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2020-07-24 11:09:30 -0300
committerTorsten Grote <t@grobox.de>2020-07-28 15:42:39 -0300
commit08c3209dbc06329b4566ddd8d1dd7ab1c7e28ed7 (patch)
tree794658b2b9dfc3a39d8e374feae7e03919742f63 /tests/test_withdrawal.py
parent503c35d5f5972551cffa1fecb8b7b463503cc662 (diff)
downloadwallet-core-08c3209dbc06329b4566ddd8d1dd7ab1c7e28ed7.tar.gz
wallet-core-08c3209dbc06329b4566ddd8d1dd7ab1c7e28ed7.tar.bz2
wallet-core-08c3209dbc06329b4566ddd8d1dd7ab1c7e28ed7.zip
Add CI config for Gitlab CI integration tests (bash and pytest)
Diffstat (limited to 'tests/test_withdrawal.py')
-rw-r--r--tests/test_withdrawal.py120
1 files changed, 120 insertions, 0 deletions
diff --git a/tests/test_withdrawal.py b/tests/test_withdrawal.py
new file mode 100644
index 000000000..8a68807b6
--- /dev/null
+++ b/tests/test_withdrawal.py
@@ -0,0 +1,120 @@
+#!/usr/bin/env python3
+
+from taler.util.amount import Amount
+
+from tests import check_single_balance
+
+
+def test_withdrawal(exchange, bank, wallet):
+ # assert that we start with no transactions
+ result = wallet.cmd("getTransactions")
+ assert not result["transactions"]
+
+ # test withdrawal
+ amount_raw = "TESTKUDOS:5"
+ wallet.testing_withdraw(amount_raw, exchange.url, bank.url)
+
+ # check that balance is correct
+ result = wallet.cmd("getBalances")
+ amount_effective = Amount("TESTKUDOS", 4, 84000000).stringify()
+ check_single_balance(result["balances"], amount_effective)
+
+ # assert that withdrawal shows up properly in transactions
+ result = wallet.cmd("getTransactions")
+ assert len(result["transactions"]) == 1
+ transaction = result["transactions"][0]
+ assert transaction["type"] == "withdrawal"
+ assert transaction["amountEffective"] == amount_effective
+ assert transaction["amountRaw"] == amount_raw
+ assert transaction["exchangeBaseUrl"] == exchange.url
+ assert not transaction["pending"]
+ withdrawal_details = transaction["withdrawalDetails"]
+ assert withdrawal_details["type"] == "manual-transfer"
+ payto_list = ["payto://x-taler-bank/localhost/Exchange"]
+ assert withdrawal_details["exchangePaytoUris"] == payto_list
+
+ # get a withdrawal URI
+ uri = wallet.gen_withdraw_uri(amount_raw, bank.url)
+ assert uri.startswith("taler+http://withdraw")
+
+ # get withdrawal details from URI
+ result = wallet.cmd("getWithdrawalDetailsForUri", {"talerWithdrawUri": uri})
+ assert result["amount"] == amount_raw
+ assert result["defaultExchangeBaseUrl"] == exchange.url
+ assert len(result["possibleExchanges"]) == 1
+ assert result["possibleExchanges"][0]["exchangeBaseUrl"] == exchange.url
+ assert result["possibleExchanges"][0]["currency"] == "TESTKUDOS"
+ assert result["possibleExchanges"][0]["paytoUris"] == payto_list
+
+ # check withdrawal details for amount
+ request = {"exchangeBaseUrl": exchange.url, "amount": amount_raw}
+ result = wallet.cmd("getWithdrawalDetailsForAmount", request)
+ assert result["amountRaw"] == amount_raw
+ assert result["amountEffective"] == amount_effective
+ assert result["paytoUris"] == payto_list
+ assert not result["tosAccepted"]
+
+ # get ToS
+ result = wallet.cmd("getExchangeTos", {"exchangeBaseUrl": exchange.url})
+ assert result["currentEtag"] == exchange.terms_etag
+ assert result["tos"] == exchange.tos
+
+ # accept ToS
+ request = {"exchangeBaseUrl": exchange.url, "etag": exchange.terms_etag}
+ wallet.cmd("setExchangeTosAccepted", request)
+
+ # check that ToS are now shown as accepted
+ request = {"exchangeBaseUrl": exchange.url, "amount": amount_raw}
+ result = wallet.cmd("getWithdrawalDetailsForAmount", request)
+ assert result["tosAccepted"]
+
+ # accept withdrawal
+ request = {"exchangeBaseUrl": exchange.url, "talerWithdrawUri": uri}
+ result = wallet.cmd("acceptBankIntegratedWithdrawal", request)
+ assert result["confirmTransferUrl"].startswith(bank.url + "/confirm-withdrawal/")
+ confirm_url = result["confirmTransferUrl"]
+
+ # check that balance is correct
+ result = wallet.cmd("getBalances")
+ # TODO pendingIncoming and hasPendingTransactions are wrong, right?
+ print(result)
+ # check_single_balance(result["balances"], amount_effective, amount_effective, has_pending=True)
+
+ # assert that 2nd withdrawal shows up properly in transactions
+ result = wallet.cmd("getTransactions")
+ assert len(result["transactions"]) == 2
+ transaction = result["transactions"][0]
+ assert transaction["type"] == "withdrawal"
+ assert transaction["amountEffective"] == amount_effective
+ assert transaction["amountRaw"] == amount_raw
+ assert transaction["exchangeBaseUrl"] == exchange.url
+ assert transaction["pending"]
+ withdrawal_details = transaction["withdrawalDetails"]
+ assert withdrawal_details["type"] == "taler-bank-integration-api"
+ assert not withdrawal_details["confirmed"]
+ assert withdrawal_details["bankConfirmationUrl"] == confirm_url
+
+ # new withdrawal is newer than old one
+ timestamp0 = result["transactions"][0]["timestamp"]["t_ms"]
+ timestamp1 = result["transactions"][1]["timestamp"]["t_ms"]
+ assert timestamp0 > timestamp1
+
+ # one more manual withdrawal
+ request = {"exchangeBaseUrl": exchange.url, "amount": amount_raw}
+ result = wallet.cmd("acceptManualWithdrawal", request)
+ assert len(result["exchangePaytoUris"]) == 1
+ result["exchangePaytoUris"][0].startswith(payto_list[0])
+
+ # check that balance is correct
+ result = wallet.cmd("getBalances")
+ # TODO pendingIncoming and hasPendingTransactions are wrong, right?
+ print(result)
+ # check_single_balance(result["balances"], amount_effective, TODO, has_pending=True)
+
+ # assert that 3nd withdrawal shows up properly in transactions
+ result = wallet.cmd("getTransactions")
+ # TODO where is the manual withdrawal!??
+ # assert len(result["transactions"]) == 3
+ for t in result["transactions"]:
+ print(t)
+ print()