def test_iban_fields(self): """Test the IBAN model and form field.""" valid = { 'NL02ABNA0123456789': 'NL02ABNA0123456789', 'Nl02aBNa0123456789': 'NL02ABNA0123456789', 'NL02 ABNA 0123 4567 89': 'NL02ABNA0123456789', 'NL02-ABNA-0123-4567-89': 'NL02ABNA0123456789', 'NL91ABNA0417164300': 'NL91ABNA0417164300', 'NL91 ABNA 0417 1643 00': 'NL91ABNA0417164300', 'NL91-ABNA-0417-1643-00': 'NL91ABNA0417164300', 'MU17BOMM0101101030300200000MUR': 'MU17BOMM0101101030300200000MUR', 'MU17 BOMM 0101 1010 3030 0200 000M UR': 'MU17BOMM0101101030300200000MUR', 'MU 17BO MM01011010 3030-02 000-00M UR': 'MU17BOMM0101101030300200000MUR', 'BE68539007547034': 'BE68539007547034', 'BE68 5390 0754 7034': 'BE68539007547034', 'BE-685390075470 34': 'BE68539007547034', } invalid = { 'NL02ABNA012345678999': ['NL IBANs must contain 18 characters.'], 'NL02 ABNA 0123 4567 8999': ['NL IBANs must contain 18 characters.'], 'NL91ABNB0417164300': ['Not a valid IBAN.'], 'NL91 ABNB 0417 1643 00': ['Not a valid IBAN.'], 'MU17BOMM0101101030300200000MUR12345': [ 'MU IBANs must contain 30 characters.', 'Ensure this value has at most 34 characters (it has 35).' ], 'MU17 BOMM 0101 1010 3030 0200 000M UR12 345': [ 'MU IBANs must contain 30 characters.', 'Ensure this value has at most 34 characters (it has 35).' ], # This IBAN should only be valid only if the Nordea extensions are turned on. 'EG1100006001880800100014553': ['EG is not a valid country code for IBAN.'], 'EG11 0000 6001 8808 0010 0014 553': ['EG is not a valid country code for IBAN.'] } self.assertFieldOutput(IBANFormField, valid=valid, invalid=invalid) # Test valid inputs for model field. iban_model_field = IBANField() for input, output in valid.items(): self.assertEqual(iban_model_field.clean(input, None), output) self.assertIsNone(iban_model_field.to_python(None)) # Invalid inputs for model field. for input, errors in invalid.items(): with self.assertRaises(ValidationError) as context_manager: iban_model_field.clean(input, None) # The error messages for models are in a different order. errors.reverse() self.assertEqual(context_manager.exception.messages, errors)
def test_iban_fields(self): """Test the IBAN model and form field.""" valid = { 'NL02ABNA0123456789': 'NL02ABNA0123456789', 'Nl02aBNa0123456789': 'NL02ABNA0123456789', 'NL02 ABNA 0123 4567 89': 'NL02ABNA0123456789', 'NL02-ABNA-0123-4567-89': 'NL02ABNA0123456789', 'NL91ABNA0417164300': 'NL91ABNA0417164300', 'NL91 ABNA 0417 1643 00': 'NL91ABNA0417164300', 'NL91-ABNA-0417-1643-00': 'NL91ABNA0417164300', 'MU17BOMM0101101030300200000MUR': 'MU17BOMM0101101030300200000MUR', 'MU17 BOMM 0101 1010 3030 0200 000M UR': 'MU17BOMM0101101030300200000MUR', 'MU 17BO MM01011010 3030-02 000-00M UR': 'MU17BOMM0101101030300200000MUR', 'BE68539007547034': 'BE68539007547034', 'BE68 5390 0754 7034': 'BE68539007547034', 'BE-685390075470 34': 'BE68539007547034', } invalid = { 'NL02ABNA012345678999': ['NL IBANs must contain 18 characters.'], 'NL02 ABNA 0123 4567 8999': ['NL IBANs must contain 18 characters.'], 'NL91ABNB0417164300': ['Not a valid IBAN.'], 'NL91 ABNB 0417 1643 00': ['Not a valid IBAN.'], 'MU17BOMM0101101030300200000MUR12345': [ 'MU IBANs must contain 30 characters.', 'Ensure this value has at most 34 characters (it has 35).'], 'MU17 BOMM 0101 1010 3030 0200 000M UR12 345': [ 'MU IBANs must contain 30 characters.', 'Ensure this value has at most 34 characters (it has 35).'], # This IBAN should only be valid only if the Nordea extensions are turned on. 'EG1100006001880800100014553': ['EG is not a valid country code for IBAN.'], 'EG11 0000 6001 8808 0010 0014 553': ['EG is not a valid country code for IBAN.'] } self.assertFieldOutput(IBANFormField, valid=valid, invalid=invalid) # Test valid inputs for model field. iban_model_field = IBANField() for input, output in valid.items(): self.assertEqual(iban_model_field.clean(input, None), output) self.assertIsNone(iban_model_field.to_python(None)) # Invalid inputs for model field. for input, errors in invalid.items(): with self.assertRaises(ValidationError) as context_manager: iban_model_field.clean(input, None) # The error messages for models are in a different order. errors.reverse() self.assertEqual(context_manager.exception.messages, errors)