aboutsummaryrefslogtreecommitdiff
path: root/tests/components
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 /tests/components
parentc8553f3bc53064d157b56220e9d2333b8931e7a5 (diff)
Add payment integration test (fails early)
Diffstat (limited to 'tests/components')
-rw-r--r--tests/components/merchant.py66
1 files changed, 66 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"]