Example #1
0
    def test_amount_cast(self):
        amount = Amount()
        amount.value = 0.1
        amount.currency = Currency.RUB

        self.assertEqual({'value': 0.1, 'currency': Currency.RUB}, dict(amount))
        self.assertEqual(0.1, amount.value)
    def test_receipt_item(self):
        receipt_item = ReceiptItem()
        receipt_item.description = "Product"
        receipt_item.quantity = 1.0
        receipt_item.amount = Amount({
            "value": 100.0,
            "currency": Currency.RUB
        })
        receipt_item.vat_code = 2
        receipt_item.payment_subject = PaymentSubject.AGENT_COMMISSION
        receipt_item.payment_mode = PaymentMode.ADVANCE
        receipt_item.product_code = '00 00 00 01 00 21 FA 41 00 23 05 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 00 AB 00'
        receipt_item.country_of_origin_code = "RU"
        receipt_item.customs_declaration_number = "90/210"
        receipt_item.excise = 2.00

        self.assertEqual({
            "description": "Product",
            "quantity": 1.0,
            "amount": {
                "value": 100.0,
                "currency": Currency.RUB
            },
            "vat_code": 2,
            "payment_subject": PaymentSubject.AGENT_COMMISSION,
            "payment_mode": PaymentMode.ADVANCE,
            "product_code": "00 00 00 01 00 21 FA 41 00 23 05 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 00 AB 00",
            "country_of_origin_code": "RU",
            "customs_declaration_number": "90/210",
            "excise": 2.00,
        }, dict(receipt_item))

        with self.assertRaises(TypeError):
            receipt_item.amount = 'invalid amount'
Example #3
0
    def test_request_validate(self):
        request = RefundRequest()
        with self.assertRaises(ValueError):
            request.validate()

        request.payment_id = '21a632d2-000f-5061-a000-01e90bc2de12'
        with self.assertRaises(ValueError):
            request.validate()

        request.amount = Amount({'value': 0.0, 'currency': Currency.RUB})
        with self.assertRaises(ValueError):
            request.validate()

        request.amount.value = 0.1

        request.receipt = {
            'phone':
            '79990000000',
            'items': [{
                "description": "Product 1",
                "quantity": 2.0,
                "amount": {
                    "value": 250.0,
                    "currency": Currency.RUB
                },
            }, {
                "description": "Product 2",
                "quantity": 1.0,
                "amount": {
                    "value": 100.0,
                    "currency": Currency.RUB
                },
            }]
        }
        with self.assertRaises(ValueError):
            request.validate()

        request.receipt = {
            'tax_system_code':
            1,
            'items': [{
                "description": "Product 1",
                "quantity": 2.0,
                "amount": {
                    "value": 250.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            }, {
                "description": "Product 2",
                "quantity": 1.0,
                "amount": {
                    "value": 100.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            }]
        }
        with self.assertRaises(ValueError):
            request.validate()
 def amount(self, value):
     if isinstance(value, dict):
         self.__amount = Amount(value)
     elif isinstance(value, Amount):
         self.__amount = value
     else:
         raise TypeError('Invalid amount value type')
    def test_receipt_item(self):
        receipt_item = ReceiptItem()
        receipt_item.description = "Product"
        receipt_item.quantity = 1.0
        receipt_item.amount = Amount({
            "value": 100.0,
            "currency": Currency.RUB
        })
        receipt_item.vat_code = 2

        self.assertEqual(
            {
                "description": "Product",
                "quantity": 1.0,
                "amount": {
                    "value": 100.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2,
                "payment_subject": PaymentSubject.AGENT_COMMISSION,
                "payment_mode": PaymentMode.ADVANCE
            }, dict(receipt_item))

        with self.assertRaises(TypeError):
            receipt_item.amount = 'invalid amount'
    def test_request_validate_payment_method_id(self):
        request = PaymentRequest()
        request.amount = Amount({'value': 0.1, 'currency': Currency.RUB})
        request.payment_method_id = '2425cbf1-001f-5000-a001-181a3bf24511'

        # Should pass other validations
        request.validate()
    def test_transfer_cast(self):
        self.maxDiff = None
        transfer = TransferResponse()
        transfer.status = TransferStatus.SUCCEEDED
        transfer.account_id = '79990000000'
        transfer.amount = Amount({"value": '100.01', "currency": Currency.RUB})

        self.assertEqual(
            {
                "account_id": "79990000000",
                "amount": {
                    "value": 100.01,
                    "currency": Currency.RUB
                },
                "status": TransferStatus.SUCCEEDED
            }, dict(transfer))

        self.assertEqual('79990000000', transfer.account_id)
        self.assertEqual(TransferStatus.SUCCEEDED, transfer.status)

        self.assertEqual({
            "value": 100.01,
            "currency": Currency.RUB
        }, dict(transfer.amount))
        self.assertEqual(transfer.amount.value, 100.01)

        with self.assertRaises(TypeError):
            transfer.amount = 'invalid type'
    def test_receipt_cast(self):
        self.maxDiff = None
        transfer = Transfer()
        transfer.account_id = '79990000000'
        transfer.amount = Amount({"value": '100.01', "currency": Currency.RUB})

        self.assertEqual(
            {
                'account_id': '79990000000',
                "amount": {
                    "value": 100.01,
                    "currency": Currency.RUB
                }
            }, dict(transfer))

        self.assertEqual('79990000000', transfer.account_id)

        self.assertEqual({
            "value": 100.01,
            "currency": Currency.RUB
        }, dict(transfer.amount))
        self.assertEqual(transfer.amount.value, 100.01)

        with self.assertRaises(TypeError):
            transfer.amount = 'invalid type'
Example #9
0
    def test_amount_value(self):
        amount = Amount({
            "value": '100.01',
            "currency": Currency.RUB
        })

        self.assertEqual({"value": 100.01, "currency": Currency.RUB}, dict(amount))
        self.assertEqual(amount.value, 100.01)
    def test_request_validate_expiry(self, modtime):
        modtime.now.return_value = datetime(year=2019, month=3, day=10)

        request = PaymentRequest()
        request.amount = Amount({'value': 0.1, 'currency': Currency.RUB})
        request.payment_method_data = PaymentDataBankCard(
            card={
                "number": "4111111111111111",
                "expiry_year": "2019",
                "expiry_month": "11",
                "csc": "111"
            })

        # Should pass other validations
        request.validate()

        # Obviously expired
        request.payment_method_data.card.expiry_year = '2018'
        with self.assertRaises(ValueError):
            request.validate()

        # Same month
        request.payment_method_data.card.expiry_year = '2019'
        request.payment_method_data.card.expiry_month = '03'
        request.validate()

        # Just a notch before expiration (same timezone)
        modtime.now.return_value = datetime(year=2019,
                                            month=3,
                                            day=31,
                                            hour=23,
                                            minute=59,
                                            second=59)
        request.payment_method_data.card.expiry_year = '2019'
        request.payment_method_data.card.expiry_month = '03'
        request.validate()

        # Just a notch before expiration (worst timezone case)
        client_tz = timezone(timedelta(hours=-12))
        bank_tz = timezone(timedelta(hours=+14))
        tz_offset = datetime.now(client_tz) - datetime.now(bank_tz)
        tz_offset += timedelta(hours=1)  # DST
        modtime.now.return_value += tz_offset
        request.validate()

        # Couple days after expiration
        modtime.now.return_value = datetime(year=2019, month=4, day=3)
        with self.assertRaises(ValueError):
            request.validate()
Example #11
0
    def test_capture_request_cast(self):
        request = CapturePaymentRequest()
        request.receipt = Receipt({'phone': '79990000000', 'email': 'test@email', 'tax_system_code': 1, 'items': [
            {
                "description": "Product 1",
                "quantity": 2.0,
                "amount": {
                    "value": 250.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            },
            {
                "description": "Product 2",
                "quantity": 1.0,
                "amount": {
                    "value": 100.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            }
        ]})
        request.amount = Amount({'value': 0.1, 'currency': Currency.RUB})

        self.assertEqual(
            {
                'receipt': {'phone': '79990000000', 'email': 'test@email', 'tax_system_code': 1, 'items': [
                    {
                        "description": "Product 1",
                        "quantity": 2.0,
                        "amount": {
                            "value": 250.0,
                            "currency": Currency.RUB
                        },
                        "vat_code": 2
                    },
                    {
                        "description": "Product 2",
                        "quantity": 1.0,
                        "amount": {
                            "value": 100.0,
                            "currency": Currency.RUB
                        },
                        "vat_code": 2
                    }
                ]},
                'amount': {'value': 0.1, 'currency': Currency.RUB}
            }, dict(request)
        )
Example #12
0
    def test_receipt_item(self):
        receipt_item = ReceiptItem()
        receipt_item.description = "Product"
        receipt_item.quantity = 1.0
        receipt_item.amount = Amount({
            "value": 100.0,
            "currency": Currency.RUB
        })
        receipt_item.vat_code = 2

        self.assertEqual(
            {
                "description": "Product",
                "quantity": 1.0,
                "amount": {
                    "value": 100.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            }, dict(receipt_item))

        with self.assertRaises(TypeError):
            receipt_item.amount = 'invalid amount'
Example #13
0
    def test_refund_source_cast(self):
        self.maxDiff = None
        src = RefundSource()
        src.account_id = '79990000000'
        src.amount = Amount({
            "value": '100.01',
            "currency": Currency.RUB
        })

        self.assertEqual({
            'account_id': '79990000000',
            "amount": {
                "value": 100.01,
                "currency": Currency.RUB
            }
        }, dict(src))

        self.assertEqual('79990000000', src.account_id)

        self.assertEqual({"value": 100.01, "currency": Currency.RUB}, dict(src.amount))
        self.assertEqual(src.amount.value, 100.01)

        with self.assertRaises(TypeError):
            src.amount = 'invalid type'
    def test_request_cast(self):
        self.maxDiff = None
        request = PaymentRequest()
        request.amount = Amount({'value': 0.1, 'currency': Currency.RUB})
        request.description = 'Test description'
        request.recipient = Recipient({
            'account_id': '213',
            'gateway_id': '123'
        })
        request.save_payment_method = True
        request.capture = False
        request.payment_method_data = PaymentDataWebmoney()
        request.receipt = Receipt({
            'phone':
            '79990000000',
            'email':
            'test@email',
            'tax_system_code':
            1,
            'items': [{
                "description": "Product 1",
                "quantity": 2.0,
                "amount": {
                    "value": 250.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            }, {
                "description": "Product 2",
                "quantity": 1.0,
                "amount": {
                    "value": 100.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            }]
        })
        request.payment_method_id = '123'
        request.payment_token = '99091209012'
        request.confirmation = ConfirmationRedirect(
            {'return_url': 'return.url'})
        request.client_ip = '192.0.0.0'
        request.metadata = {'key': 'value'}

        self.assertEqual(
            {
                'amount': {
                    'value': 0.1,
                    'currency': Currency.RUB
                },
                'recipient': {
                    'account_id': '213',
                    'gateway_id': '123'
                },
                'description': 'Test description',
                'save_payment_method': True,
                'capture': False,
                'payment_method_data': {
                    'type': PaymentMethodType.WEBMONEY
                },
                'receipt': {
                    'phone':
                    '79990000000',
                    'email':
                    'test@email',
                    'tax_system_code':
                    1,
                    'items': [{
                        "description": "Product 1",
                        "quantity": 2.0,
                        "amount": {
                            "value": 250.0,
                            "currency": Currency.RUB
                        },
                        "vat_code": 2
                    }, {
                        "description": "Product 2",
                        "quantity": 1.0,
                        "amount": {
                            "value": 100.0,
                            "currency": Currency.RUB
                        },
                        "vat_code": 2
                    }]
                },
                'payment_method_id': '123',
                'payment_token': '99091209012',
                'confirmation': {
                    'type': ConfirmationType.REDIRECT,
                    'return_url': 'return.url'
                },
                'client_ip': '192.0.0.0',
                'metadata': {
                    'key': 'value'
                }
            }, dict(request))
    def test_request_validate(self):
        request = PaymentRequest()

        with self.assertRaises(ValueError):
            request.validate()

        request.amount = Amount({'value': 0.0, 'currency': Currency.RUB})

        with self.assertRaises(ValueError):
            request.validate()

        request.amount = Amount({'value': 0.1, 'currency': Currency.RUB})
        request.receipt = {
            'phone':
            '79990000000',
            'items': [{
                "description": "Product 1",
                "quantity": 2.0,
                "amount": {
                    "value": 250.0,
                    "currency": Currency.RUB
                },
            }, {
                "description": "Product 2",
                "quantity": 1.0,
                "amount": {
                    "value": 100.0,
                    "currency": Currency.RUB
                },
            }]
        }
        with self.assertRaises(ValueError):
            request.validate()

        request.receipt = {
            'tax_system_code':
            1,
            'items': [{
                "description": "Product 1",
                "quantity": 2.0,
                "amount": {
                    "value": 250.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            }, {
                "description": "Product 2",
                "quantity": 1.0,
                "amount": {
                    "value": 100.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            }]
        }
        with self.assertRaises(ValueError):
            request.validate()

        request = PaymentRequest()
        request.amount = Amount({'value': 0.1, 'currency': Currency.RUB})
        request.payment_token = '123'
        request.payment_method_id = '123'
        with self.assertRaises(ValueError):
            request.validate()

        request = PaymentRequest()
        request.amount = Amount({'value': 0.1, 'currency': Currency.RUB})
        request.payment_token = '123'
        request.payment_method_data = PaymentDataWebmoney()
        with self.assertRaises(ValueError):
            request.validate()

        request = PaymentRequest()
        request.amount = Amount({'value': 0.1, 'currency': Currency.RUB})
        request.payment_method_id = '123'
        request.payment_method_data = PaymentDataWebmoney()
        with self.assertRaises(ValueError):
            request.validate()
Example #16
0
 def amount(self, value):
     self.__amount = Amount(value)
Example #17
0
 def income_amount(self, value):
     self.__income_amount = Amount(value)
Example #18
0
    def test_capture_request_cast(self):
        request = CapturePaymentRequest()
        request.receipt = Receipt({
            'phone':
            '79990000000',
            'email':
            '*****@*****.**',
            'tax_system_code':
            1,
            'items': [{
                "description": "Product 1",
                "quantity": 2.0,
                "amount": {
                    "value": 250.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            }, {
                "description": "Product 2",
                "quantity": 1.0,
                "amount": {
                    "value": 100.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            }]
        })
        request.amount = Amount({'value': 0.1, 'currency': Currency.RUB})
        request.airline = Airline({
            "booking_reference":
            "IIIKRV",
            "passengers": [{
                "first_name": "SERGEI",
                "last_name": "IVANOV"
            }],
            "legs": [{
                "departure_airport": "LED",
                "destination_airport": "AMS",
                "departure_date": "2018-06-20"
            }]
        })
        request.transfers.append(
            Transfer({
                'account_id': '79990000000',
                "amount": {
                    "value": 100.01,
                    "currency": Currency.RUB
                }
            }))

        self.assertEqual(
            {
                'amount': {
                    'value': 0.1,
                    'currency': Currency.RUB
                },
                'receipt': {
                    'customer': {
                        'email': '*****@*****.**',
                        'phone': '79990000000'
                    },
                    'phone':
                    '79990000000',
                    'email':
                    '*****@*****.**',
                    'items': [{
                        "description": "Product 1",
                        "quantity": 2.0,
                        "amount": {
                            "value": 250.0,
                            "currency": Currency.RUB
                        },
                        "vat_code": 2
                    }, {
                        "description": "Product 2",
                        "quantity": 1.0,
                        "amount": {
                            "value": 100.0,
                            "currency": Currency.RUB
                        },
                        "vat_code": 2
                    }],
                    'tax_system_code':
                    1,
                },
                "airline": {
                    "booking_reference":
                    "IIIKRV",
                    "passengers": [{
                        "first_name": "SERGEI",
                        "last_name": "IVANOV"
                    }],
                    "legs": [{
                        "departure_airport": "LED",
                        "destination_airport": "AMS",
                        "departure_date": "2018-06-20"
                    }]
                },
                'transfers': [{
                    'account_id': '79990000000',
                    "amount": {
                        "value": 100.01,
                        "currency": Currency.RUB
                    }
                }]
            }, dict(request))
Example #19
0
    def test_request_cast(self):
        self.maxDiff = None
        request = PaymentRequest()
        request.amount = Amount({'value': 0.1, 'currency': Currency.RUB})
        request.description = 'Test description'
        request.recipient = Recipient({
            'account_id': '213',
            'gateway_id': '123'
        })
        request.save_payment_method = True
        request.capture = False
        request.payment_method_data = PaymentDataWebmoney()
        request.receipt = Receipt({
            'phone':
            '79990000000',
            'email':
            '*****@*****.**',
            'tax_system_code':
            1,
            'items': [{
                "description": "Product 1",
                "quantity": 2.0,
                "amount": {
                    "value": 250.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            }, {
                "description": "Product 2",
                "quantity": 1.0,
                "amount": {
                    "value": 100.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            }]
        })
        request.airline = Airline({
            "booking_reference":
            "IIIKRV",
            "passengers": [{
                "first_name": "SERGEI",
                "last_name": "IVANOV"
            }],
            "legs": [{
                "departure_airport": "LED",
                "destination_airport": "AMS",
                "departure_date": "2018-06-20"
            }]
        })
        request.payment_method_id = '123'
        request.payment_token = '99091209012'
        request.confirmation = ConfirmationRedirect({
            'locale': 'ru_RU',
            'return_url': 'return.url'
        })
        request.client_ip = '192.0.0.0'
        request.metadata = {'key': 'value'}
        request.transfers.append(
            Transfer({
                'account_id': '79990000000',
                "amount": {
                    "value": 100.01,
                    "currency": Currency.RUB
                }
            }))

        self.assertEqual(
            {
                'amount': {
                    'value': 0.1,
                    'currency': Currency.RUB
                },
                'recipient': {
                    'account_id': '213',
                    'gateway_id': '123'
                },
                'description':
                'Test description',
                'save_payment_method':
                True,
                'capture':
                False,
                'payment_method_data': {
                    'type': PaymentMethodType.WEBMONEY
                },
                'receipt': {
                    'customer': {
                        'email': '*****@*****.**',
                        'phone': '79990000000'
                    },
                    'phone':
                    '79990000000',
                    'email':
                    '*****@*****.**',
                    'tax_system_code':
                    1,
                    'items': [{
                        "description": "Product 1",
                        "quantity": 2.0,
                        "amount": {
                            "value": 250.0,
                            "currency": Currency.RUB
                        },
                        "vat_code": 2
                    }, {
                        "description": "Product 2",
                        "quantity": 1.0,
                        "amount": {
                            "value": 100.0,
                            "currency": Currency.RUB
                        },
                        "vat_code": 2
                    }]
                },
                'payment_method_id':
                '123',
                'payment_token':
                '99091209012',
                'confirmation': {
                    'type': ConfirmationType.REDIRECT,
                    'locale': 'ru_RU',
                    'return_url': 'return.url'
                },
                'client_ip':
                '192.0.0.0',
                'metadata': {
                    'key': 'value'
                },
                "airline": {
                    "booking_reference":
                    "IIIKRV",
                    "passengers": [{
                        "first_name": "SERGEI",
                        "last_name": "IVANOV"
                    }],
                    "legs": [{
                        "departure_airport": "LED",
                        "destination_airport": "AMS",
                        "departure_date": "2018-06-20"
                    }]
                },
                'transfers': [{
                    'account_id': '79990000000',
                    "amount": {
                        "value": 100.01,
                        "currency": Currency.RUB
                    }
                }]
            }, dict(request))
Example #20
0
    def test_refund_cast(self):
        self.maxDiff = None
        request = RefundRequest()
        request.payment_id = '21a632d2-000f-5061-a000-01e90bc2de12'
        request.description = 'test comment'
        request.receipt = Receipt({
            'phone':
            '79990000000',
            'email':
            'test@email',
            'tax_system_code':
            1,
            'items': [{
                "description": "Product 1",
                "quantity": 2.0,
                "amount": {
                    "value": 250.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            }, {
                "description": "Product 2",
                "quantity": 1.0,
                "amount": {
                    "value": 100.0,
                    "currency": Currency.RUB
                },
                "vat_code": 2
            }]
        })

        request.amount = Amount({'value': 0.1, 'currency': Currency.RUB})

        self.assertEqual(
            {
                'payment_id': '21a632d2-000f-5061-a000-01e90bc2de12',
                'description': 'test comment',
                'receipt': {
                    'phone':
                    '79990000000',
                    'email':
                    'test@email',
                    'tax_system_code':
                    1,
                    'items': [{
                        "description": "Product 1",
                        "quantity": 2.0,
                        "amount": {
                            "value": 250.0,
                            "currency": Currency.RUB
                        },
                        "vat_code": 2
                    }, {
                        "description": "Product 2",
                        "quantity": 1.0,
                        "amount": {
                            "value": 100.0,
                            "currency": Currency.RUB
                        },
                        "vat_code": 2
                    }]
                },
                'amount': {
                    'value': 0.1,
                    'currency': Currency.RUB
                }
            }, dict(request))
Example #21
0
 def refunded_amount(self, value):
     self.__refunded_amount = Amount(value)