Пример #1
0
 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])
Пример #2
0
 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])
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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)
Пример #7
0
    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)
Пример #8
0
    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)