def settlements(self, value): if isinstance(value, list): items = [] for item in value: if isinstance(item, dict): items.append(Settlement(item)) elif isinstance(item, Settlement): items.append(item) else: raise TypeError('Invalid settlement type in receipt.settlements') self.__settlements = items elif value is None: self.__settlements = [] else: raise TypeError('Invalid settlements value type in receipt_request')
def test_create(self): self.maxDiff = None with patch('yandex_checkout.client.ApiClient.request') as request_mock: request_mock.return_value = { "id": "rt_1da5c87d-0984-50e8-a7f3-8de646dd9ec9", "type": "payment", "refund_id": "215d8da0-000f-50be-b000-0003308c89be", "fiscal_document_number": "3986", "fiscal_storage_number": "9288000100115785", "fiscal_attribute": "2617603921", "registered_at": "2019-05-13T17:56:00.000+03:00", "fiscal_provider_id": "fd9e9404-eaca-4000-8ec9-dc228ead2345", "tax_system_code": 1, "receipt_registration": 'succeeded', "items": None, "settlements": [ { "type": "cashless", "amount": { "value": "45.67", "currency": "RUB" } } ], "on_behalf_of": "string" } params = { 'type': ReceiptType.PAYMENT, 'send': True, 'email': '*****@*****.**', 'phone': '79990000000', 'items': [ { 'description': 'Product 1', 'quantity': 2.0, 'amount': Amount({ 'value': 250.0, 'currency': Currency.RUB }), 'vat_code': 2, 'payment_mode': 'full_payment', 'payment_subject': 'commodity', 'country_of_origin_code': 'CN', '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', 'customs_declaration_number': '10714040/140917/0090376', 'excise': '20.00', 'supplier': { 'name': 'string', 'phone': 'string', 'inn': 'string' } }, { 'description': 'Product 2', 'quantity': 1.0, 'amount': { 'value': 100.0, 'currency': Currency.RUB }, 'vat_code': 2, 'supplier': ReceiptItemSupplier({ 'name': 'string', 'phone': 'string', 'inn': 'string' }) } ], 'settlements': [ { 'type': SettlementType.CASHLESS, 'amount': { 'value': 250.0, 'currency': Currency.RUB } } ], 'tax_system_code': 1, 'payment_id': '215d8da0-000f-50be-b000-0003308c89be', 'on_behalf_of': 'string' } rec = Receipt.create(params) self.assertIsInstance(rec, ReceiptResponse) self.assertEqual(rec.type, ReceiptType.PAYMENT) request = ReceiptRequest() request.type = ReceiptType.PAYMENT request.send = True request.customer = ReceiptCustomer({'phone': '79990000000', 'email': '*****@*****.**'}) request.items.append( ReceiptItemRequest({ "description": "Product 1", "quantity": 2.0, "amount": Amount({'value': 250.0, 'currency': Currency.RUB}), "vat_code": 2 })) request.items.append( ReceiptItemRequest({ "description": "Product 2", "quantity": 1.0, "amount": Amount({'value': 100.0, 'currency': Currency.RUB}), "vat_code": 2 })) request.settlements.append( Settlement({ 'type': SettlementType.CASHLESS, 'amount': Amount({'value': 250.0, 'currency': Currency.RUB}) })) request.tax_system_code = 1 request.payment_id = '215d8da0-000f-50be-b000-0003308c89be' rec = Receipt.create(request) self.assertIsInstance(rec, ReceiptResponse) self.assertEqual(rec.type, "payment") with self.assertRaises(TypeError): Receipt.create('invalid data')
def test_request_validate(self): request = ReceiptRequest() with self.assertRaises(ValueError): request.validate() request.type = ReceiptType.PAYMENT with self.assertRaises(ValueError): request.validate() request.send = True with self.assertRaises(ValueError): request.validate() request.customer = ReceiptCustomer({ 'phone': '79990000000', 'email': '*****@*****.**' }) with self.assertRaises(ValueError): request.validate() request.items = [ ReceiptItemRequest({ "description": "Product 1", "quantity": 2.0, "amount": { "value": 250.0, "currency": Currency.RUB }, "vat_code": 2 }), ReceiptItemRequest({ "description": "Product 2", "quantity": 1.0, "amount": { "value": 100.0, "currency": Currency.RUB }, "vat_code": 2 }) ] with self.assertRaises(ValueError): request.validate() request.settlements = [ Settlement({ 'type': SettlementType.CASHLESS, 'amount': { 'value': 250.0, 'currency': Currency.RUB } }) ] with self.assertRaises(ValueError): request.validate() request.tax_system_code = 1 with self.assertRaises(ValueError): request.validate() request.refund_id = '215d8da0-000f-50be-b000-0003308c89be' with self.assertRaises(ValueError): request.validate() request.type = ReceiptType.REFUND request.payment_id = '215d8da0-000f-50be-b000-0003308c89be' with self.assertRaises(ValueError): request.validate() request.items = None request.settlements = None with self.assertRaises(ValueError): request.validate()
def test_request_cast(self): request = ReceiptRequest() request.type = ReceiptType.PAYMENT request.send = True request.customer = ReceiptCustomer({ 'phone': '79990000000', 'email': '*****@*****.**' }) request.items = [ ReceiptItemRequest({ "description": "Product 1", "quantity": 2.0, "amount": { "value": 250.0, "currency": Currency.RUB }, "vat_code": 2 }), ReceiptItemRequest({ "description": "Product 2", "quantity": 1.0, "amount": { "value": 100.0, "currency": Currency.RUB }, "vat_code": 2 }) ] request.settlements = [ Settlement({ 'type': SettlementType.CASHLESS, 'amount': { 'value': 250.0, 'currency': Currency.RUB } }) ] request.tax_system_code = 1 request.payment_id = '215d8da0-000f-50be-b000-0003308c89be' self.assertEqual( { 'type': ReceiptType.PAYMENT, 'send': True, 'customer': { 'email': '*****@*****.**', 'phone': '79990000000' }, 'email': '*****@*****.**', 'phone': '79990000000', '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 }], 'settlements': [{ 'type': SettlementType.CASHLESS, 'amount': { 'value': 250.0, 'currency': Currency.RUB } }], 'tax_system_code': 1, 'payment_id': '215d8da0-000f-50be-b000-0003308c89be' }, dict(request))
def test_build_object(self): self.maxDiff = None builder = ReceiptRequestBuilder() builder.set_customer({'phone': '79990000000', 'email': '*****@*****.**'}) \ .set_type(ReceiptType.PAYMENT) \ .set_send(True) \ .set_tax_system_code(1) \ .set_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 } ]) \ .set_settlements([ Settlement({ 'type': SettlementType.CASHLESS, 'amount': { 'value': 350.0, 'currency': Currency.RUB } }) ]) \ .set_payment_id('215d8da0-000f-50be-b000-0003308c89be') request = builder.build() self.assertEqual( { 'customer': { 'email': '*****@*****.**', 'phone': '79990000000' }, 'type': 'payment', 'send': True, '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 }], 'settlements': [{ 'type': 'cashless', 'amount': { 'value': 350.0, 'currency': 'RUB' } }], 'payment_id': '215d8da0-000f-50be-b000-0003308c89be' }, dict(request))
def settlements(self, value): if isinstance(value, list): self.__settlements = [Settlement(item) for item in value] else: self.__settlements = []