Commit b734e351 authored by Alex Gaynor's avatar Alex Gaynor
Browse files

[1.2.X] Fixed #14499 -- ATSocialSecurityNumberField now responds to all...

[1.2.X] Fixed #14499 -- ATSocialSecurityNumberField now responds to all EMPTY_VALUES correctly.  Also converted Austrian localflavor doctests to unittests.  We have always been at war with doctests.  Thanks to Idan Gazit for the patch.  Backport of [14873].

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14875 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 9bbd1212
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -4,12 +4,14 @@ AT-specific Form helpers

import re

from django.utils.translation import ugettext_lazy as _
from django.forms.fields import Field, RegexField, Select
from django.core.validators import EMPTY_VALUES
from django.forms import ValidationError
from django.forms.fields import Field, RegexField, Select
from django.utils.translation import ugettext_lazy as _

re_ssn = re.compile(r'^\d{4} \d{6}')


class ATZipCodeField(RegexField):
    """
    A form field that validates its input is an Austrian postcode.
@@ -49,6 +51,9 @@ class ATSocialSecurityNumberField(Field):
    }

    def clean(self, value):
        value = super(ATSocialSecurityNumberField, self).clean(value)
        if value in EMPTY_VALUES:
            return u""
        if not re_ssn.search(value):
            raise ValidationError(self.error_messages['invalid'])
        sqnr, date = value.split(" ")
@@ -62,4 +67,3 @@ class ATSocialSecurityNumberField(Field):
        if res != int(check):
           raise ValidationError(self.error_messages['invalid'])
        return u'%s%s %s'%(sqnr, check, date,)
+45 −80
Original line number Diff line number Diff line
# -*- coding: utf-8 -*-
# Tests for the contrib/localflavor/ AT form fields.

tests = r"""
# ATZipCodeField ###########################################################

>>> from django.contrib.localflavor.at.forms import ATZipCodeField 
>>> f = ATZipCodeField()
>>> f.clean('1150')
u'1150'
>>> f.clean('4020')
u'4020'
>>> f.clean('8020')
u'8020'
>>> f.clean('111222')
Traceback (most recent call last):
...
ValidationError: [u'Enter a zip code in the format XXXX.']
>>> f.clean('eeffee')
Traceback (most recent call last):
...
ValidationError: [u'Enter a zip code in the format XXXX.']
>>> f.clean(u'')
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.']
>>> f.clean('')
Traceback (most recent call last):
...
ValidationError: [u'This field is required.']


>>> f = ATZipCodeField(required=False)
>>> f.clean('1150')
u'1150'
>>> f.clean('4020')
u'4020'
>>> f.clean('8020')
u'8020'
>>> f.clean('111222')
Traceback (most recent call last):
...
ValidationError: [u'Enter a zip code in the format XXXX.']
>>> f.clean('eeffee')
Traceback (most recent call last):
...
ValidationError: [u'Enter a zip code in the format XXXX.']
>>> f.clean(None)
u''
>>> f.clean('')
u''
>>> f.clean(u'')
u''

# ATStateSelect ##################################################################

>>> from django.contrib.localflavor.at.forms import ATStateSelect
>>> f = ATStateSelect()
>>> f.render('bundesland', 'WI')
u'<select name="bundesland">\n<option value="BL">Burgenland</option>\n<option value="KA">Carinthia</option>\n<option value="NO">Lower Austria</option>\n<option value="OO">Upper Austria</option>\n<option value="SA">Salzburg</option>\n<option value="ST">Styria</option>\n<option value="TI">Tyrol</option>\n<option value="VO">Vorarlberg</option>\n<option value="WI" selected="selected">Vienna</option>\n</select>'

# ATSocialSecurityNumberField ################################################

>>> from django.contrib.localflavor.at.forms import ATSocialSecurityNumberField
>>> f = ATSocialSecurityNumberField()
>>> f.clean('1237 010180')
u'1237 010180'
>>> f.clean('1237 010181')
Traceback (most recent call last):
...
ValidationError: [u'Enter a valid Austrian Social Security Number in XXXX XXXXXX format.']
>>> f.clean('12370 010180')
Traceback (most recent call last):
...
ValidationError: [u'Enter a valid Austrian Social Security Number in XXXX XXXXXX format.']
"""
from django.contrib.localflavor.at.forms import (ATZipCodeField, ATStateSelect,
    ATSocialSecurityNumberField)

from utils import LocalFlavorTestCase


class ATLocalFlavorTests(LocalFlavorTestCase):
    def test_ATStateSelect(self):
        f = ATStateSelect()
        out = u'''<select name="bundesland">
<option value="BL">Burgenland</option>
<option value="KA">Carinthia</option>
<option value="NO">Lower Austria</option>
<option value="OO">Upper Austria</option>
<option value="SA">Salzburg</option>
<option value="ST">Styria</option>
<option value="TI">Tyrol</option>
<option value="VO">Vorarlberg</option>
<option value="WI" selected="selected">Vienna</option>
</select>'''
        self.assertEqual(f.render('bundesland', 'WI'), out)

    def test_ATZipCodeField(self):
        error_format = [u'Enter a zip code in the format XXXX.']
        valid = {
            '1150': '1150',
            '4020': '4020',
            '8020': '8020',
        }
        invalid = {
            '111222': error_format,
            'eeffee': error_format,
        }
        self.assertFieldOutput(ATZipCodeField, valid, invalid)

    def test_ATSocialSecurityNumberField(self):
        error_format = [u'Enter a valid Austrian Social Security Number in XXXX XXXXXX format.']
        valid = {
            '1237 010180': '1237 010180',
        }
        invalid = {
            '1237 010181': error_format,
            '12370 010180': error_format,
        }
        self.assertFieldOutput(ATSocialSecurityNumberField, valid, invalid)
+1 −5
Original line number Diff line number Diff line
# -*- coding: utf-8 -*-
from localflavor.at import tests as localflavor_at_tests
from localflavor.au import tests as localflavor_au_tests
from localflavor.br import tests as localflavor_br_tests
from localflavor.ca import tests as localflavor_ca_tests
@@ -28,14 +27,11 @@ from localflavor.uy import tests as localflavor_uy_tests
from localflavor.za import tests as localflavor_za_tests

from localflavor.ar import ARLocalFlavorTests
from localflavor.at import ATLocalFlavorTests
from localflavor.de import DELocalFlavorTests
from localflavor.be import BELocalFlavorTests
from localflavor.il import ILLocalFlavorTests
from localflavor.tr import TRLocalFlavorTests


__test__ = {
    'localflavor_at_tests': localflavor_at_tests,
    'localflavor_au_tests': localflavor_au_tests,
    'localflavor_br_tests': localflavor_br_tests,
    'localflavor_ca_tests': localflavor_ca_tests,
+6 −1
Original line number Diff line number Diff line
@@ -11,4 +11,9 @@ from util import *
from validators import TestFieldWithValidators
from widgets import *

from regressiontests.forms.localflavortests import __test__, DELocalFlavorTests
from regressiontests.forms.localflavortests import (
    __test__,
    ARLocalFlavorTests,
    ATLocalFlavorTests,
    DELocalFlavorTests,
)