def assert_payment_notification_saved(self, cmd, expected_statuses, payment): cmd() payment = payment.key.get() # Searching from db to see updates self.assertEqual(payment.status, expected_statuses[-1]) logs = pagseguro_facade.search_logs(payment)() self.assertEqual(len(expected_statuses), len(logs)) self.assertListEqual(expected_statuses, [log.status for log in logs])
def assert_payment_notification_saved(self, cmd, expected_statuses, payment): cmd() payment = payment.key.get() # Searching from db to see updates self.assertEqual(payment.status, expected_statuses[-1]) logs = pagseguro_facade.search_logs(payment)() self.assertEqual(len(expected_statuses), len(logs)) self.assertListEqual(expected_statuses, [log.status for log in logs])
def test_credit_card_reader_payment(self): # Payment creation cmd = pagseguro_facade.procces_external_payment_cmd( create_credit_card_xml()) cmd() payment = PagSegPayment.query().get() self.assertEqual('6F09ACBC-BEC1-463F-9174-5E0CF5BE33F1', payment.code) self.assertEqual(Decimal('1.00'), payment.total) self.assertEqual(Decimal('0.98'), payment.net_amount) self.assertEqual(STATUS_AVAILABLE, payment.status) logs = pagseguro_facade.search_logs(payment)() self.assertEqual(1, len(logs)) self.assertEqual(STATUS_AVAILABLE, logs[0].status) items = pagseguro_facade.search_items(payment)() self.assertEqual(1, len(items)) item = items[0] self.assertEqual(Decimal('1.00'), item.price) self.assertEqual(1, item.quantity) self.assertEqual('Venda pelo celular com leitor de chip e senha', item.description) # Payment update cmd = pagseguro_facade.procces_external_payment_cmd( create_credit_card_xml(7)) cmd() payments = PagSegPayment.query().fetch() self.assertEqual(1, len(payments)) payment = payments[0] self.assertEqual('6F09ACBC-BEC1-463F-9174-5E0CF5BE33F1', payment.code) self.assertEqual(Decimal('1.00'), payment.total) self.assertEqual(Decimal('0.98'), payment.net_amount) self.assertEqual(STATUS_CANCELLED, payment.status) logs = pagseguro_facade.search_logs(payment)() self.assertListEqual([STATUS_AVAILABLE, STATUS_CANCELLED], [log.status for log in logs]) items = pagseguro_facade.search_items(payment)() self.assertEqual(1, len(items)) item = items[0] self.assertEqual(Decimal('1.00'), item.price) self.assertEqual(1, item.quantity) self.assertEqual('Venda pelo celular com leitor de chip e senha', item.description)
def test_integration_button_payment(self): # Payment creation cmd = pagseguro_facade.procces_external_payment_cmd( generate_xml('non particular id', '1', '18.99')) cmd() payment = PagSegPayment.query().get() self.assertEqual(CODE, payment.code) self.assertEqual(Decimal('49900'), payment.total) self.assertEqual(Decimal('18.99'), payment.net_amount) self.assertEqual(STATUS_SENT_TO_PAGSEGURO, payment.status) logs = pagseguro_facade.search_logs(payment)() self.assertEqual(1, len(logs)) self.assertEqual(STATUS_SENT_TO_PAGSEGURO, logs[0].status) items = pagseguro_facade.search_items(payment)() self.assertEqual(2, len(items)) item = items[0] self.assertEqual(Decimal('24300'), item.price) self.assertEqual(1, item.quantity) self.assertEqual('Notebook Prata', item.description) # Payment update cmd = pagseguro_facade.procces_external_payment_cmd( generate_xml('non particular id', '7', '18.99')) cmd() payments = PagSegPayment.query().fetch() self.assertEqual(1, len(payments)) payment = payments[0] self.assertEqual(CODE, payment.code) self.assertEqual(Decimal('49900'), payment.total) self.assertEqual(Decimal('18.99'), payment.net_amount) self.assertEqual(STATUS_CANCELLED, payment.status) logs = pagseguro_facade.search_logs(payment)() self.assertListEqual([STATUS_SENT_TO_PAGSEGURO, STATUS_CANCELLED], [log.status for log in logs]) items = pagseguro_facade.search_items(payment)() self.assertEqual(2, len(items)) item = items[0] self.assertEqual(Decimal('24300'), item.price) self.assertEqual(1, item.quantity) self.assertEqual('Notebook Prata', item.description)
def test_integration_button_payment(self): # Payment creation cmd = pagseguro_facade.procces_external_payment_cmd(generate_xml('non particular id', '1', '18.99')) cmd() payment = PagSegPayment.query().get() self.assertEqual(CODE, payment.code) self.assertEqual(Decimal('49900'), payment.total) self.assertEqual(Decimal('18.99'), payment.net_amount) self.assertEqual(STATUS_SENT_TO_PAGSEGURO, payment.status) logs = pagseguro_facade.search_logs(payment)() self.assertEqual(1, len(logs)) self.assertEqual(STATUS_SENT_TO_PAGSEGURO, logs[0].status) items = pagseguro_facade.search_items(payment)() self.assertEqual(2, len(items)) item = items[0] self.assertEqual(Decimal('24300'), item.price) self.assertEqual(1, item.quantity) self.assertEqual('Notebook Prata', item.description) # Payment update cmd = pagseguro_facade.procces_external_payment_cmd(generate_xml('non particular id', '7', '18.99')) cmd() payments = PagSegPayment.query().fetch() self.assertEqual(1, len(payments)) payment = payments[0] self.assertEqual(CODE, payment.code) self.assertEqual(Decimal('49900'), payment.total) self.assertEqual(Decimal('18.99'), payment.net_amount) self.assertEqual(STATUS_CANCELLED, payment.status) logs = pagseguro_facade.search_logs(payment)() self.assertListEqual([STATUS_SENT_TO_PAGSEGURO, STATUS_CANCELLED], [log.status for log in logs]) items = pagseguro_facade.search_items(payment)() self.assertEqual(2, len(items)) item = items[0] self.assertEqual(Decimal('24300'), item.price) self.assertEqual(1, item.quantity) self.assertEqual('Notebook Prata', item.description)
def test_credit_card_reader_payment(self): # Payment creation cmd = pagseguro_facade.procces_external_payment_cmd(create_credit_card_xml()) cmd() payment = PagSegPayment.query().get() self.assertEqual('6F09ACBC-BEC1-463F-9174-5E0CF5BE33F1', payment.code) self.assertEqual(Decimal('1.00'), payment.total) self.assertEqual(Decimal('0.98'), payment.net_amount) self.assertEqual(STATUS_AVAILABLE, payment.status) logs = pagseguro_facade.search_logs(payment)() self.assertEqual(1, len(logs)) self.assertEqual(STATUS_AVAILABLE, logs[0].status) items = pagseguro_facade.search_items(payment)() self.assertEqual(1, len(items)) item = items[0] self.assertEqual(Decimal('1.00'), item.price) self.assertEqual(1, item.quantity) self.assertEqual('Venda pelo celular com leitor de chip e senha', item.description) # Payment update cmd = pagseguro_facade.procces_external_payment_cmd(create_credit_card_xml(7)) cmd() payments = PagSegPayment.query().fetch() self.assertEqual(1, len(payments)) payment = payments[0] self.assertEqual('6F09ACBC-BEC1-463F-9174-5E0CF5BE33F1', payment.code) self.assertEqual(Decimal('1.00'), payment.total) self.assertEqual(Decimal('0.98'), payment.net_amount) self.assertEqual(STATUS_CANCELLED, payment.status) logs = pagseguro_facade.search_logs(payment)() self.assertListEqual([STATUS_AVAILABLE, STATUS_CANCELLED], [log.status for log in logs]) items = pagseguro_facade.search_items(payment)() self.assertEqual(1, len(items)) item = items[0] self.assertEqual(Decimal('1.00'), item.price) self.assertEqual(1, item.quantity) self.assertEqual('Venda pelo celular com leitor de chip e senha', item.description)
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)