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'
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'
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()
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) )
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'
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()
def amount(self, value): self.__amount = Amount(value)
def income_amount(self, value): self.__income_amount = Amount(value)
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))
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))
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))
def refunded_amount(self, value): self.__refunded_amount = Amount(value)