Skip to content

Commit

Permalink
Fixed #14871, #14872 -- ZAIDField didn't handle alll EMPTY_VALUES cor…
Browse files Browse the repository at this point in the history
…rectly and ZAPostCodeField didn't respect *args or **kwargs (such as required=False). Also converted South African localflavor doctests into unittests. We have always been at war with doctests. Thanks to Idan Gazit.

Fixing ZA localflavor clean() #14872

git-svn-id: http://code.djangoproject.com/svn/django/trunk@14956 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
alex committed Dec 18, 2010
1 parent f4bc738 commit bc27405
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 45 deletions.
8 changes: 4 additions & 4 deletions django/contrib/localflavor/za/forms.py
Expand Up @@ -22,14 +22,14 @@ class ZAIDField(Field):
}

def clean(self, value):
# strip spaces and dashes
value = value.strip().replace(' ', '').replace('-', '')

super(ZAIDField, self).clean(value)

if value in EMPTY_VALUES:
return u''

# strip spaces and dashes
value = value.strip().replace(' ', '').replace('-', '')

match = re.match(id_re, value)

if not match:
Expand Down Expand Up @@ -57,4 +57,4 @@ class ZAPostCodeField(RegexField):

def __init__(self, *args, **kwargs):
super(ZAPostCodeField, self).__init__(r'^\d{4}$',
max_length=None, min_length=None)
max_length=None, min_length=None, *args, **kwargs)
1 change: 0 additions & 1 deletion tests/regressiontests/forms/localflavor/__init__.py
@@ -1 +0,0 @@
# -*- coding: utf-8 -*-
63 changes: 26 additions & 37 deletions tests/regressiontests/forms/localflavor/za.py
@@ -1,40 +1,29 @@
tests = r"""
# ZAIDField #################################################################
from django.contrib.localflavor.za.forms import ZAIDField, ZAPostCodeField

ZAIDField validates that the date is a valid birthdate and that the value
has a valid checksum. It allows spaces and dashes, and returns a plain
string of digits.
>>> from django.contrib.localflavor.za.forms import ZAIDField
>>> f = ZAIDField()
>>> f.clean('0002290001003')
'0002290001003'
>>> f.clean('000229 0001 003')
'0002290001003'
>>> f.clean('0102290001001')
Traceback (most recent call last):
...
ValidationError: [u'Enter a valid South African ID number']
>>> f.clean('811208')
Traceback (most recent call last):
...
ValidationError: [u'Enter a valid South African ID number']
>>> f.clean('0002290001004')
Traceback (most recent call last):
...
ValidationError: [u'Enter a valid South African ID number']
from utils import LocalFlavorTestCase

# ZAPostCodeField ###########################################################
>>> from django.contrib.localflavor.za.forms import ZAPostCodeField
>>> f = ZAPostCodeField()
>>> f.clean('abcd')
Traceback (most recent call last):
...
ValidationError: [u'Enter a valid South African postal code']
>>> f.clean('0000')
u'0000'
>>> f.clean(' 7530')
Traceback (most recent call last):
...
ValidationError: [u'Enter a valid South African postal code']

"""
class ZALocalFlavorTests(LocalFlavorTestCase):
def test_ZAIDField(self):
error_invalid = [u'Enter a valid South African ID number']
valid = {
'0002290001003': '0002290001003',
'000229 0001 003': '0002290001003',
}
invalid = {
'0102290001001': error_invalid,
'811208': error_invalid,
'0002290001004': error_invalid,
}
self.assertFieldOutput(ZAIDField, valid, invalid)

def test_ZAPostCodeField(self):
error_invalid = [u'Enter a valid South African postal code']
valid = {
'0000': '0000',
}
invalid = {
'abcd': error_invalid,
' 7530': error_invalid,
}
self.assertFieldOutput(ZAPostCodeField, valid, invalid)
4 changes: 1 addition & 3 deletions tests/regressiontests/forms/localflavortests.py
@@ -1,7 +1,5 @@
# -*- coding: utf-8 -*-
from localflavor.cz import tests as localflavor_cz_tests
from localflavor.se import tests as localflavor_se_tests
from localflavor.za import tests as localflavor_za_tests

from localflavor.ar import ARLocalFlavorTests
from localflavor.at import ATLocalFlavorTests
Expand Down Expand Up @@ -32,10 +30,10 @@
from localflavor.uk import UKLocalFlavorTests
from localflavor.us import USLocalFlavorTests
from localflavor.uy import UYLocalFlavorTests
from localflavor.za import ZALocalFlavorTests


__test__ = {
'localflavor_cz_tests': localflavor_cz_tests,
'localflavor_se_tests': localflavor_se_tests,
'localflavor_za_tests': localflavor_za_tests,
}
1 change: 1 addition & 0 deletions tests/regressiontests/forms/tests/__init__.py
Expand Up @@ -42,4 +42,5 @@
UKLocalFlavorTests,
USLocalFlavorTests,
UYLocalFlavorTests,
ZALocalFlavorTests,
)

0 comments on commit bc27405

Please sign in to comment.