Beispiel #1
0
 def _get_validated_create_order_input(
         cls, params: Union[CreateOrderInput, dict]) -> CreateOrderInput:
     assert isinstance(params, (CreateOrderInput, dict))
     if isinstance(params, dict):
         return CreateOrderInput.from_dict(params)
     else:
         return params
Beispiel #2
0
import pytest
from cryptography.exceptions import InvalidSignature

from pc4store.clients.base import BaseClient
from pc4store.data import CreateOrderInput, ErrorResponse, CreateOrderSuccess

from tests.data import full_input, min_input, success_response, error_response
from tests.data import order_data
from tests.utils.fixtures import rand_str


@pytest.mark.parametrize('input_data', [
    full_input(),
    min_input(),
    CreateOrderInput(**full_input()),
    CreateOrderInput(**min_input()),
])
def test__get_validated_create_input__correct_input(input_data):
    res = BaseClient._get_validated_create_order_input(input_data)
    assert isinstance(res, CreateOrderInput)


def test__get_validated_create_input__incorrect_input_type():
    with pytest.raises(AssertionError):
        BaseClient._get_validated_create_order_input(list())


@mock.patch('pc4store.data.CreateOrderInput.from_dict', side_effect=ValueError)
def test__get_validated_create_input__invalid_input(from_dict_mock):
    with pytest.raises(ValueError):
Beispiel #3
0
def test_missing_required_field(min_dict_input):
    del min_dict_input[random.choice(list(min_dict_input))]
    with pytest.raises(AssertionError) as e:
        CreateOrderInput.from_dict(min_dict_input)
    assert 'Missing required field' in str(e.value)
Beispiel #4
0
def test_unexpected_field(full_dict_input):
    full_dict_input[str(uuid4())] = rand_str()
    with pytest.raises(AssertionError) as e:
        CreateOrderInput.from_dict(full_dict_input)
    assert 'Got unexpected params:' in str(e.value)
Beispiel #5
0
def test_full_dict_input(full_dict_input):
    input_obj = CreateOrderInput.from_dict(full_dict_input)
    assert isinstance(input_obj, CreateOrderInput)
Beispiel #6
0
def test_min_required_input(min_dict_input):
    input_obj = CreateOrderInput.from_dict(min_dict_input)
    assert isinstance(input_obj, CreateOrderInput)
Beispiel #7
0
from pc4store.data import CreateOrderInput, OrderData

my_store_id = 'e40e58c5-2dd2-4c3b-994f-5af9c7ea255b'
my_store_secret_key = 'b8c4d4c6-579a-41aa-b887-d390242ce339'

# initialize client
client = Pc4StoreAsyncClient(store_id=my_store_id,
                             store_key=my_store_secret_key)

# create order
res = await client.create_order(
    CreateOrderInput(
        currency_name='USDCASH',
        currency_smart_contract='token.pcash',
        amount_to_pay='99.99999',
        response_url='https://api.my-store/payment-callback/',
        expiration_time=30 * 60,  # 30 min
        merchant_order_id='12345',
        description='optional description for this order',
        success_payment_redirect_url='https://my-store/orders/12345/success',
        failed_payment_redirect_url='https://my-store/orders/12345/failed',
    )
)

if res.status == 'OK':
    order: OrderData = res.payload.order  # all data about order
    payment_link = order.payment_url  # link to redirect user for payment
    order_id = order.id  # unique order id in payment system
else:
    print(res.error)
Beispiel #8
0
def full_dataclass_input():
    return CreateOrderInput(**full_input())
Beispiel #9
0
def min_dataclass_input():
    return CreateOrderInput(**min_input())