def test_generate_payment_request():
    pp = PayProc(KEY_FILENAME, cert_file=CERTIFICATE_FILENAME)
    pp.get_merchant = lambda x: MERCHANT
    pp.get_destinations = lambda device, payment_request: [
        Destination(amount=Decimal(5),
                    destination_address="xrb123",
                    crypto_currency="NANO")
    ]
    pp.get_supported_cryptos = lambda device, payment_request: [
        "BTC", "XMR", "NANO"
    ]

    payment_request = MerchantOrderRequestMessage(
        amount=Decimal(10),
        fiat_currency="EURO",
        session_id="123",
        crypto_currency="NANO",
    )

    envelope = pp.generate_payment_request("device1", payment_request)

    expected_message = PaymentRequestMessage(
        merchant=MERCHANT,
        amount=Decimal(10),
        fiat_currency="EURO",
        destinations=[
            Destination(amount=Decimal(5),
                        destination_address="xrb123",
                        crypto_currency="NANO")
        ],
        supported_cryptos={"BTC", "XMR", "NANO"},
    )

    assert expected_message == envelope.unpack()
def test_get_payment_request(mock_mqtt, payproc):
    test_receive_merchant_order_request(mock_mqtt, payproc)
    mock_mqtt.push("payment_requests/1423/btc", "")

    destination = Destination(amount=Decimal("5"),
                              destination_address="btc_daddress",
                              crypto_currency="btc")

    expected = PaymentRequestMessage(
        merchant=MERCHANT,
        fiat_currency="eur",
        amount=Decimal("1000"),
        destinations=[destination],
        supported_cryptos={"nano", "btc", "xmr"},
    )

    class PMEqual(Matcher):
        payment_request: PaymentRequestMessage

        def __init__(self, payment_request: PaymentRequestMessage):
            self.payment_request = payment_request

        def match(self, value):
            decoded = json.loads(value)
            message = PaymentRequestMessage.from_json(decoded["message"])
            assert self.payment_request == message
            return True

    mock_mqtt.publish.assert_called_with("payment_requests/1423",
                                         PMEqual(expected))
示例#3
0
def test_config2msg():
    from decimal import Decimal

    import file_config

    from manta.messages import Destination
    from manta.testing import config2msg
    from manta.testing.config import DummyPayProcConfig

    dest = Destination(
        amount=Decimal("0.01"),
        destination_address=
        "xrb_3d1ab61eswzsgx5arwqc3gw8xjcsxd7a5egtr69jixa5it9yu9fzct9nyjyx",
        crypto_currency="NANO")
    cfg_dest = DummyPayProcConfig.DestinationConfig(
        amount=Decimal("0.01"),
        destination_address=
        "xrb_3d1ab61eswzsgx5arwqc3gw8xjcsxd7a5egtr69jixa5it9yu9fzct9nyjyx",
        crypto_currency="NANO")

    assert file_config.validate(cfg_dest) is None

    converted = config2msg(cfg_dest, Destination)
    assert converted == dest
示例#4
0
    Destination,
    PaymentRequestMessage,
    verify_chain,
    PaymentMessage,
    AckMessage,
    Status,
    Merchant,
)
from manta.wallet import Wallet

# noinspection PyUnresolvedReferences
from tests.utils import JsonContains

DESTINATIONS = [
    Destination(
        amount=Decimal(5), destination_address="btc_daddress", crypto_currency="btc"
    ),
    Destination(
        amount=Decimal(10), destination_address="nano_daddress", crypto_currency="nano"
    ),
]

MERCHANT = Merchant(name="Merchant 1", address="5th Avenue")

PRIVATE_KEY = "certificates/root/keys/test.key"
CERTIFICATE = "certificates/root/certs/test.crt"
CA_CERTIFICATE = "certificates/root/certs/DeveloperCA.crt"


@pytest.fixture
def payment_request():
示例#5
0
from decimal import Decimal
import logging

from aiohttp import web

from manta.messages import MerchantOrderRequestMessage, Destination, Merchant
from manta.payproc import PayProc

logger = logging.getLogger(__name__)

KEYFILE = "certificates/root/keys/test.key"
DESTINATIONS = [
    Destination(
        amount=Decimal("0.01"),
        destination_address=
        "xrb_3d1ab61eswzsgx5arwqc3gw8xjcsxd7a5egtr69jixa5it9yu9fzct9nyjyx",
        crypto_currency="NANO"),
]

MERCHANT = Merchant(name="Merchant 1", address="5th Avenue")


def get_destinations(application_id,
                     merchant_order: MerchantOrderRequestMessage):
    if merchant_order.crypto_currency:
        destination = next(
            x for x in DESTINATIONS
            if x.crypto_currency == merchant_order.crypto_currency)
        return [destination]
    else: