aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2020-07-29 15:31:09 -0300
committerTorsten Grote <t@grobox.de>2020-07-29 15:31:09 -0300
commit899a73ca78a9a66b89248092bd2d804c668b47ee (patch)
tree7725dc512521ad29b90ba76bec74427c2b3a3aa4
parentc8553f3bc53064d157b56220e9d2333b8931e7a5 (diff)
downloadwallet-core-899a73ca78a9a66b89248092bd2d804c668b47ee.tar.xz
Add payment integration test (fails early)
-rw-r--r--tests/components/merchant.py66
-rw-r--r--tests/conftest.py8
-rw-r--r--tests/test_payments.py11
3 files changed, 85 insertions, 0 deletions
diff --git a/tests/components/merchant.py b/tests/components/merchant.py
new file mode 100644
index 000000000..373b8ed86
--- /dev/null
+++ b/tests/components/merchant.py
@@ -0,0 +1,66 @@
+import os
+from subprocess import run
+
+import requests
+
+from .taler_service import TalerService
+
+
+class Merchant(TalerService):
+
+ def __init__(self, config, watcher_getter, request):
+ super().__init__(config, watcher_getter, request)
+
+ # get localhost port and store merchant URL
+ r = run(["taler-config", "-c", config.conf, "-s", "MERCHANT", "-o", "PORT"],
+ check=True, text=True, capture_output=True)
+ self.url = "http://localhost:%s/" % r.stdout.rstrip()
+
+ def start(self):
+ log_path = os.path.join(self.config.tmpdir, "merchant.log")
+ self.watcher_getter(
+ name='taler-merchant-httpd',
+ arguments=['-c', self.config.conf, '-L', 'INFO', '-l', log_path],
+ checker=self.test_url,
+ request=self.request, # Needed for the correct execution order of finalizers
+ )
+
+ def create_instance(self, instance="default", name="GNU Taler Merchant"):
+ body = {
+ "id": instance,
+ "name": name,
+ "payto_uris": ["payto://x-taler-bank/test_merchant"],
+ "address": {},
+ "jurisdiction": {},
+ "default_max_wire_fee": "TESTKUDOS:1",
+ "default_wire_fee_amortization": 3,
+ "default_max_deposit_fee": "TESTKUDOS:1",
+ "default_wire_transfer_delay": {"d_ms": "forever"},
+ "default_pay_delay": {"d_ms": "forever"}
+ }
+ r = requests.post(self.url + "private/instances", json=body)
+ r.raise_for_status()
+
+ def create_order(self, amount, instance="default", summary="Test Order",
+ fulfillment_url="taler://fulfillment-success/Enjoy+your+ice+cream!"):
+ body = {
+ "order": {
+ "amount": amount,
+ "summary": summary,
+ "fulfillment_url": fulfillment_url
+ }
+ }
+ r = requests.post("{}instances/{}/private/orders".format(self.url, instance), json=body)
+ r.raise_for_status()
+ return r.json()
+
+ def check_payment(self, order_id, instance="default"):
+ r = requests.get("{}instances/{}/private/orders/{}".format(self.url, instance, order_id))
+ r.raise_for_status()
+ return r.json()
+
+ def gen_pay_uri(self, amount, instance="default", summary="Test Order",
+ fulfillment_url="taler://fulfillment-success/Enjoy+your+ice+cream!"):
+ order = self.create_order(amount, instance, summary, fulfillment_url)
+ response = self.check_payment(order["order_id"], instance)
+ return response["taler_pay_uri"]
diff --git a/tests/conftest.py b/tests/conftest.py
index 1922d1d40..6bc801bac 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -3,6 +3,7 @@ import pytest
from tests.components.bank import Bank
from tests.components.config import Config
from tests.components.exchange import Exchange
+from tests.components.merchant import Merchant
from tests.components.wallet import Wallet
@@ -26,5 +27,12 @@ def bank(watcher_getter, request, config):
@pytest.fixture
+def merchant(watcher_getter, request, config):
+ merchant = Merchant(config, watcher_getter, request)
+ merchant.start()
+ return merchant
+
+
+@pytest.fixture
def wallet(watcher_getter, config):
return Wallet(config)
diff --git a/tests/test_payments.py b/tests/test_payments.py
new file mode 100644
index 000000000..b73d7f791
--- /dev/null
+++ b/tests/test_payments.py
@@ -0,0 +1,11 @@
+#!/usr/bin/env python3
+from tests import print_json
+
+
+def test_payments(exchange, bank, merchant, wallet):
+ merchant.create_instance()
+ pay_uri = merchant.gen_pay_uri("TESTKUDOS:2")
+
+ # TODO fix
+ # result = wallet.cmd("preparePay", {"talerPayUri": pay_uri})
+ # print_json(result)