Commits

Anonymous committed 26dff55

[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].

Comments (0)

Files changed (5)

django/contrib/localflavor/za/forms.py

     }
 
     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:
 
     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)

tests/regressiontests/forms/localflavor/__init__.py

-# -*- coding: utf-8 -*-

tests/regressiontests/forms/localflavor/za.py

-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)

tests/regressiontests/forms/localflavortests.py

-# -*- 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
 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,
 }

tests/regressiontests/forms/tests/__init__.py

     UKLocalFlavorTests,
     USLocalFlavorTests,
     UYLocalFlavorTests,
+    ZALocalFlavorTests,
 )