From 08c3209dbc06329b4566ddd8d1dd7ab1c7e28ed7 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 24 Jul 2020 11:09:30 -0300 Subject: Add CI config for Gitlab CI integration tests (bash and pytest) --- tests/test_withdrawal.py | 120 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 tests/test_withdrawal.py (limited to 'tests/test_withdrawal.py') 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() -- cgit v1.2.3