Fixed #14871, #14872 -- ZAIDField didn't handle alll EMPTY_VALUES correctly 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
This commit is contained in:
Alex Gaynor 2010-12-18 20:33:44 +00:00
parent f4bc738e6b
commit bc27405fc5
5 changed files with 32 additions and 45 deletions

View File

@ -22,14 +22,14 @@ class ZAIDField(Field):
} }
def clean(self, value): def clean(self, value):
# strip spaces and dashes
value = value.strip().replace(' ', '').replace('-', '')
super(ZAIDField, self).clean(value) super(ZAIDField, self).clean(value)
if value in EMPTY_VALUES: if value in EMPTY_VALUES:
return u'' return u''
# strip spaces and dashes
value = value.strip().replace(' ', '').replace('-', '')
match = re.match(id_re, value) match = re.match(id_re, value)
if not match: if not match:
@ -57,4 +57,4 @@ class ZAPostCodeField(RegexField):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(ZAPostCodeField, self).__init__(r'^\d{4}$', super(ZAPostCodeField, self).__init__(r'^\d{4}$',
max_length=None, min_length=None) max_length=None, min_length=None, *args, **kwargs)

View File

@ -1 +0,0 @@
# -*- coding: utf-8 -*-

View File

@ -1,40 +1,29 @@
tests = r""" from django.contrib.localflavor.za.forms import ZAIDField, ZAPostCodeField
# ZAIDField #################################################################
ZAIDField validates that the date is a valid birthdate and that the value from utils import LocalFlavorTestCase
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']
# 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)

View File

@ -1,7 +1,5 @@
# -*- coding: utf-8 -*-
from localflavor.cz import tests as localflavor_cz_tests from localflavor.cz import tests as localflavor_cz_tests
from localflavor.se import tests as localflavor_se_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.ar import ARLocalFlavorTests
from localflavor.at import ATLocalFlavorTests from localflavor.at import ATLocalFlavorTests
@ -32,10 +30,10 @@ from localflavor.tr import TRLocalFlavorTests
from localflavor.uk import UKLocalFlavorTests from localflavor.uk import UKLocalFlavorTests
from localflavor.us import USLocalFlavorTests from localflavor.us import USLocalFlavorTests
from localflavor.uy import UYLocalFlavorTests from localflavor.uy import UYLocalFlavorTests
from localflavor.za import ZALocalFlavorTests
__test__ = { __test__ = {
'localflavor_cz_tests': localflavor_cz_tests, 'localflavor_cz_tests': localflavor_cz_tests,
'localflavor_se_tests': localflavor_se_tests, 'localflavor_se_tests': localflavor_se_tests,
'localflavor_za_tests': localflavor_za_tests,
} }

View File

@ -42,4 +42,5 @@ from regressiontests.forms.localflavortests import (
UKLocalFlavorTests, UKLocalFlavorTests,
USLocalFlavorTests, USLocalFlavorTests,
UYLocalFlavorTests, UYLocalFlavorTests,
ZALocalFlavorTests,
) )