summaryrefslogtreecommitdiff
path: root/tests/components/merchant.py
blob: 373b8ed86c58c347a1f7ca4e87c65afa0853e9d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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"]