def test_save_payment_arcs_command_mocked(self): command_with_item_forms = Mock() items = [ PagSegItem(description='Python Birds', price=Decimal('18.99'), quantity=3), PagSegItem(description='Objetos Pythônicos', price=Decimal('24.99'), quantity=2, reference=ndb.Key(PagSegItem, 10)) ] command_with_item_forms.items = items ndb.put_multi(items) payment = mommy.save_one(PagSegPayment) command_with_item_forms.result = payment payment_owner = mommy.save_one(Node) save_payment_arcs_cmd = SavePaymentArcsCmd(payment_owner) CommandSequential(command_with_item_forms, save_payment_arcs_cmd).execute() self.assertEqual(payment, pagseguro_facade.search_payments(payment_owner)()[0]) logs = SearchLogs(payment)() self.assertEqual(1, len(logs)) self.assertEqual(STATUS_CREATED, logs[0].status) self.assertListEqual(items, SearchItems(payment)())
def test_save_payment_arcs_command_mocked(self): command_with_item_forms = Mock() items = [PagSegItem(description='Python Birds', price=Decimal('18.99'), quantity=3), PagSegItem(description='Objetos Pythônicos', price=Decimal('24.99'), quantity=2, reference=ndb.Key(PagSegItem, 10))] command_with_item_forms.items = items ndb.put_multi(items) payment = mommy.save_one(PagSegPayment) command_with_item_forms.result = payment payment_owner = mommy.save_one(Node) save_payment_arcs_cmd = SavePaymentArcsCmd(payment_owner) CommandSequential(command_with_item_forms, save_payment_arcs_cmd).execute() self.assertEqual(payment, pagseguro_facade.search_payments(payment_owner)()[0]) logs = SearchLogs(payment)() self.assertEqual(1, len(logs)) self.assertEqual(STATUS_CREATED, logs[0].status) self.assertListEqual(items, SearchItems(payment)())
def test_succesfull_call(self, UrlFetchCommandMock): # Mocking call to pagseguro UrlFetchCommandMock.return_value = _build_mock() # Before making a payment, email and token must be saved pagseguro_facade.create_or_update_access_data_cmd('*****@*****.**', 'abc123')() # Creating the address validation cmd that will be used on payment validate_address_cmd = pagseguro_facade.validate_address_cmd(complement='apto 4', state='SP', town='São Paulo', postalcode='12345-678', quarter='Jardins', number='2', street='Av Vicente de Carvalho') # Creating items included on payment class ProductMock(Node): pass product1 = ProductMock() product2 = ProductMock() ndb.put_multi([product1, product2]) validate_item_cmds = [pagseguro_facade.validate_item_cmd('Python Birds', '18.99', '1', product1.key), pagseguro_facade.validate_item_cmd('App Engine', '45.58', '2', product2.key)] # Creating payment owner. User or other mother can be payment owner class UserMock(Node): name = ndb.StringProperty(required=True) email = ndb.StringProperty(required=True) owner = UserMock(name='Renzo Nuccitelli', email='*****@*****.**') owner.put() # Generating payment payment_cmd = pagseguro_facade.generate_payment('http://somedomain.com/receive', owner.name, owner.email, owner, validate_address_cmd, *validate_item_cmds) payment = payment_cmd() # Payment assertions self.assertEqual(_SUCCESS_PAGSEGURO_CODE, payment_cmd.checkout_code) self.assertEqual(STATUS_SENT_TO_PAGSEGURO, payment.status) self.assertEqual(Decimal('110.15'), payment.total, "Should be the sum of item's totals") # Owner assertion owner_payments = pagseguro_facade.search_payments(owner, relations=['owner', 'pay_items', 'logs'])() self.assertListEqual([payment], owner_payments) payment = owner_payments[0] # Log assertions statuses = [log.status for log in payment.logs] self.assertEqual([STATUS_CREATED, STATUS_SENT_TO_PAGSEGURO], statuses) # Items assertions self.assertEqual(2, len(payment.pay_items)) self.assertIsInstance(payment.pay_items[0], PagSegItem) # Dictionary genartion assertions # Items Assertions form = pagseguro_facade.payment_form() payment_dct = form.fill_with_model(payment) items = payment.pay_items items_dcts = [{u'id': items[0].key.id(), 'price': u'18.99', 'description': u'Python Birds', 'reference': items[0].reference.id(), 'quantity': u'1', 'total': '18.99'}, {u'id': items[1].key.id(), 'price': u'45.58', 'description': u'App Engine', 'reference': items[1].reference.id(), 'quantity': u'2', 'total': '91.16'}] self.assertListEqual(items_dcts, payment_dct['pay_items']) # Log Assertions self.assertListEqual([STATUS_CREATED, STATUS_SENT_TO_PAGSEGURO], [log['status'] for log in payment_dct['logs']])