예제 #1
0
    def test_success(self, UrlFetchClassMock):
        # Mocking pagseguro Fetch
        UrlFetchClassMock.return_value = _build_mock()

        # Mocking previous command
        data_cmd_mock = Mock()
        data_cmd_mock.access_data.email = '*****@*****.**'
        data_cmd_mock.access_data.token = '4567890oiuytfgh'
        reference0 = ItemReferenceMock()
        reference1 = ItemReferenceMock()
        items = [PagSegItem(description='Python Course', price=Decimal('120'), quantity=1, reference=reference0.key),
                 PagSegItem(description='Another Python Course', price=Decimal('240'), quantity=2,
                            reference=reference1.key)]
        ndb.put_multi(items)
        data_cmd_mock.items = items
        data_cmd_mock.client_form = ValidateClientCmd(email='*****@*****.**', name='Jhon Doe').form
        data_cmd_mock.address_form = pagseguro_facade.validate_address_cmd('Rua 1', '2', 'meu bairro', '12345678',
                                                                              'São Paulo', 'SP', 'apto 4').form

        payment = PagSegPayment()
        payment.put()
        data_cmd_mock.result = payment

        contact_pagseguro_cmd = ContactPagseguro('https://store.com/pagseguro')
        CommandSequential(data_cmd_mock, contact_pagseguro_cmd).execute()

        self.assertEqual(payment, contact_pagseguro_cmd.result)
        self.assertEqual(payment.status, STATUS_SENT_TO_PAGSEGURO)
        self.assertEqual(contact_pagseguro_cmd.checkout_code, _SUCCESS_PAGSEGURO_CODE,
                         'Should have the code extracted from xml _PAGSEGURO_DETAIL_XML')
        self.assertIsNone(payment.code)
예제 #2
0
    def test_success(self, UrlFetchClassMock):
        # Mocking pagseguro Fetch
        UrlFetchClassMock.return_value = _build_mock()

        # Mocking previous command
        data_cmd_mock = Mock()
        data_cmd_mock.access_data.email = '*****@*****.**'
        data_cmd_mock.access_data.token = '4567890oiuytfgh'
        reference0 = ItemReferenceMock()
        reference1 = ItemReferenceMock()
        items = [
            PagSegItem(description='Python Course',
                       price=Decimal('120'),
                       quantity=1,
                       reference=reference0.key),
            PagSegItem(description='Another Python Course',
                       price=Decimal('240'),
                       quantity=2,
                       reference=reference1.key)
        ]
        ndb.put_multi(items)
        data_cmd_mock.items = items
        data_cmd_mock.client_form = ValidateClientCmd(email='*****@*****.**',
                                                      name='Jhon Doe').form
        data_cmd_mock.address_form = pagseguro_facade.validate_address_cmd(
            'Rua 1', '2', 'meu bairro', '12345678', 'São Paulo', 'SP',
            'apto 4').form

        payment = PagSegPayment()
        payment.put()
        data_cmd_mock.result = payment

        contact_pagseguro_cmd = ContactPagseguro('https://store.com/pagseguro')
        CommandSequential(data_cmd_mock, contact_pagseguro_cmd).execute()

        self.assertEqual(payment, contact_pagseguro_cmd.result)
        self.assertEqual(payment.status, STATUS_SENT_TO_PAGSEGURO)
        self.assertEqual(
            contact_pagseguro_cmd.checkout_code, _SUCCESS_PAGSEGURO_CODE,
            'Should have the code extracted from xml _PAGSEGURO_DETAIL_XML')
        self.assertIsNone(payment.code)
예제 #3
0
class ProcessExternalPaymentCmd(CommandParallel):
    def __init__(self, xml):
        self.__transaction_dct = xmltodict.parse(xml, 'ISO-8859-1')
        super(ProcessExternalPaymentCmd, self).__init__(
            PaymentByPagseguroCode(
                self.__transaction_dct['transaction']['code']))

    def do_business(self):
        super(ProcessExternalPaymentCmd, self).do_business()
        dct = self.__transaction_dct
        if self.result:
            self.result.status = XML_STATUS_TO_MODEL_STATUS.get(
                dct['transaction']['status'])
            cmd = UpdatePaymentAndSaveLog(self.result)
            cmd.execute()
        else:
            self.result = PagSegPayment(
                code=dct['transaction']['code'],
                status=XML_STATUS_TO_MODEL_STATUS.get(
                    dct['transaction']['status']),
                total=dct['transaction']['grossAmount'],
                net_amount=dct['transaction']['netAmount'])
            payment_key = self.result.put()

            def create_item_cmd(item):
                return _SimpleSave(
                    PagSegItem(description=item['description'],
                               price=Decimal(item['amount']),
                               quantity=int(item['quantity'])))

            items = dct['transaction']['items']['item']
            if isinstance(items, dict):
                items = [items]
            items_cmd = [
                CreatePaymentToItem(payment_key, create_item_cmd(item))
                for item in items
            ]
            cmd = CommandParallel(
                CreatePagSegPaymentToLog(
                    payment_key,
                    _SimpleSave(PagSegLog(status=self.result.status))),
                *items_cmd)

            sender = dct['transaction'].get('sender')
            if sender:
                user = facade.get_user_by_email(sender['email'])()
                if user is None:
                    user = facade.save_user_cmd(sender['email'],
                                                sender['name'])()
                cmd.append(SaveToPayment(user, payment_key))
            cmd.execute()
예제 #4
0
class ProcessExternalPaymentCmd(CommandParallel):
    def __init__(self, xml):
        self.__transaction_dct = xmltodict.parse(xml, 'ISO-8859-1')
        super(ProcessExternalPaymentCmd, self).__init__(
            PaymentByPagseguroCode(self.__transaction_dct['transaction']['code']))

    def do_business(self):
        super(ProcessExternalPaymentCmd, self).do_business()
        dct = self.__transaction_dct
        if self.result:
            self.result.status = XML_STATUS_TO_MODEL_STATUS.get(dct['transaction']['status'])
            cmd = UpdatePaymentAndSaveLog(self.result)
            cmd.execute()
        else:
            self.result = PagSegPayment(code=dct['transaction']['code'],
                                        status=XML_STATUS_TO_MODEL_STATUS.get(dct['transaction']['status']),
                                        total=dct['transaction']['grossAmount'],
                                        net_amount=dct['transaction']['netAmount'])
            payment_key = self.result.put()


            def create_item_cmd(item):
                return _SimpleSave(PagSegItem(description=item['description'],
                                              price=Decimal(item['amount']),
                                              quantity=int(item['quantity'])))

            items = dct['transaction']['items']['item']
            if isinstance(items, dict):
                items = [items]
            items_cmd = [CreatePaymentToItem(payment_key, create_item_cmd(item)) for item in
                         items]
            cmd = CommandParallel(
                CreatePagSegPaymentToLog(payment_key, _SimpleSave(PagSegLog(status=self.result.status))), *items_cmd)

            sender = dct['transaction'].get('sender')
            if sender:
                user = facade.get_user_by_email(sender['email'])()
                if user is None:
                    user = facade.save_user_cmd(sender['email'], sender['name'])()
                cmd.append(SaveToPayment(user,payment_key))
            cmd.execute()
예제 #5
0
 def test_get_payment_search(self):
     created_payment = PagSegPayment(status=STATUS_CREATED)
     created_payment.put()
     comand = GetPayment(created_payment.key.id())
     payment = comand()
     self.assertEqual(created_payment, payment)
예제 #6
0
 def test_get_payment_search(self):
     created_payment = PagSegPayment(status=STATUS_CREATED)
     created_payment.put()
     comand = GetPayment(created_payment.key.id())
     payment = comand()
     self.assertEqual(created_payment, payment)