Skip to content

Commit b0e89da

Browse files
committed
Added MACinNumberField to MA flavor
1 parent a0bb1b5 commit b0e89da

File tree

3 files changed

+56
-1
lines changed

3 files changed

+56
-1
lines changed

docs/authors.rst

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ Authors
22
=======
33

44
* Aaron Boman
5+
* Abdellah El Youssfi Alaoui
56
* Adam Taylor
67
* Adnane Belmadiaf
78
* Adonys Alea Boffill

localflavor/ma/forms.py

+23
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,26 @@ class MARegionField(CharField):
7474
def __init__(self, **kwargs):
7575
kwargs.setdefault('label', _('Select Region'))
7676
super().__init__(**kwargs)
77+
78+
79+
class MACinNumberField(RegexField):
80+
"""
81+
CIN number: (Numéro de la Carte D'Identité Nationale) The CIN represents the ID of a Moroccan citizen.
82+
83+
- It is an 8-max-length string that starts with one or two Latin letters followed by digits,
84+
with the first digit not being zero.
85+
86+
- as implemented in the official government site "https://www.cnie.ma/"
87+
88+
"""
89+
90+
default_error_messages = {
91+
'invalid': _('Enter a valid Moroccan CIN number.'),
92+
}
93+
cin_pattern = r'^[A-Za-z]{1,2}[1-9]\d{0,6}$'
94+
95+
def __init__(self, **kwargs):
96+
kwargs.setdefault('label', _('Cin Number'))
97+
kwargs['max_length'] = 8
98+
kwargs['min_length'] = 2
99+
super().__init__(self.cin_pattern, **kwargs)

tests/test_ma.py

+32-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.test import SimpleTestCase
22

3-
from localflavor.ma.forms import MAPostalCodeField, MAProvinceField, MAProvinceSelect, MARegionField, MARegionSelect
3+
from localflavor.ma.forms import MAPostalCodeField, MAProvinceField, MAProvinceSelect, MARegionField, MARegionSelect, \
4+
MACinNumberField
45

56
PROVINCE_SELECT_OUTPUT = '''
67
<select name="province">
@@ -99,6 +100,7 @@
99100
</select>
100101
'''
101102

103+
102104
class MALocalFlavorTests(SimpleTestCase):
103105
def test_MAPostalCodeField(self):
104106
error_format = ['Enter a postal code in the format XXXXX.']
@@ -128,3 +130,32 @@ def test_MAProvinceSelect(self):
128130
def test_MARegionSelect(self):
129131
f = MARegionSelect()
130132
self.assertHTMLEqual(f.render('region', '04'), REGION_SELECT_OUTPUT)
133+
134+
def test_MACinNumberField(self):
135+
error_format = ['Enter a valid Moroccan CIN number.']
136+
valid = {
137+
'D1': 'D1',
138+
'DZ1': 'DZ1',
139+
'D23': 'D23',
140+
'DR23': 'DR23',
141+
'D345': 'D345',
142+
'DR345': 'DR345',
143+
'D3454': 'D3454',
144+
'DT3454': 'DT3454',
145+
'D34546': 'D34546',
146+
'DG34546': 'DG34546',
147+
'D345467': 'D345467',
148+
'DH345467': 'DH345467',
149+
'D3454673': 'D3454673',
150+
151+
}
152+
invalid = {
153+
'9': ['Ensure this value has at least 2 characters (it has 1).'] + error_format,
154+
'T': ['Ensure this value has at least 2 characters (it has 1).'] + error_format,
155+
'903': error_format,
156+
'D034': error_format,
157+
'DR034': error_format,
158+
'RER45': error_format,
159+
'T23456786': ['Ensure this value has at most 8 characters (it has 9).'] + error_format,
160+
}
161+
self.assertFieldOutput(MACinNumberField, valid, invalid)

0 commit comments

Comments
 (0)