Code

Ticket #15813: in_states_normalized_patch_with_better_tests.v3.diff

File in_states_normalized_patch_with_better_tests.v3.diff, 9.8 KB (added by jsdalton, 3 years ago)
Line 
1Index: tests/regressiontests/forms/tests/__init__.py
2===================================================================
3--- tests/regressiontests/forms/tests/__init__.py       (revision 16150)
4+++ tests/regressiontests/forms/tests/__init__.py       (working copy)
5@@ -33,6 +33,7 @@
6     IELocalFlavorTests,
7     ILLocalFlavorTests,
8     ISLocalFlavorTests,
9+    INLocalFlavorTests,
10     ITLocalFlavorTests,
11     JPLocalFlavorTests,
12     KWLocalFlavorTests,
13Index: tests/regressiontests/forms/localflavor/in_.py
14===================================================================
15--- tests/regressiontests/forms/localflavor/in_.py      (revision 0)
16+++ tests/regressiontests/forms/localflavor/in_.py      (revision 0)
17@@ -0,0 +1,159 @@
18+import warnings
19+
20+from django.contrib.localflavor.in_.forms import (INZipCodeField,
21+                                                  INStateField, INStateSelect)
22+
23+from utils import LocalFlavorTestCase
24+
25+
26+class INLocalFlavorTests(LocalFlavorTestCase):
27+    def test_INPStateSelect(self):
28+        f = INStateSelect()
29+        out = u'''<select name="state">
30+<option value="KA">Karnataka</option>
31+<option value="AP" selected="selected">Andhra Pradesh</option>
32+<option value="KL">Kerala</option>
33+<option value="TN">Tamil Nadu</option>
34+<option value="MH">Maharashtra</option>
35+<option value="UP">Uttar Pradesh</option>
36+<option value="GA">Goa</option>
37+<option value="GJ">Gujarat</option>
38+<option value="RJ">Rajasthan</option>
39+<option value="HP">Himachal Pradesh</option>
40+<option value="JK">Jammu and Kashmir</option>
41+<option value="AR">Arunachal Pradesh</option>
42+<option value="AS">Assam</option>
43+<option value="BR">Bihar</option>
44+<option value="CG">Chattisgarh</option>
45+<option value="HR">Haryana</option>
46+<option value="JH">Jharkhand</option>
47+<option value="MP">Madhya Pradesh</option>
48+<option value="MN">Manipur</option>
49+<option value="ML">Meghalaya</option>
50+<option value="MZ">Mizoram</option>
51+<option value="NL">Nagaland</option>
52+<option value="OR">Orissa</option>
53+<option value="PB">Punjab</option>
54+<option value="SK">Sikkim</option>
55+<option value="TR">Tripura</option>
56+<option value="UA">Uttarakhand</option>
57+<option value="WB">West Bengal</option>
58+<option value="AN">Andaman and Nicobar</option>
59+<option value="CH">Chandigarh</option>
60+<option value="DN">Dadra and Nagar Haveli</option>
61+<option value="DD">Daman and Diu</option>
62+<option value="DL">Delhi</option>
63+<option value="LD">Lakshadweep</option>
64+<option value="PY">Pondicherry</option>
65+</select>'''
66+        self.assertEqual(f.render('state', 'AP'), out)
67+
68+    def test_INZipCodeField(self):
69+        error_format = [u'Enter a zip code in the format XXXXXXX.']
70+        valid = {
71+            '360311': '360311',
72+            '360 311': '360311',
73+
74+        }
75+        invalid = {
76+            '36 0311': error_format,
77+            '3603111': error_format,
78+            '360 31': error_format,
79+            '36031': error_format,
80+            'O2B 2R3': error_format
81+        }
82+        self.assertFieldOutput(INZipCodeField, valid, invalid)
83+
84+    def test_INStateField(self):
85+        error_format = [u'Enter an Indian state or territory.']
86+        valid = {
87+            'an': 'AN',
88+            'AN': 'AN',
89+            'andaman and nicobar': 'AN',
90+            'andra pradesh': 'AP',
91+            'andrapradesh': 'AP',
92+            'andhrapradesh': 'AP',
93+            'ap': 'AP',
94+            'andhra pradesh': 'AP',
95+            'ar': 'AR',
96+            'arunachal pradesh': 'AR',
97+            'assam': 'AS',
98+            'as': 'AS',
99+            'bihar': 'BR',
100+            'br': 'BR',
101+            'cg': 'CG',
102+            'chattisgarh': 'CG',
103+            'ch': 'CH',
104+            'chandigarh': 'CH',
105+            'daman and diu': 'DD',
106+            'dd': 'DD',
107+            'dl': 'DL',
108+            'delhi': 'DL',
109+            'dn': 'DN',
110+            'dadra and nagar haveli': 'DN',
111+            'ga': 'GA',
112+            'goa': 'GA',
113+            'gj': 'GJ',
114+            'gujarat': 'GJ',
115+            'himachal pradesh': 'HP',
116+            'hp': 'HP',
117+            'hr': 'HR',
118+            'haryana': 'HR',
119+            'jharkhand': 'JH',
120+            'jh': 'JH',
121+            'jammu and kashmir': 'JK',
122+            'jk': 'JK',
123+            'karnataka': 'KA',
124+            'karnatka': 'KA',
125+            'ka': 'KA',
126+            'kerala': 'KL',
127+            'kl': 'KL',
128+            'ld': 'LD',
129+            'lakshadweep': 'LD',
130+            'maharastra': 'MH',
131+            'mh': 'MH',
132+            'maharashtra': 'MH',
133+            'meghalaya': 'ML',
134+            'ml': 'ML',
135+            'mn': 'MN',
136+            'manipur': 'MN',
137+            'madhya pradesh': 'MP',
138+            'mp': 'MP',
139+            'mizoram': 'MZ',
140+            'mizo': 'MZ',
141+            'mz': 'MZ',
142+            'nl': 'NL',
143+            'nagaland': 'NL',
144+            'orissa': 'OR',
145+            'odisa': 'OR',
146+            'orisa': 'OR',
147+            'or': 'OR',
148+            'pb': 'PB',
149+            'punjab': 'PB',
150+            'py': 'PY',
151+            'pondicherry': 'PY',
152+            'rajasthan': 'RJ',
153+            'rajastan': 'RJ',
154+            'rj': 'RJ',
155+            'sikkim': 'SK',
156+            'sk': 'SK',
157+            'tamil nadu': 'TN',
158+            'tn': 'TN',
159+            'tamilnadu': 'TN',
160+            'tamilnad': 'TN',
161+            'tr': 'TR',
162+            'tripura': 'TR',
163+            'ua': 'UA',
164+            'uttarakhand': 'UA',
165+            'up': 'UP',
166+            'uttar pradesh': 'UP',
167+            'westbengal': 'WB',
168+            'bengal': 'WB',
169+            'wb': 'WB',
170+            'west bengal': 'WB'
171+        }
172+        invalid = {
173+            'florida': error_format,
174+            'FL': error_format,
175+        }
176+        self.assertFieldOutput(INStateField, valid, invalid)
177Index: tests/regressiontests/forms/localflavortests.py
178===================================================================
179--- tests/regressiontests/forms/localflavortests.py     (revision 16150)
180+++ tests/regressiontests/forms/localflavortests.py     (working copy)
181@@ -19,6 +19,7 @@
182 from localflavor.ie import IELocalFlavorTests
183 from localflavor.il import ILLocalFlavorTests
184 from localflavor.is_ import ISLocalFlavorTests
185+from localflavor.in_ import INLocalFlavorTests
186 from localflavor.it import ITLocalFlavorTests
187 from localflavor.jp import JPLocalFlavorTests
188 from localflavor.kw import KWLocalFlavorTests
189Index: django/contrib/localflavor/in_/in_states.py
190===================================================================
191--- django/contrib/localflavor/in_/in_states.py (revision 16150)
192+++ django/contrib/localflavor/in_/in_states.py (working copy)
193@@ -47,38 +47,88 @@
194 )
195 
196 STATES_NORMALIZED = {
197-    'ka': 'KA',
198-    'karnatka': 'KA',
199-    'tn': 'TN',
200-    'tamilnad': 'TN',
201-    'tamilnadu': 'TN',
202+    'an': 'AN',
203+    'andaman and nicobar': 'AN',
204     'andra pradesh': 'AP',
205     'andrapradesh': 'AP',
206     'andhrapradesh': 'AP',
207-    'maharastra': 'MH',
208-    'mh': 'MH',
209     'ap': 'AP',
210+    'andhra pradesh': 'AP',
211+    'ar': 'AR',
212+    'arunachal pradesh': 'AR',
213+    'assam': 'AS',
214+    'as': 'AS',
215+    'bihar': 'BR',
216+    'br': 'BR',
217+    'cg': 'CG',
218+    'chattisgarh': 'CG',
219+    'ch': 'CH',
220+    'chandigarh': 'CH',
221+    'daman and diu': 'DD',
222+    'dd': 'DD',
223     'dl': 'DL',
224-    'dd': 'DD',
225-    'br': 'BR',
226-    'ar': 'AR',
227-    'sk': 'SK',
228-    'kl': 'KL',
229+    'delhi': 'DL',
230+    'dn': 'DN',
231+    'dadra and nagar haveli': 'DN',
232     'ga': 'GA',
233-    'rj': 'RJ',
234-    'rajastan': 'RJ',
235-    'rajasthan': 'RJ',
236+    'goa': 'GA',
237+    'gj': 'GJ',
238+    'gujarat': 'GJ',
239+    'himachal pradesh': 'HP',
240     'hp': 'HP',
241-    'ua': 'UA',
242-    'up': 'UP',
243+    'hr': 'HR',
244+    'haryana': 'HR',
245+    'jharkhand': 'JH',
246+    'jh': 'JH',
247+    'jammu and kashmir': 'JK',
248+    'jk': 'JK',
249+    'karnataka': 'KA',
250+    'karnatka': 'KA',
251+    'ka': 'KA',
252+    'kerala': 'KL',
253+    'kl': 'KL',
254+    'ld': 'LD',
255+    'lakshadweep': 'LD',
256+    'maharastra': 'MH',
257+    'mh': 'MH',
258+    'maharashtra': 'MH',
259+    'meghalaya': 'ML',
260+    'ml': 'ML',
261+    'mn': 'MN',
262+    'manipur': 'MN',
263+    'madhya pradesh': 'MP',
264     'mp': 'MP',
265+    'mizoram': 'MZ',
266+    'mizo': 'MZ',
267     'mz': 'MZ',
268-    'bengal': 'WB',
269-    'westbengal': 'WB',
270-    'mizo': 'MZ',
271+    'nl': 'NL',
272+    'nagaland': 'NL',
273+    'orissa': 'OR',
274+    'odisa': 'OR',
275     'orisa': 'OR',
276-    'odisa': 'OR',
277     'or': 'OR',
278-    'ar': 'AR',
279+    'pb': 'PB',
280+    'punjab': 'PB',
281+    'py': 'PY',
282+    'pondicherry': 'PY',
283+    'rajasthan': 'RJ',
284+    'rajastan': 'RJ',
285+    'rj': 'RJ',
286+    'sikkim': 'SK',
287+    'sk': 'SK',
288+    'tamil nadu': 'TN',
289+    'tn': 'TN',
290+    'tamilnadu': 'TN',
291+    'tamilnad': 'TN',
292+    'tr': 'TR',
293+    'tripura': 'TR',
294+    'ua': 'UA',
295+    'uttarakhand': 'UA',
296+    'up': 'UP',
297+    'uttar pradesh': 'UP',
298+    'westbengal': 'WB',
299+    'bengal': 'WB',
300+    'wb': 'WB',
301+    'west bengal': 'WB'
302 }
303 
304Index: django/contrib/localflavor/in_/forms.py
305===================================================================
306--- django/contrib/localflavor/in_/forms.py     (revision 16150)
307+++ django/contrib/localflavor/in_/forms.py     (working copy)
308@@ -16,8 +16,16 @@
309     }
310 
311     def __init__(self, max_length=None, min_length=None, *args, **kwargs):
312-        super(INZipCodeField, self).__init__(r'^\d{6}$',
313+        super(INZipCodeField, self).__init__(r'^\d{3}\s?\d{3}$',
314             max_length, min_length, *args, **kwargs)
315+   
316+    def clean(self, value):
317+        super(INZipCodeField, self).clean(value)
318+        if value in EMPTY_VALUES:
319+            return u''
320+        # Convert to "NNNNNN" if "NNN NNN" given
321+        value = re.sub(r'^(\d{3})\s(\d{3})$', r'\1\2', value)
322+        return value
323 
324 class INStateField(Field):
325     """
326@@ -26,7 +34,7 @@
327     registration abbreviation for the given state or union territory
328     """
329     default_error_messages = {
330-        'invalid': u'Enter a Indian state or territory.',
331+        'invalid': u'Enter an Indian state or territory.',
332     }
333 
334     def clean(self, value):