Loading tests/regressiontests/forms/localflavor/se.py +163 −329 Original line number Diff line number Diff line # -*- coding: utf-8 -*- # Tests for the contrib/localflavor/se form fields. tests = r""" # Monkey-patch datetime.date >>> import datetime >>> class MockDate(datetime.date): ... def today(cls): ... return datetime.date(2008, 5, 14) ... today = classmethod(today) ... >>> olddate = datetime.date >>> datetime.date = MockDate >>> datetime.date.today() == olddate(2008, 5, 14) True # SECountySelect ##################################################### >>> from django.contrib.localflavor.se.forms import SECountySelect >>> w = SECountySelect() >>> w.render('swedish_county', 'E') u'<select name="swedish_county">\n<option value="AB">Stockholm</option>\n<option value="AC">V\xe4sterbotten</option>\n<option value="BD">Norrbotten</option>\n<option value="C">Uppsala</option>\n<option value="D">S\xf6dermanland</option>\n<option value="E" selected="selected">\xd6sterg\xf6tland</option>\n<option value="F">J\xf6nk\xf6ping</option>\n<option value="G">Kronoberg</option>\n<option value="H">Kalmar</option>\n<option value="I">Gotland</option>\n<option value="K">Blekinge</option>\n<option value="M">Sk\xe5ne</option>\n<option value="N">Halland</option>\n<option value="O">V\xe4stra G\xf6taland</option>\n<option value="S">V\xe4rmland</option>\n<option value="T">\xd6rebro</option>\n<option value="U">V\xe4stmanland</option>\n<option value="W">Dalarna</option>\n<option value="X">G\xe4vleborg</option>\n<option value="Y">V\xe4sternorrland</option>\n<option value="Z">J\xe4mtland</option>\n</select>' # SEOrganisationNumberField ####################################### >>> from django.contrib.localflavor.se.forms import SEOrganisationNumberField >>> f = SEOrganisationNumberField() from django.contrib.localflavor.se.forms import (SECountySelect, SEOrganisationNumberField, SEPersonalIdentityNumberField, SEPostalCodeField) import datetime from utils import LocalFlavorTestCase class SELocalFlavorTests(LocalFlavorTestCase): def setUp(self): # Mocking datetime.date to make sure # localflavor.se.utils.validate_id_birthday works class MockDate(datetime.date): def today(cls): return datetime.date(2008, 5, 14) today = classmethod(today) self._olddate = datetime.date datetime.date = MockDate def tearDown(self): datetime.date = self._olddate def test_SECountySelect(self): f = SECountySelect() out = u'''<select name="swedish_county"> <option value="AB">Stockholm</option> <option value="AC">V\xe4sterbotten</option> <option value="BD">Norrbotten</option> <option value="C">Uppsala</option> <option value="D">S\xf6dermanland</option> <option value="E" selected="selected">\xd6sterg\xf6tland</option> <option value="F">J\xf6nk\xf6ping</option> <option value="G">Kronoberg</option> <option value="H">Kalmar</option> <option value="I">Gotland</option> <option value="K">Blekinge</option> <option value="M">Sk\xe5ne</option> <option value="N">Halland</option> <option value="O">V\xe4stra G\xf6taland</option> <option value="S">V\xe4rmland</option> <option value="T">\xd6rebro</option> <option value="U">V\xe4stmanland</option> <option value="W">Dalarna</option> <option value="X">G\xe4vleborg</option> <option value="Y">V\xe4sternorrland</option> <option value="Z">J\xe4mtland</option> </select>''' self.assertEqual(f.render('swedish_county', 'E'), out) def test_SEOrganizationNumberField(self): error_invalid = [u'Enter a valid Swedish organisation number.'] valid = { '870512-1989': '198705121989', '19870512-1989': '198705121989', '870512-2128': '198705122128', '081015-6315': '190810156315', '081015+6315': '180810156315', '0810156315': '190810156315', # Test some different organisation numbers # IKEA Linköping '556074-7569': '5560747569', # Volvo Personvagnar '556074-3089': '5560743089', # LJS (organisation) '822001-5476': '8220015476', # LJS (organisation) '8220015476': '8220015476', # Katedralskolan Linköping (school) '2120000449': '2120000449', # Faux organisation number, which tests that the checksum can be 0 '232518-5060': '2325185060', } invalid = { # Ordinary personal identity numbers for sole proprietors # The same rules as for SEPersonalIdentityField applies here >>> f.clean('870512-1989') u'198705121989' >>> f.clean('19870512-1989') u'198705121989' >>> f.clean('870512-2128') u'198705122128' >>> f.clean('081015-6315') u'190810156315' >>> f.clean('081015+6315') u'180810156315' >>> f.clean('0810156315') u'190810156315' >>> f.clean('081015 6315') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] >>> f.clean('950231-4496') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] >>> f.clean('6914104499') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] >>> f.clean('950d314496') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] >>> f.clean('invalid!!!') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] >>> f.clean('870514-1111') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] # Empty values >>> f.clean('') Traceback (most recent call last): ... ValidationError: [u'This field is required.'] >>> f.clean(None) Traceback (most recent call last): ... ValidationError: [u'This field is required.'] '081015 6315': error_invalid, '950231-4496': error_invalid, '6914104499': error_invalid, '950d314496': error_invalid, 'invalid!!!': error_invalid, '870514-1111': error_invalid, # Co-ordination number checking # Co-ordination numbers are not valid organisation numbers >>> f.clean('870574-1315') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] >>> f.clean('870573-1311') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] # Test some different organisation numbers >>> f.clean('556074-7569') # IKEA Linköping u'5560747569' >>> f.clean('556074-3089') # Volvo Personvagnar u'5560743089' >>> f.clean('822001-5476') # LJS (organisation) u'8220015476' >>> f.clean('8220015476') # LJS (organisation) u'8220015476' >>> f.clean('2120000449') # Katedralskolan Linköping (school) u'2120000449' # Faux organisation number, which tests that the checksum can be 0 >>> f.clean('232518-5060') u'2325185060' >>> f.clean('556074+3089') # Volvo Personvagnar, bad format Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] '870574-1315': error_invalid, '870573-1311': error_invalid, # Volvo Personvagnar, bad format '556074+3089': error_invalid, # Invalid checksum >>> f.clean('2120000441') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] '2120000441': error_invalid, # Valid checksum but invalid organisation type f.clean('1120000441') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] # Empty values with required=False >>> f = SEOrganisationNumberField(required=False) >>> f.clean(None) u'' >>> f.clean('') u'' # SEPersonalIdentityNumberField ####################################### >>> from django.contrib.localflavor.se.forms import SEPersonalIdentityNumberField >>> f = SEPersonalIdentityNumberField() # Valid id numbers >>> f.clean('870512-1989') u'198705121989' >>> f.clean('870512-2128') u'198705122128' >>> f.clean('19870512-1989') u'198705121989' >>> f.clean('198705121989') u'198705121989' >>> f.clean('081015-6315') u'190810156315' >>> f.clean('0810156315') u'190810156315' '1120000441': error_invalid, } self.assertFieldOutput(SEOrganisationNumberField, valid, invalid) def test_SEPersonalIdentityNumberField(self): error_invalid = [u'Enter a valid Swedish personal identity number.'] error_coord = [u'Co-ordination numbers are not allowed.'] valid = { '870512-1989': '198705121989', '870512-2128': '198705122128', '19870512-1989': '198705121989', '198705121989': '198705121989', '081015-6315': '190810156315', '0810156315': '190810156315', # This is a "special-case" in the checksum calculation, # where the sum is divisible by 10 (the checksum digit == 0) >>> f.clean('8705141060') u'198705141060' '8705141060': '198705141060', # + means that the person is older than 100 years >>> f.clean('081015+6315') u'180810156315' # Bogus values >>> f.clean('081015 6315') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] >>> f.clean('950d314496') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] >>> f.clean('invalid!!!') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] '081015+6315': '180810156315', # Co-ordination number checking '870574-1315': '198705741315', '870574+1315': '188705741315', '198705741315': '198705741315', } invalid = { '081015 6315': error_invalid, '950d314496': error_invalid, 'invalid!!!': error_invalid, # Invalid dates # February 31st does not exist >>> f.clean('950231-4496') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] '950231-4496': error_invalid, # Month 14 does not exist >>> f.clean('6914104499') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] '6914104499': error_invalid, # There are no Swedish personal id numbers where year < 1800 >>> f.clean('17430309-7135') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] '17430309-7135': error_invalid, # Invalid checksum >>> f.clean('870514-1111') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] # Empty values >>> f.clean('') Traceback (most recent call last): ... ValidationError: [u'This field is required.'] >>> f.clean(None) Traceback (most recent call last): ... ValidationError: [u'This field is required.'] # Co-ordination number checking >>> f.clean('870574-1315') u'198705741315' >>> f.clean('870574+1315') u'188705741315' >>> f.clean('198705741315') u'198705741315' '870514-1111': error_invalid, # Co-ordination number with bad checksum >>> f.clean('870573-1311') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] '870573-1311': error_invalid, } self.assertFieldOutput(SEPersonalIdentityNumberField, valid, invalid) # Check valid co-ordination numbers, that should not be accepted valid = {} invalid = { # Check valid co-ordination numbers that should not be accepted # because of coordination_number=False >>> f = SEPersonalIdentityNumberField(coordination_number=False) >>> f.clean('870574-1315') Traceback (most recent call last): ... ValidationError: [u'Co-ordination numbers are not allowed.'] >>> f.clean('870574+1315') Traceback (most recent call last): ... ValidationError: [u'Co-ordination numbers are not allowed.'] >>> f.clean('8705741315') Traceback (most recent call last): ... ValidationError: [u'Co-ordination numbers are not allowed.'] '870574-1315': error_coord, '870574+1315': error_coord, '8705741315': error_coord, # Invalid co-ordination numbers should be treated as invalid, and not # as co-ordination numbers >>> f.clean('870573-1311') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] # Empty values with required=False >>> f = SEPersonalIdentityNumberField(required=False) >>> f.clean(None) u'' >>> f.clean('') u'' # SEPostalCodeField ############################################### >>> from django.contrib.localflavor.se.forms import SEPostalCodeField >>> f = SEPostalCodeField() >>> Postal codes can have spaces >>> f.clean('589 37') u'58937' ... but the dont have to >>> f.clean('58937') u'58937' >>> f.clean('abcasfassadf') Traceback (most recent call last): ... ValidationError: [u'Enter a Swedish postal code in the format XXXXX.'] '870573-1311': error_invalid, } kwargs = {'coordination_number': False,} self.assertFieldOutput(SEPersonalIdentityNumberField, valid, invalid, field_kwargs=kwargs) def test_SEPostalCodeField(self): error_format = [u'Enter a Swedish postal code in the format XXXXX.'] valid = { '589 37': '58937', '58937': '58937', } invalid = { 'abcasfassadf': error_format, # Only one space is allowed for separation >>> f.clean('589 37') Traceback (most recent call last): ... ValidationError: [u'Enter a Swedish postal code in the format XXXXX.'] '589 37': error_format, # The postal code must not start with 0 >>> f.clean('01234') Traceback (most recent call last): ... ValidationError: [u'Enter a Swedish postal code in the format XXXXX.'] # Empty values >>> f.clean('') Traceback (most recent call last): ... ValidationError: [u'This field is required.'] >>> f.clean(None) Traceback (most recent call last): ... ValidationError: [u'This field is required.'] # Empty values, required=False >>> f = SEPostalCodeField(required=False) >>> f.clean('') u'' >>> f.clean(None) u'' '01234': error_format, # Revert the monkey patching >>> datetime.date = olddate } self.assertFieldOutput(SEPostalCodeField, valid, invalid) """ tests/regressiontests/forms/localflavor/utils.py +7 −5 Original line number Diff line number Diff line Loading @@ -15,7 +15,8 @@ class LocalFlavorTestCase(TestCase): def assertFieldOutput(self, fieldclass, valid, invalid, field_args=[], field_kwargs={}, empty_value=u''): """Asserts that a field behaves correctly with various inputs. """ Asserts that a field behaves correctly with various inputs. Args: fieldclass: the class of the field to be tested. Loading @@ -23,9 +24,10 @@ class LocalFlavorTestCase(TestCase): cleaned values. invalid: a dictionary mapping invalid inputs to one or more raised error messages. fieldargs: the args passed to instantiate the field fieldkwargs: the kwargs passed to instantiate the field emptyvalue: the expected clean output for inputs in EMPTY_VALUES field_args: the args passed to instantiate the field field_kwargs: the kwargs passed to instantiate the field empty_value: the expected clean output for inputs in EMPTY_VALUES """ required = fieldclass(*field_args, **field_kwargs) optional = fieldclass(*field_args, **dict(field_kwargs, required=False)) Loading tests/regressiontests/forms/localflavortests.py +2 −2 Original line number Diff line number Diff line # -*- coding: utf-8 -*- from localflavor.cz import tests as localflavor_cz_tests from localflavor.se import tests as localflavor_se_tests from localflavor.ar import ARLocalFlavorTests from localflavor.at import ATLocalFlavorTests Loading @@ -25,6 +25,7 @@ from localflavor.nl import NLLocalFlavorTests from localflavor.pl import PLLocalFlavorTests from localflavor.pt import PTLocalFlavorTests from localflavor.ro import ROLocalFlavorTests from localflavor.se import SELocalFlavorTests from localflavor.sk import SKLocalFlavorTests from localflavor.tr import TRLocalFlavorTests from localflavor.uk import UKLocalFlavorTests Loading @@ -35,5 +36,4 @@ from localflavor.za import ZALocalFlavorTests __test__ = { 'localflavor_cz_tests': localflavor_cz_tests, 'localflavor_se_tests': localflavor_se_tests, } tests/regressiontests/forms/tests/__init__.py +1 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ from regressiontests.forms.localflavortests import ( PLLocalFlavorTests, PTLocalFlavorTests, ROLocalFlavorTests, SELocalFlavorTests, SKLocalFlavorTests, TRLocalFlavorTests, UKLocalFlavorTests, Loading django/contrib/localflavor/se/utils.py +7 −7 File changed.Contains only whitespace changes. Show changes Loading
tests/regressiontests/forms/localflavor/se.py +163 −329 Original line number Diff line number Diff line # -*- coding: utf-8 -*- # Tests for the contrib/localflavor/se form fields. tests = r""" # Monkey-patch datetime.date >>> import datetime >>> class MockDate(datetime.date): ... def today(cls): ... return datetime.date(2008, 5, 14) ... today = classmethod(today) ... >>> olddate = datetime.date >>> datetime.date = MockDate >>> datetime.date.today() == olddate(2008, 5, 14) True # SECountySelect ##################################################### >>> from django.contrib.localflavor.se.forms import SECountySelect >>> w = SECountySelect() >>> w.render('swedish_county', 'E') u'<select name="swedish_county">\n<option value="AB">Stockholm</option>\n<option value="AC">V\xe4sterbotten</option>\n<option value="BD">Norrbotten</option>\n<option value="C">Uppsala</option>\n<option value="D">S\xf6dermanland</option>\n<option value="E" selected="selected">\xd6sterg\xf6tland</option>\n<option value="F">J\xf6nk\xf6ping</option>\n<option value="G">Kronoberg</option>\n<option value="H">Kalmar</option>\n<option value="I">Gotland</option>\n<option value="K">Blekinge</option>\n<option value="M">Sk\xe5ne</option>\n<option value="N">Halland</option>\n<option value="O">V\xe4stra G\xf6taland</option>\n<option value="S">V\xe4rmland</option>\n<option value="T">\xd6rebro</option>\n<option value="U">V\xe4stmanland</option>\n<option value="W">Dalarna</option>\n<option value="X">G\xe4vleborg</option>\n<option value="Y">V\xe4sternorrland</option>\n<option value="Z">J\xe4mtland</option>\n</select>' # SEOrganisationNumberField ####################################### >>> from django.contrib.localflavor.se.forms import SEOrganisationNumberField >>> f = SEOrganisationNumberField() from django.contrib.localflavor.se.forms import (SECountySelect, SEOrganisationNumberField, SEPersonalIdentityNumberField, SEPostalCodeField) import datetime from utils import LocalFlavorTestCase class SELocalFlavorTests(LocalFlavorTestCase): def setUp(self): # Mocking datetime.date to make sure # localflavor.se.utils.validate_id_birthday works class MockDate(datetime.date): def today(cls): return datetime.date(2008, 5, 14) today = classmethod(today) self._olddate = datetime.date datetime.date = MockDate def tearDown(self): datetime.date = self._olddate def test_SECountySelect(self): f = SECountySelect() out = u'''<select name="swedish_county"> <option value="AB">Stockholm</option> <option value="AC">V\xe4sterbotten</option> <option value="BD">Norrbotten</option> <option value="C">Uppsala</option> <option value="D">S\xf6dermanland</option> <option value="E" selected="selected">\xd6sterg\xf6tland</option> <option value="F">J\xf6nk\xf6ping</option> <option value="G">Kronoberg</option> <option value="H">Kalmar</option> <option value="I">Gotland</option> <option value="K">Blekinge</option> <option value="M">Sk\xe5ne</option> <option value="N">Halland</option> <option value="O">V\xe4stra G\xf6taland</option> <option value="S">V\xe4rmland</option> <option value="T">\xd6rebro</option> <option value="U">V\xe4stmanland</option> <option value="W">Dalarna</option> <option value="X">G\xe4vleborg</option> <option value="Y">V\xe4sternorrland</option> <option value="Z">J\xe4mtland</option> </select>''' self.assertEqual(f.render('swedish_county', 'E'), out) def test_SEOrganizationNumberField(self): error_invalid = [u'Enter a valid Swedish organisation number.'] valid = { '870512-1989': '198705121989', '19870512-1989': '198705121989', '870512-2128': '198705122128', '081015-6315': '190810156315', '081015+6315': '180810156315', '0810156315': '190810156315', # Test some different organisation numbers # IKEA Linköping '556074-7569': '5560747569', # Volvo Personvagnar '556074-3089': '5560743089', # LJS (organisation) '822001-5476': '8220015476', # LJS (organisation) '8220015476': '8220015476', # Katedralskolan Linköping (school) '2120000449': '2120000449', # Faux organisation number, which tests that the checksum can be 0 '232518-5060': '2325185060', } invalid = { # Ordinary personal identity numbers for sole proprietors # The same rules as for SEPersonalIdentityField applies here >>> f.clean('870512-1989') u'198705121989' >>> f.clean('19870512-1989') u'198705121989' >>> f.clean('870512-2128') u'198705122128' >>> f.clean('081015-6315') u'190810156315' >>> f.clean('081015+6315') u'180810156315' >>> f.clean('0810156315') u'190810156315' >>> f.clean('081015 6315') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] >>> f.clean('950231-4496') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] >>> f.clean('6914104499') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] >>> f.clean('950d314496') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] >>> f.clean('invalid!!!') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] >>> f.clean('870514-1111') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] # Empty values >>> f.clean('') Traceback (most recent call last): ... ValidationError: [u'This field is required.'] >>> f.clean(None) Traceback (most recent call last): ... ValidationError: [u'This field is required.'] '081015 6315': error_invalid, '950231-4496': error_invalid, '6914104499': error_invalid, '950d314496': error_invalid, 'invalid!!!': error_invalid, '870514-1111': error_invalid, # Co-ordination number checking # Co-ordination numbers are not valid organisation numbers >>> f.clean('870574-1315') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] >>> f.clean('870573-1311') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] # Test some different organisation numbers >>> f.clean('556074-7569') # IKEA Linköping u'5560747569' >>> f.clean('556074-3089') # Volvo Personvagnar u'5560743089' >>> f.clean('822001-5476') # LJS (organisation) u'8220015476' >>> f.clean('8220015476') # LJS (organisation) u'8220015476' >>> f.clean('2120000449') # Katedralskolan Linköping (school) u'2120000449' # Faux organisation number, which tests that the checksum can be 0 >>> f.clean('232518-5060') u'2325185060' >>> f.clean('556074+3089') # Volvo Personvagnar, bad format Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] '870574-1315': error_invalid, '870573-1311': error_invalid, # Volvo Personvagnar, bad format '556074+3089': error_invalid, # Invalid checksum >>> f.clean('2120000441') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] '2120000441': error_invalid, # Valid checksum but invalid organisation type f.clean('1120000441') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish organisation number.'] # Empty values with required=False >>> f = SEOrganisationNumberField(required=False) >>> f.clean(None) u'' >>> f.clean('') u'' # SEPersonalIdentityNumberField ####################################### >>> from django.contrib.localflavor.se.forms import SEPersonalIdentityNumberField >>> f = SEPersonalIdentityNumberField() # Valid id numbers >>> f.clean('870512-1989') u'198705121989' >>> f.clean('870512-2128') u'198705122128' >>> f.clean('19870512-1989') u'198705121989' >>> f.clean('198705121989') u'198705121989' >>> f.clean('081015-6315') u'190810156315' >>> f.clean('0810156315') u'190810156315' '1120000441': error_invalid, } self.assertFieldOutput(SEOrganisationNumberField, valid, invalid) def test_SEPersonalIdentityNumberField(self): error_invalid = [u'Enter a valid Swedish personal identity number.'] error_coord = [u'Co-ordination numbers are not allowed.'] valid = { '870512-1989': '198705121989', '870512-2128': '198705122128', '19870512-1989': '198705121989', '198705121989': '198705121989', '081015-6315': '190810156315', '0810156315': '190810156315', # This is a "special-case" in the checksum calculation, # where the sum is divisible by 10 (the checksum digit == 0) >>> f.clean('8705141060') u'198705141060' '8705141060': '198705141060', # + means that the person is older than 100 years >>> f.clean('081015+6315') u'180810156315' # Bogus values >>> f.clean('081015 6315') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] >>> f.clean('950d314496') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] >>> f.clean('invalid!!!') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] '081015+6315': '180810156315', # Co-ordination number checking '870574-1315': '198705741315', '870574+1315': '188705741315', '198705741315': '198705741315', } invalid = { '081015 6315': error_invalid, '950d314496': error_invalid, 'invalid!!!': error_invalid, # Invalid dates # February 31st does not exist >>> f.clean('950231-4496') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] '950231-4496': error_invalid, # Month 14 does not exist >>> f.clean('6914104499') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] '6914104499': error_invalid, # There are no Swedish personal id numbers where year < 1800 >>> f.clean('17430309-7135') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] '17430309-7135': error_invalid, # Invalid checksum >>> f.clean('870514-1111') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] # Empty values >>> f.clean('') Traceback (most recent call last): ... ValidationError: [u'This field is required.'] >>> f.clean(None) Traceback (most recent call last): ... ValidationError: [u'This field is required.'] # Co-ordination number checking >>> f.clean('870574-1315') u'198705741315' >>> f.clean('870574+1315') u'188705741315' >>> f.clean('198705741315') u'198705741315' '870514-1111': error_invalid, # Co-ordination number with bad checksum >>> f.clean('870573-1311') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] '870573-1311': error_invalid, } self.assertFieldOutput(SEPersonalIdentityNumberField, valid, invalid) # Check valid co-ordination numbers, that should not be accepted valid = {} invalid = { # Check valid co-ordination numbers that should not be accepted # because of coordination_number=False >>> f = SEPersonalIdentityNumberField(coordination_number=False) >>> f.clean('870574-1315') Traceback (most recent call last): ... ValidationError: [u'Co-ordination numbers are not allowed.'] >>> f.clean('870574+1315') Traceback (most recent call last): ... ValidationError: [u'Co-ordination numbers are not allowed.'] >>> f.clean('8705741315') Traceback (most recent call last): ... ValidationError: [u'Co-ordination numbers are not allowed.'] '870574-1315': error_coord, '870574+1315': error_coord, '8705741315': error_coord, # Invalid co-ordination numbers should be treated as invalid, and not # as co-ordination numbers >>> f.clean('870573-1311') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Swedish personal identity number.'] # Empty values with required=False >>> f = SEPersonalIdentityNumberField(required=False) >>> f.clean(None) u'' >>> f.clean('') u'' # SEPostalCodeField ############################################### >>> from django.contrib.localflavor.se.forms import SEPostalCodeField >>> f = SEPostalCodeField() >>> Postal codes can have spaces >>> f.clean('589 37') u'58937' ... but the dont have to >>> f.clean('58937') u'58937' >>> f.clean('abcasfassadf') Traceback (most recent call last): ... ValidationError: [u'Enter a Swedish postal code in the format XXXXX.'] '870573-1311': error_invalid, } kwargs = {'coordination_number': False,} self.assertFieldOutput(SEPersonalIdentityNumberField, valid, invalid, field_kwargs=kwargs) def test_SEPostalCodeField(self): error_format = [u'Enter a Swedish postal code in the format XXXXX.'] valid = { '589 37': '58937', '58937': '58937', } invalid = { 'abcasfassadf': error_format, # Only one space is allowed for separation >>> f.clean('589 37') Traceback (most recent call last): ... ValidationError: [u'Enter a Swedish postal code in the format XXXXX.'] '589 37': error_format, # The postal code must not start with 0 >>> f.clean('01234') Traceback (most recent call last): ... ValidationError: [u'Enter a Swedish postal code in the format XXXXX.'] # Empty values >>> f.clean('') Traceback (most recent call last): ... ValidationError: [u'This field is required.'] >>> f.clean(None) Traceback (most recent call last): ... ValidationError: [u'This field is required.'] # Empty values, required=False >>> f = SEPostalCodeField(required=False) >>> f.clean('') u'' >>> f.clean(None) u'' '01234': error_format, # Revert the monkey patching >>> datetime.date = olddate } self.assertFieldOutput(SEPostalCodeField, valid, invalid) """
tests/regressiontests/forms/localflavor/utils.py +7 −5 Original line number Diff line number Diff line Loading @@ -15,7 +15,8 @@ class LocalFlavorTestCase(TestCase): def assertFieldOutput(self, fieldclass, valid, invalid, field_args=[], field_kwargs={}, empty_value=u''): """Asserts that a field behaves correctly with various inputs. """ Asserts that a field behaves correctly with various inputs. Args: fieldclass: the class of the field to be tested. Loading @@ -23,9 +24,10 @@ class LocalFlavorTestCase(TestCase): cleaned values. invalid: a dictionary mapping invalid inputs to one or more raised error messages. fieldargs: the args passed to instantiate the field fieldkwargs: the kwargs passed to instantiate the field emptyvalue: the expected clean output for inputs in EMPTY_VALUES field_args: the args passed to instantiate the field field_kwargs: the kwargs passed to instantiate the field empty_value: the expected clean output for inputs in EMPTY_VALUES """ required = fieldclass(*field_args, **field_kwargs) optional = fieldclass(*field_args, **dict(field_kwargs, required=False)) Loading
tests/regressiontests/forms/localflavortests.py +2 −2 Original line number Diff line number Diff line # -*- coding: utf-8 -*- from localflavor.cz import tests as localflavor_cz_tests from localflavor.se import tests as localflavor_se_tests from localflavor.ar import ARLocalFlavorTests from localflavor.at import ATLocalFlavorTests Loading @@ -25,6 +25,7 @@ from localflavor.nl import NLLocalFlavorTests from localflavor.pl import PLLocalFlavorTests from localflavor.pt import PTLocalFlavorTests from localflavor.ro import ROLocalFlavorTests from localflavor.se import SELocalFlavorTests from localflavor.sk import SKLocalFlavorTests from localflavor.tr import TRLocalFlavorTests from localflavor.uk import UKLocalFlavorTests Loading @@ -35,5 +36,4 @@ from localflavor.za import ZALocalFlavorTests __test__ = { 'localflavor_cz_tests': localflavor_cz_tests, 'localflavor_se_tests': localflavor_se_tests, }
tests/regressiontests/forms/tests/__init__.py +1 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ from regressiontests.forms.localflavortests import ( PLLocalFlavorTests, PTLocalFlavorTests, ROLocalFlavorTests, SELocalFlavorTests, SKLocalFlavorTests, TRLocalFlavorTests, UKLocalFlavorTests, Loading
django/contrib/localflavor/se/utils.py +7 −7 File changed.Contains only whitespace changes. Show changes