def test_only_huge_street(self):
     v_address_cmd = generate_validate_address_cmd(street='a' * 81)
     cmd = ValidatePagseguroDataCmd('Renzo', 'a@foo', v_address_cmd, *valid_item_cmds)
     self.assert_errors(cmd, {'email': 'Invalid email',
                              'name': 'Nome informado deve ser completo',
                              'street': 'Has 81 characters and it must have 80 or less',
                              'access_data': 'Must save access data before making payments'})
 def test_absent_street(self):
     v_address_cmd = generate_validate_address_cmd(street='')
     cmd = ValidatePagseguroDataCmd('Renzo', 'a@foo', v_address_cmd, *valid_item_cmds)
     self.assert_errors(cmd, {'email': 'Invalid email',
                              'name': 'Nome informado deve ser completo',
                              'street': 'Required field',
                              'access_data': 'Must save access data before making payments'})
    def test_third_absent_quantity_invalid_reference(self):
        self.maxDiff = None
        v_address_cmd = generate_validate_address_cmd(street='', number='', postalcode='', town='a', state='SPP',
                                                      complement='a' * 41)
        invalid_description_item_cmd = ValidateItemCmd(description='', price='', quantity='', reference='a')
        cmd = ValidatePagseguroDataCmd('Renzo', 'a@foo', v_address_cmd,

                                       valid_item_cmds[0],
                                       valid_item_cmds[1],
                                       invalid_description_item_cmd)  # not passing any items here as third parameter
        self.assertRaises(CommandExecutionException, cmd)
        item_errors = [{}, {},
            {'description': 'Required field', 'price': 'Required field', 'quantity': 'Required field',
             'reference': 'Invalid key'}]
        self.assertListEqual(item_errors, cmd.errors['items'])
        self.assert_errors(cmd, {'email': 'Invalid email',
                                 'name': 'Nome informado deve ser completo',
                                 'street': 'Required field',
                                 'number': 'Required field',
                                 'postalcode': 'Required field',
                                 'town': 'Has 1 characters and it must have 2 or more',
                                 'state': 'Has 3 characters and it must have exactly 2',
                                 'complement': 'Has 41 characters and it must have 40 or less',
                                 'items': item_errors,
                                 'access_data': 'Must save access data before making payments'})
 def test_invalid_postalcode(self):
     v_address_cmd = generate_validate_address_cmd(street='', number='', postalcode='1234567')
     cmd = ValidatePagseguroDataCmd('Renzo', 'a@foo', v_address_cmd, *valid_item_cmds)
     self.assert_errors(cmd, {'email': 'Invalid email',
                              'name': 'Nome informado deve ser completo',
                              'street': 'Required field',
                              'number': 'Required field',
                              'postalcode': 'CEP must have exactly 8 characters',
                              'access_data': 'Must save access data before making payments'})
 def test_tiny_town(self):
     v_address_cmd = generate_validate_address_cmd(street='', number='', postalcode='', town='a')
     cmd = ValidatePagseguroDataCmd('Renzo', 'a@foo', v_address_cmd, *valid_item_cmds)
     self.assert_errors(cmd, {'email': 'Invalid email',
                              'name': 'Nome informado deve ser completo',
                              'street': 'Required field',
                              'number': 'Required field',
                              'postalcode': 'Required field',
                              'town': 'Has 1 characters and it must have 2 or more',
                              'access_data': 'Must save access data before making payments'})
 def __init__(self, redirect_url, client_name, client_email, payment_owner,
              validate_address_cmd, *validate_item_cmds):
     validate_data_cmd = ValidatePagseguroDataCmd(client_name, client_email,
                                                  validate_address_cmd,
                                                  *validate_item_cmds)
     save_data_cmd = SavePagseguroDataCmd()
     save_arcs_cmd = SavePaymentArcsCmd(payment_owner)
     self.__contact_pagseguro_cmd = ContactPagseguro(redirect_url)
     super(GeneratePayment,
           self).__init__(validate_data_cmd, save_data_cmd, save_arcs_cmd,
                          self.__contact_pagseguro_cmd,
                          UpdatePaymentAndSaveLog())
     self.checkout_code = None
    def test_success(self):
        CreateOrUpdateAccessData('*****@*****.**', 'token_code')()
        v_address_cmd = generate_validate_address_cmd()

        cmd = ValidatePagseguroDataCmd('Renzo Nuccitelli', '*****@*****.**', v_address_cmd,
                                       ValidateItemCmd(description='Python Birds', price='18.99', quantity='3',
                                                       reference=ndb.Key(Reference, 1)), *valid_item_cmds)
        cmd()  # Should execute without exception

        # asserting data used for in sequential commands are exposed
        self.assertEqual(3, len(cmd.items), 'number of forms should be the same of ValidateItemCommands')
        self.assertIsInstance(cmd.items[0], PagSegItem)
        self.assertEqual(cmd.access_data, FindAccessDataCmd()())
        self.assertIsInstance(cmd.address_form, AddressForm)
        self.assertIsInstance(cmd.client_form, ClientForm)
 def test_absent_item_complement(self):
     self.maxDiff = None
     v_address_cmd = generate_validate_address_cmd(street='', number='', postalcode='', town='a', state='SPP',
                                                   complement='a' * 41)
     cmd = ValidatePagseguroDataCmd('Renzo', 'a@foo', v_address_cmd)  # not passing any items here as third parameter
     self.assert_errors(cmd, {'email': 'Invalid email',
                              'name': 'Nome informado deve ser completo',
                              'street': 'Required field',
                              'number': 'Required field',
                              'postalcode': 'Required field',
                              'town': 'Has 1 characters and it must have 2 or more',
                              'state': 'Has 3 characters and it must have exactly 2',
                              'complement': 'Has 41 characters and it must have 40 or less',
                              'item_number': 'Should have one item at least',
                              'access_data': 'Must save access data before making payments'})
 def test_first_invalid_item_complement(self):
     self.maxDiff = None
     v_address_cmd = generate_validate_address_cmd(street='', number='', postalcode='', town='a', state='SPP',
                                                   complement='a' * 41)
     invalid_description_item_cmd = ValidateItemCmd(description='', price=Decimal('18.99'), quantity=1)
     cmd = ValidatePagseguroDataCmd('Renzo', 'a@foo', v_address_cmd,
                                    invalid_description_item_cmd,
                                    valid_item_cmds[0])  # not passing any items here as third parameter
     self.assert_errors(cmd, {'email': 'Invalid email',
                              'name': 'Nome informado deve ser completo',
                              'street': 'Required field',
                              'number': 'Required field',
                              'postalcode': 'Required field',
                              'town': 'Has 1 characters and it must have 2 or more',
                              'state': 'Has 3 characters and it must have exactly 2',
                              'complement': 'Has 41 characters and it must have 40 or less',
                              'items': [{'description': 'Required field'},
                                  {}],
                              'access_data': 'Must save access data before making payments'})
 def test_only_first_client_name(self):
     cmd = ValidatePagseguroDataCmd('Renzo', 'a@foo', valid_address_cmd, *valid_item_cmds)
     self.assert_errors(cmd, {'email': 'Invalid email',
                              'name': 'Nome informado deve ser completo',
                              'access_data': 'Must save access data before making payments'})
 def test_access_data_not_saved(self):
     cmd = ValidatePagseguroDataCmd('Renzo Nuccitelli', '*****@*****.**', valid_address_cmd, *valid_item_cmds)
     self.assert_errors(cmd, {'access_data': 'Must save access data before making payments'})
 def assert_email_error(self, email, error_msg):
     cmd = ValidatePagseguroDataCmd('Jhon Doe', email, valid_address_cmd, *valid_item_cmds)
     self.assert_errors(cmd, {'email': error_msg,
                              'access_data': 'Must save access data before making payments'})