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

[1.2.X] Fixed #14871, #14872 -- ZAIDField didn't handle alll EMPTY_VALUES...

[1.2.X] 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.  Backport of [14956].

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14980 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 989f5929
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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:
@@ -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)
+0 −1
Original line number Diff line number Diff line
# -*- coding: utf-8 -*-
+26 −37
Original line number Diff line number Diff line
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)
+1 −3
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.za import tests as localflavor_za_tests

from localflavor.ar import ARLocalFlavorTests
from localflavor.at import ATLocalFlavorTests
@@ -30,10 +28,10 @@ from localflavor.sk import SKLocalFlavorTests
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 −0
Original line number Diff line number Diff line
@@ -39,4 +39,5 @@ from regressiontests.forms.localflavortests import (
    UKLocalFlavorTests,
    USLocalFlavorTests,
    UYLocalFlavorTests,
    ZALocalFlavorTests,
)