Add payment integration test (fails early)

This commit is contained in:
Torsten Grote 2020-07-29 15:31:09 -03:00
parent c8553f3bc5
commit 899a73ca78
No known key found for this signature in database
GPG Key ID: 3E5F77D92CF891FF
3 changed files with 85 additions and 0 deletions

View File

@ -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"]

View File

@ -3,6 +3,7 @@ import pytest
from tests.components.bank import Bank from tests.components.bank import Bank
from tests.components.config import Config from tests.components.config import Config
from tests.components.exchange import Exchange from tests.components.exchange import Exchange
from tests.components.merchant import Merchant
from tests.components.wallet import Wallet from tests.components.wallet import Wallet
@ -25,6 +26,13 @@ def bank(watcher_getter, request, config):
return bank return bank
@pytest.fixture
def merchant(watcher_getter, request, config):
merchant = Merchant(config, watcher_getter, request)
merchant.start()
return merchant
@pytest.fixture @pytest.fixture
def wallet(watcher_getter, config): def wallet(watcher_getter, config):
return Wallet(config) return Wallet(config)

11
tests/test_payments.py Normal file
View File

@ -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)