def test_success(self, UrlFetchClassMock): # Pre conditions pagseguro_facade.create_or_update_access_data_cmd( '*****@*****.**', 'abc123')() payment = mommy.save_one(PagSegPayment, code=None, net_amount=None, status=STATUS_SENT_TO_PAGSEGURO) # Mocking fetch fetch_cmd_obj = Mock() fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '2', '18.99') UrlFetchClassMock.return_value = fetch_cmd_obj # Command execution cmd = FetchNotificationDetail('12345') cmd() # Assertions UrlFetchClassMock.assert_called_once_with( 'https://ws.pagseguro.uol.com.br/v3/transactions/notifications/12345?token=abc123&email=foo%40bar.com' ) self.assertEqual(cmd.result, str(payment.key.id())) self.assertEqual(cmd.code, CODE) self.assertEqual(cmd.net_amount, '18.99') self.assertEqual( cmd.status, STATUS_ANALYSIS) # status respective to number 2 coming from xml
def test_success(self, UrlFetchClassMock): # Pre conditions pagseguro_facade.create_or_update_access_data_cmd('*****@*****.**', 'abc123')() payment = mommy.save_one(PagSegPayment, code=None, net_amount=None, status=STATUS_SENT_TO_PAGSEGURO) # Mocking fetch fetch_cmd_obj = Mock() fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '2', '18.99') UrlFetchClassMock.return_value = fetch_cmd_obj # Command execution cmd = FetchNotificationDetail('12345') cmd() # Assertions UrlFetchClassMock.assert_called_once_with( 'https://ws.pagseguro.uol.com.br/v3/transactions/notifications/12345?token=abc123&email=foo%40bar.com') self.assertEqual(cmd.result, str(payment.key.id())) self.assertEqual(cmd.code, CODE) self.assertEqual(cmd.net_amount, '18.99') self.assertEqual(cmd.status, STATUS_ANALYSIS) # status respective to number 2 coming from xml
def test_create_or_update_access_data(self): data = FindAccessDataCmd().execute().result self.assertIsNone(data) pagseguro_facade.create_or_update_access_data_cmd('*****@*****.**', 'abc').execute() data = FindAccessDataCmd().execute().result self.assertEqual('*****@*****.**', data.email) self.assertEqual('abc', data.token) pagseguro_facade.create_or_update_access_data_cmd('*****@*****.**', '123').execute() data2 = FindAccessDataCmd().execute().result self.assertEqual(data.key, data2.key) self.assertEqual('*****@*****.**', data2.email) self.assertEqual('123', data2.token) # Another change to assure data is not cached pagseguro_facade.create_or_update_access_data_cmd('*****@*****.**', 'xpto').execute() data3 = FindAccessDataCmd().execute().result self.assertEqual(data.key, data3.key) self.assertEqual('*****@*****.**', data3.email) self.assertEqual('xpto', data3.token)
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']])
def test_success(self, UrlFetchClassMock): # Pre conditions pagseguro_facade.create_or_update_access_data_cmd( '*****@*****.**', 'abc123')() payment = mommy.save_one(PagSegPayment, code=None, net_amount=None, status=STATUS_SENT_TO_PAGSEGURO) # Mocking fetch fetch_cmd_obj = Mock() fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '2', '18.99') UrlFetchClassMock.return_value = fetch_cmd_obj # Command execution cmd = pagseguro_facade.payment_notification('12345') cmd() # Assertions for first call after payment for pagseguro UrlFetchClassMock.assert_called_once_with( 'https://ws.pagseguro.uol.com.br/v3/transactions/notifications/12345?token=abc123&email=foo%40bar.com' ) self.assertEqual(cmd.result, payment) payment = payment.key.get() # Searching from db to see updates self.assertEqual(payment.code, CODE) self.assertEqual(payment.net_amount, Decimal('18.99')) self.assertEqual( payment.status, STATUS_ANALYSIS) # status respective to number 2 coming from xml logs = pagseguro_facade.search_logs(payment)() self.assertEqual(1, len(logs)) self.assertEqual(STATUS_ANALYSIS, logs[0].status) # Emulating paid status fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '3', '18.99') expected_statuses = [STATUS_ANALYSIS, STATUS_ACCEPTED] self.assert_payment_notification_saved(cmd, expected_statuses, payment) # Emulating contesting status fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '9', '18.99') expected_statuses = [ STATUS_ANALYSIS, STATUS_ACCEPTED, STATUS_CHARGEBACK ] self.assert_payment_notification_saved(cmd, expected_statuses, payment) # Emulating chargeback debt status fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '8', '18.99') expected_statuses = [ STATUS_ANALYSIS, STATUS_ACCEPTED, STATUS_CHARGEBACK, STATUS_CHARGEBACK_DEBT ] self.assert_payment_notification_saved(cmd, expected_statuses, payment) # Emulating canceled status fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '7', '18.99') expected_statuses.append(STATUS_CANCELLED) self.assert_payment_notification_saved(cmd, expected_statuses, payment) # Emulating Returned fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '6', '18.99') expected_statuses.append(STATUS_RETURNED) self.assert_payment_notification_saved(cmd, expected_statuses, payment) # Emulating dispute status fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '5', '18.99') expected_statuses.append(STATUS_DISPUTE) self.assert_payment_notification_saved(cmd, expected_statuses, payment) # Emulating created status fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '1', '18.99') expected_statuses.append(STATUS_SENT_TO_PAGSEGURO) self.assert_payment_notification_saved(cmd, expected_statuses, payment) # Emulating available status fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '4', '18.99') expected_statuses.append(STATUS_AVAILABLE) self.assert_payment_notification_saved(cmd, expected_statuses, payment)
def test_success(self, UrlFetchClassMock): # Pre conditions pagseguro_facade.create_or_update_access_data_cmd('*****@*****.**', 'abc123')() payment = mommy.save_one(PagSegPayment, code=None, net_amount=None, status=STATUS_SENT_TO_PAGSEGURO) # Mocking fetch fetch_cmd_obj = Mock() fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '2', '18.99') UrlFetchClassMock.return_value = fetch_cmd_obj # Command execution cmd = pagseguro_facade.payment_notification('12345') cmd() # Assertions for first call after payment for pagseguro UrlFetchClassMock.assert_called_once_with( 'https://ws.pagseguro.uol.com.br/v3/transactions/notifications/12345?token=abc123&email=foo%40bar.com') self.assertEqual(cmd.result, payment) payment = payment.key.get() # Searching from db to see updates self.assertEqual(payment.code, CODE) self.assertEqual(payment.net_amount, Decimal('18.99')) self.assertEqual(payment.status, STATUS_ANALYSIS) # status respective to number 2 coming from xml logs = pagseguro_facade.search_logs(payment)() self.assertEqual(1, len(logs)) self.assertEqual(STATUS_ANALYSIS, logs[0].status) # Emulating paid status fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '3', '18.99') expected_statuses = [STATUS_ANALYSIS, STATUS_ACCEPTED] self.assert_payment_notification_saved(cmd, expected_statuses, payment) # Emulating contesting status fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '9', '18.99') expected_statuses = [STATUS_ANALYSIS, STATUS_ACCEPTED, STATUS_CHARGEBACK] self.assert_payment_notification_saved(cmd, expected_statuses, payment) # Emulating chargeback debt status fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '8', '18.99') expected_statuses = [STATUS_ANALYSIS, STATUS_ACCEPTED, STATUS_CHARGEBACK, STATUS_CHARGEBACK_DEBT] self.assert_payment_notification_saved(cmd, expected_statuses, payment) # Emulating canceled status fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '7', '18.99') expected_statuses.append(STATUS_CANCELLED) self.assert_payment_notification_saved(cmd, expected_statuses, payment) # Emulating Returned fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '6', '18.99') expected_statuses.append(STATUS_RETURNED) self.assert_payment_notification_saved(cmd, expected_statuses, payment) # Emulating dispute status fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '5', '18.99') expected_statuses.append(STATUS_DISPUTE) self.assert_payment_notification_saved(cmd, expected_statuses, payment) # Emulating created status fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '1', '18.99') expected_statuses.append(STATUS_SENT_TO_PAGSEGURO) self.assert_payment_notification_saved(cmd, expected_statuses, payment) # Emulating available status fetch_cmd_obj.result.content = generate_xml(payment.key.id(), '4', '18.99') expected_statuses.append(STATUS_AVAILABLE) self.assert_payment_notification_saved(cmd, expected_statuses, payment)