1
# -*- coding: utf-8 -*-
2
# Tests for the contrib/localflavor/ BR form fields.
5
# BRZipCodeField ############################################################
6
>>> from django.contrib.localflavor.br.forms import BRZipCodeField
7
>>> f = BRZipCodeField()
8
>>> f.clean('12345-123')
10
>>> f.clean('12345_123')
11
Traceback (most recent call last):
13
ValidationError: [u'Enter a zip code in the format XXXXX-XXX.']
14
>>> f.clean('1234-123')
15
Traceback (most recent call last):
17
ValidationError: [u'Enter a zip code in the format XXXXX-XXX.']
18
>>> f.clean('abcde-abc')
19
Traceback (most recent call last):
21
ValidationError: [u'Enter a zip code in the format XXXXX-XXX.']
23
Traceback (most recent call last):
25
ValidationError: [u'Enter a zip code in the format XXXXX-XXX.']
27
Traceback (most recent call last):
29
ValidationError: [u'Enter a zip code in the format XXXXX-XXX.']
31
Traceback (most recent call last):
33
ValidationError: [u'This field is required.']
35
Traceback (most recent call last):
37
ValidationError: [u'This field is required.']
39
>>> f = BRZipCodeField(required=False)
45
Traceback (most recent call last):
47
ValidationError: [u'Enter a zip code in the format XXXXX-XXX.']
49
Traceback (most recent call last):
51
ValidationError: [u'Enter a zip code in the format XXXXX-XXX.']
52
>>> f.clean('abcde-abc')
53
Traceback (most recent call last):
55
ValidationError: [u'Enter a zip code in the format XXXXX-XXX.']
56
>>> f.clean('1234-123')
57
Traceback (most recent call last):
59
ValidationError: [u'Enter a zip code in the format XXXXX-XXX.']
60
>>> f.clean('12345_123')
61
Traceback (most recent call last):
63
ValidationError: [u'Enter a zip code in the format XXXXX-XXX.']
64
>>> f.clean('12345-123')
67
# BRCNPJField ############################################################
69
>>> from django.contrib.localflavor.br.forms import BRCNPJField
70
>>> f = BRCNPJField(required=True)
72
Traceback (most recent call last):
74
ValidationError: [u'This field is required.']
75
>>> f.clean('12-345-678/9012-10')
76
Traceback (most recent call last):
78
ValidationError: [u'Invalid CNPJ number.']
79
>>> f.clean('12.345.678/9012-10')
80
Traceback (most recent call last):
82
ValidationError: [u'Invalid CNPJ number.']
83
>>> f.clean('12345678/9012-10')
84
Traceback (most recent call last):
86
ValidationError: [u'Invalid CNPJ number.']
87
>>> f.clean('64.132.916/0001-88')
89
>>> f.clean('64-132-916/0001-88')
91
>>> f.clean('64132916/0001-88')
93
>>> f.clean('64.132.916/0001-XX')
94
Traceback (most recent call last):
96
ValidationError: [u'This field requires only numbers.']
97
>>> f = BRCNPJField(required=False)
101
# BRCPFField #################################################################
103
>>> from django.contrib.localflavor.br.forms import BRCPFField
106
Traceback (most recent call last):
108
ValidationError: [u'This field is required.']
110
Traceback (most recent call last):
112
ValidationError: [u'This field is required.']
113
>>> f.clean('489.294.654-54')
114
Traceback (most recent call last):
116
ValidationError: [u'Invalid CPF number.']
117
>>> f.clean('295.669.575-98')
118
Traceback (most recent call last):
120
ValidationError: [u'Invalid CPF number.']
121
>>> f.clean('539.315.127-22')
122
Traceback (most recent call last):
124
ValidationError: [u'Invalid CPF number.']
125
>>> f.clean('663.256.017-26')
127
>>> f.clean('66325601726')
129
>>> f.clean('375.788.573-20')
131
>>> f.clean('84828509895')
133
>>> f.clean('375.788.573-XX')
134
Traceback (most recent call last):
136
ValidationError: [u'This field requires only numbers.']
137
>>> f.clean('375.788.573-000')
138
Traceback (most recent call last):
140
ValidationError: [u'Ensure this value has at most 14 characters (it has 15).']
141
>>> f.clean('123.456.78')
142
Traceback (most recent call last):
144
ValidationError: [u'Ensure this value has at least 11 characters (it has 10).']
145
>>> f.clean('123456789555')
146
Traceback (most recent call last):
148
ValidationError: [u'This field requires at most 11 digits or 14 characters.']
149
>>> f = BRCPFField(required=False)
155
# BRPhoneNumberField #########################################################
157
>>> from django.contrib.localflavor.br.forms import BRPhoneNumberField
158
>>> f = BRPhoneNumberField()
159
>>> f.clean('41-3562-3464')
161
>>> f.clean('4135623464')
163
>>> f.clean('41 3562-3464')
165
>>> f.clean('41 3562 3464')
167
>>> f.clean('(41) 3562 3464')
169
>>> f.clean('41.3562.3464')
171
>>> f.clean('41.3562-3464')
173
>>> f.clean(' (41) 3562.3464')
176
Traceback (most recent call last):
178
ValidationError: [u'This field is required.']
180
Traceback (most recent call last):
182
ValidationError: [u'This field is required.']
184
>>> f = BRPhoneNumberField(required=False)
189
>>> f.clean(' (41) 3562.3464')
191
>>> f.clean('41.3562-3464')
193
>>> f.clean('(41) 3562 3464')
195
>>> f.clean('4135623464')
197
>>> f.clean('41 3562-3464')
200
# BRStateSelect ##############################################################
202
>>> from django.contrib.localflavor.br.forms import BRStateSelect
203
>>> w = BRStateSelect()
204
>>> w.render('states', 'PR')
205
u'<select name="states">\n<option value="AC">Acre</option>\n<option value="AL">Alagoas</option>\n<option value="AP">Amap\xe1</option>\n<option value="AM">Amazonas</option>\n<option value="BA">Bahia</option>\n<option value="CE">Cear\xe1</option>\n<option value="DF">Distrito Federal</option>\n<option value="ES">Esp\xedrito Santo</option>\n<option value="GO">Goi\xe1s</option>\n<option value="MA">Maranh\xe3o</option>\n<option value="MT">Mato Grosso</option>\n<option value="MS">Mato Grosso do Sul</option>\n<option value="MG">Minas Gerais</option>\n<option value="PA">Par\xe1</option>\n<option value="PB">Para\xedba</option>\n<option value="PR" selected="selected">Paran\xe1</option>\n<option value="PE">Pernambuco</option>\n<option value="PI">Piau\xed</option>\n<option value="RJ">Rio de Janeiro</option>\n<option value="RN">Rio Grande do Norte</option>\n<option value="RS">Rio Grande do Sul</option>\n<option value="RO">Rond\xf4nia</option>\n<option value="RR">Roraima</option>\n<option value="SC">Santa Catarina</option>\n<option value="SP">S\xe3o Paulo</option>\n<option value="SE">Sergipe</option>\n<option value="TO">Tocantins</option>\n</select>'
207
# BRStateChoiceField #########################################################
208
>>> from django.contrib.localflavor.br.forms import BRStateChoiceField
209
>>> f = BRStateChoiceField()
210
>>> ', '.join([f.clean(s) for s, _ in f.widget.choices])
211
u'AC, AL, AP, AM, BA, CE, DF, ES, GO, MA, MT, MS, MG, PA, PB, PR, PE, PI, RJ, RN, RS, RO, RR, SC, SP, SE, TO'
213
Traceback (most recent call last):
215
ValidationError: [u'This field is required.']
217
Traceback (most recent call last):
219
ValidationError: [u'Select a valid brazilian state. That state is not one of the available states.']
1
from django.contrib.localflavor.br.forms import (BRZipCodeField,
2
BRCNPJField, BRCPFField, BRPhoneNumberField, BRStateSelect,
5
from utils import LocalFlavorTestCase
8
class BRLocalFlavorTests(LocalFlavorTestCase):
9
def test_BRZipCodeField(self):
10
error_format = [u'Enter a zip code in the format XXXXX-XXX.']
12
'12345-123': '12345-123',
15
'12345_123': error_format,
16
'1234-123': error_format,
17
'abcde-abc': error_format,
18
'12345-': error_format,
21
self.assertFieldOutput(BRZipCodeField, valid, invalid)
23
def test_BRCNPJField(self):
24
error_format = [u'Invalid CNPJ number.']
25
error_numbersonly = [u'This field requires only numbers.']
27
'64.132.916/0001-88': '64.132.916/0001-88',
28
'64-132-916/0001-88': '64-132-916/0001-88',
29
'64132916/0001-88': '64132916/0001-88',
32
'12-345-678/9012-10': error_format,
33
'12.345.678/9012-10': error_format,
34
'12345678/9012-10': error_format,
35
'64.132.916/0001-XX': error_numbersonly,
37
self.assertFieldOutput(BRCNPJField, valid, invalid)
39
def test_BRCPFField(self):
40
error_format = [u'Invalid CPF number.']
41
error_numbersonly = [u'This field requires only numbers.']
42
error_atmost_chars = [u'Ensure this value has at most 14 characters (it has 15).']
43
error_atleast_chars = [u'Ensure this value has at least 11 characters (it has 10).']
44
error_atmost = [u'This field requires at most 11 digits or 14 characters.']
46
'663.256.017-26': '663.256.017-26',
47
'66325601726': '66325601726',
48
'375.788.573-20': '375.788.573-20',
49
'84828509895': '84828509895',
52
'489.294.654-54': error_format,
53
'295.669.575-98': error_format,
54
'539.315.127-22': error_format,
55
'375.788.573-XX': error_numbersonly,
56
'375.788.573-000': error_atmost_chars,
57
'123.456.78': error_atleast_chars,
58
'123456789555': error_atmost,
60
self.assertFieldOutput(BRCPFField, valid, invalid)
62
def test_BRPhoneNumberField(self):
63
# TODO: this doesn't test for any invalid inputs.
65
'41-3562-3464': u'41-3562-3464',
66
'4135623464': u'41-3562-3464',
67
'41 3562-3464': u'41-3562-3464',
68
'41 3562 3464': u'41-3562-3464',
69
'(41) 3562 3464': u'41-3562-3464',
70
'41.3562.3464': u'41-3562-3464',
71
'41.3562-3464': u'41-3562-3464',
72
' (41) 3562.3464': u'41-3562-3464',
75
self.assertFieldOutput(BRPhoneNumberField, valid, invalid)
77
def test_BRStateSelect(self):
79
out = u'''<select name="states">
80
<option value="AC">Acre</option>
81
<option value="AL">Alagoas</option>
82
<option value="AP">Amap\xe1</option>
83
<option value="AM">Amazonas</option>
84
<option value="BA">Bahia</option>
85
<option value="CE">Cear\xe1</option>
86
<option value="DF">Distrito Federal</option>
87
<option value="ES">Esp\xedrito Santo</option>
88
<option value="GO">Goi\xe1s</option>
89
<option value="MA">Maranh\xe3o</option>
90
<option value="MT">Mato Grosso</option>
91
<option value="MS">Mato Grosso do Sul</option>
92
<option value="MG">Minas Gerais</option>
93
<option value="PA">Par\xe1</option>
94
<option value="PB">Para\xedba</option>
95
<option value="PR" selected="selected">Paran\xe1</option>
96
<option value="PE">Pernambuco</option>
97
<option value="PI">Piau\xed</option>
98
<option value="RJ">Rio de Janeiro</option>
99
<option value="RN">Rio Grande do Norte</option>
100
<option value="RS">Rio Grande do Sul</option>
101
<option value="RO">Rond\xf4nia</option>
102
<option value="RR">Roraima</option>
103
<option value="SC">Santa Catarina</option>
104
<option value="SP">S\xe3o Paulo</option>
105
<option value="SE">Sergipe</option>
106
<option value="TO">Tocantins</option>
108
self.assertEqual(f.render('states', 'PR'), out)
110
def test_BRStateChoiceField(self):
111
error_invalid = [u'Select a valid brazilian state. That state is not one of the available states.']
144
self.assertFieldOutput(BRStateChoiceField, valid, invalid)