forked from jurismarches/geoconvert
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_geoconvert.py
293 lines (273 loc) · 14.2 KB
/
test_geoconvert.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Tests for Geoconvert."""
import unittest
from geoconvert.convert import zipcode_to_dept_name
from geoconvert.convert import address_to_zipcode
from geoconvert.convert import dept_name_to_zipcode
from geoconvert.convert import country_name_to_id
from geoconvert.convert import region_name_to_id
from geoconvert.convert import capital_name_to_country_id
from geoconvert.address import AddressParser
from geoconvert.utils import reverse_dict
class GeoconvertTestCase(unittest.TestCase):
def test_zipcode_to_dept_name(self):
self.assertEqual(zipcode_to_dept_name('121'), None)
self.assertEqual(zipcode_to_dept_name('44000'), 'loire-atlantique')
self.assertEqual(zipcode_to_dept_name('2a'), 'corse-du-sud')
self.assertEqual(zipcode_to_dept_name('2A'), 'corse-du-sud')
self.assertEqual(zipcode_to_dept_name('20A'), 'corse-du-sud')
def test_address_to_zipcode(self):
data = [
(u"Chemin du Solarium\\n Le Haut Vigneau\\n 33175 GRADIGNAN CEDEX", '33'),
("Chemin du Solarium 061256784589 Le Haut Vigneau 33175 GRADIGNAN CEDEX ", '33'),
("Chemin du Solarium Le Haut Vigneau 33175 GRADIGNAN CEDEX 061256784589", '33'),
("Chemin du Solarium Le Haut Vigneau 33175 GRADIGNAN CEDEX", '33'),
('7 cours Grandval\\nBP 414 - 20183 AJACCIO - CEDEX', '20A'),
('20212 Erbajolo', '20B'),
('20223 Solenzara Air', '20A'),
('BP 55342 20223 Solenzara Air', '20A'),
('Chemin du Solarium Le Haut Vigneau 33 175 GRADIGNAN CEDEX', '33'),
('20 223 Solenzara Air', '20A'),
('97821 Le Port Cedex', '974'),
('27006 Évreux Cedex', '27'),
(' 27006 Évreux Cedex', '27'),
('27006', '27'),
('Roissy-en-France95700', '95'),
(' 44200 BP 10720 Nantes cedex', '44'),
('a l attention de M. Bon Jean, Avenue des clients BP 72152, F - 31020 Toulouse', '31'),
('a l attention de M. Bon Jean, Avenue des clients BP72152, F - 31020 Toulouse', '31'),
('a l attention de M. Bon Jean, Avenue des clients bp72152, F - 31020 Toulouse', '31'),
('Avenue des clients CS 72152, F - 31020 Toulouse', '31'),
('BP 1330, 6503 TARBES Cedex 9, tel. 05.62.54.58.63', None),
('Ville de Blanquefort, 12 rue Dupaty B.P. 20117, à l attention de fernanda Edant-33294 Blanquefort.', '33'),
('conseil général du Haut-Rhin, 100 avenue d alsace B.P.20351, conseil général du Haut-Rhin-68006 Colmar Cedex', '68'),
('Avenue des clients CS 72152, F - 31020 Toulouse', '31'),
('Avenue des clients CS72152, F - 31020 Toulouse', '31'),
('6503 TARBES Cedex 9, tel. 05.62.54.58.63', None),
('97701 Saint-Barthelemy', '971'),
('97098 Saint-Barthelemy', '971'),
('a l attention de M. Bon Jean, Avenue des client', None),
("13 avenue de la porte d'Italie TSA 61371, F - 75621 Paris", '75'),
("avenue René Cassin — BP 67190 97801 Saint-Denis Cedex 9", '974'),
("M. le maire, hôtel de Ville 97717 Saint-Denis", '974')
]
for test in data:
self.assertEqual(address_to_zipcode(test[0]), test[1])
def test_dept_name_to_zipcode(self):
data = [
('Martinique', '972'),
("cotes d'armr", None),
("cotes d'armor", '22'),
(u'Hauts-de-Seine ', '92'),
(u'H\xe9rault', '34'),
(u'Seine-Saint-Denis ', '93'),
(u'Loire', '42'),
(u'Corse-du-Sud', '20A'),
(u'', None),
(u'Vendé?e', '85'),
(u'Loire Atlanti)que', '44'),
(u'Yonne', '89'),
(u'Saint Pierre et Miquelon', '975'),
]
for test in data:
self.assertEqual(dept_name_to_zipcode(test[0]), test[1])
def test_region_id_to_name(self):
pass
def test_region_name_to_id(self):
data = [
('bourgogne franche comté', '27'),
("midi pyrénées", '73'),
("grand est", '44'),
(u'mayotte ', '06'),
(u'Centre val de Loire', '24'),
(u'Picardie ', '22'),
(u'provence alpes côte d\'azur', '93'),
(u'', None),
(u'hauts de france', '32'),
(u'auvergne rhône alpes', '84'),
(u'nouvelle aquitaine', '75'),
(u'La guadeloupe, une superbe région', '01'),
(u'VICE-RECTORAT DE MAYOTTE ( DCS)', '06'),
]
for test in data:
print(region_name_to_id(test[0]))
self.assertEqual(region_name_to_id(test[0]), test[1])
def test_region_info_from_id(self):
pass
def test_region_info_from_name(self):
pass
def test_country_name_to_id_fr(self):
data = [
('france', 'FR'),
('Comores', 'KM'),
('Madagascar', 'MG'),
(u'S\xe9n\xe9gal', 'SN'),
('République démocratique du Congo', 'CD'),
('Mali', 'ML'),
('Sri Lanka ', 'LK'),
(u'\xa0V\xe9n\xe9zuela\xa0', 'VE'),
(u'Vi\xeatnam', 'VN'),
('Nigeria', 'NG'),
(u'Niger', 'NE'),
(u'aaa ( bbb', None),
(u" Le nigéria c'est trop sympa", 'NG'),
(u"Pays d'exécution : Niger", 'NE'),
(" Côte d'Ivoire ", 'CI'),
(" Côte d’Ivoire ", 'CI'), # with accent for apostrophe
("U.S. Mission Iraq\n\nIraq", 'IQ'),
("Pays:France ?".encode('ascii', 'ignore'), 'FR'),
(",royaume-uni,", 'GB'),
(u"trinité-et-Tobago", 'TT'),
("surinam", 'SR'),
(u"saint-barthélemy", 'BL'),
(u"saint-barthélemy", 'BL'),
('sint maarten', 'SX'),
(u'curaçao', 'CW'),
("andorre", 'AD'),
('bonaire, saint-eustache et saba', 'BQ'),
('soudan', 'SD'),
('soudan du sud', 'SS'),
("PAYS-BRÉSIL", 'BR'),
(u"Lorem ipsum Libye - LIBYE", 'LY'),
("palestine", 'PS'),
("Congo (Brazzaville)", 'CG'),
("Congo (Kinshasa)", 'CD'),
]
for test in data:
self.assertEqual(country_name_to_id(test[0]), test[1])
def test_country_name_to_id_en(self):
data = [
('Mongolia', 'MN'),
('Marocco', 'MA'),
('Georgia', 'GE'),
('kosovo', 'KO'),
('Namibia', 'NA'),
('Venezuela', 'VE'),
('Armenia', 'AM'),
('sweden', 'SE'),
(u"Knotts Island, NC 27950\n\n27950-0039\nUnited States", 'US'),
("721 APS BLDG 3334\nUNIT 3295 \nRamstein Air Base, Non-U.S. 66877 \nGermany ", 'DE'),
("Saudi Arabia", 'SA'),
("Country execution:nigeria.", 'NG'),
("RUSSIA", 'RU'),
("PAPUA NEW GUINEA", 'PG'),
("guinea-bissau", 'GW'),
("netherlands antilles", 'AN'),
("netherlands or something", 'NL'),
(u'curaçao', 'CW'),
(u'saint barthélemy', 'BL'),
('Sudan', 'SD'),
('South Sudan', 'SS'),
('tanzania', 'TZ'),
("united states minor outlying islands", 'UM'),
("Lorem ipsum Libya - LIBYA", 'LY'),
(' Democratic Republic of the Congo', 'CD'),
('CONGO, DEM. REPUBLIC', 'CD'),
('TIMOR LESTE', 'TL'),
('state of palestine', 'PS'),
('palestine, state of', 'PS')
]
for test in data:
self.assertEqual(country_name_to_id(test[0], lang='EN'), test[1])
def test_capital_name_to_country_id(self):
data = [
('Bishkek', 'KG'),
(u'lomé', 'TG')
]
for test in data:
self.assertEqual(
capital_name_to_country_id(test[0], lang='EN'), test[1])
class AddressParserTestCase(unittest.TestCase):
"""
AddressParser test case
"""
def setUp(self):
self.address_parser = AddressParser()
self.data = [
(u"Chemin du Solarium\n Le Haut Vigneau\n 33175 GRADIGNAN CEDEX 1", '33175', '33'),
("Chemin du Solarium 061256784589 Le Haut Vigneau 33175 GRADIGNAN CEDEX ", '33175', '33'),
("Chemin du Solarium Le Haut Vigneau 33175 GRADIGNAN CEDEX 061256784589", '33175', '33'),
("Chemin du Solarium Le Haut Vigneau 33175 GRADIGNAN CEDEX", '33175', '33'),
('7 cours Grandval\nBP 414 - 20183 AJACCIO - CEDEX', '20183', '2A'),
('20212 Erbajolo', '20212', '2B'),
('20223 Solenzara Air', '20223', '2B'),
('BP 55342 20223 Solenzara Air', '20223', '2B'),
('Chemin du Solarium Le Haut Vigneau 33 175 GRADIGNAN CEDEX', '33175', '33'),
('20 223 Solenzara Air', '20223', '2B'),
('97821 Le Port Cedex', '97821', '978'),
('27006 Évreux Cedex', '27006', '27'),
(' 27006 Évreux Cedex', '27006', '27'),
('27006', '27006', '27'),
('Roissy-en-France95700', '95700', '95'),
(' 44200 BP 10720 Nantes cedex', '44200', '44'),
('a l attention de M. Bon Jean, Avenue des clients BP 72152, F - 31020 Toulouse', '31020', '31'),
('a l attention de M. Bon Jean, Avenue des clients BP72152, F - 31020 Toulouse', '31020', '31'),
('a l attention de M. Bon Jean, Avenue des clients bp72152, F - 31020 Toulouse', '31020', '31'),
('Avenue des clients CS 72152, F - 31020 Toulouse', '31020', '31'),
('BP 1330, 6503 TARBES Cedex 9, tel. 05.62.54.58.63', '06503', '06'),
('Ville de Blanquefort, 12 rue Dupaty B.P. 20117, à l attention de fernanda Edant-33294 Blanquefort.', '33294', '33'),
('conseil général du Haut-Rhin, 100 avenue d alsace B.P.20351, conseil général du Haut-Rhin-68006 Colmar Cedex', '68006', '68'),
('Avenue des clients CS 72152, F - 31020 Toulouse', '31020', '31'),
('Avenue des clients CS72152, F - 31020 Toulouse', '31020', '31'),
('6503 TARBES Cedex 9, tel. 05.62.54.58.63', '06503', '06'),
('97700 Saint-Barthelemy', '97700', '977'),
('Mme Cindy DUMAS, 1500 Bd Lepic - B.P. 348 73103 Aix-les-Bains', '73103', '73'),
('Mme Cindy DUMAS, 15000 Bd Lepic - B.P. 348 73103 Aix-les-Bains', '73103', '73'),
('Mme Cindy DUMAS, 15000 Bd Lepic - 73103 B.P. 89348 Aix-les-Bains', '73103', '73'),
('Mme Cindy DUMAS, 15000 Bd Lepic - 73103 b.p. 89348 Aix-les-Bains', '73103', '73'),
('Mme Cindy DUMAS, 15000 Bd Lepic - 73103 bp 89348 Aix-les-Bains', '73103', '73'),
(u"M. le président Du Conseil Général Du Lot, avenue de l'europe - regourd Cedex 9 46005 Cahors", '46005', '46'),
(u"M. le maire, place Dr Pierre Esquirol Cedex 9 47916 Agen.", '47916', '47'),
("M. Claude Lopez, 44 avenue Saint Lazare Cedex 2 34965 Montpellier", '34965', '34'),
(u"M. le président, le Forum 3, rue Malakoff Cedex 01 38031 Grenoble", '38031', '38'),
(u"Samop - mandataire du cg38, les jardins d'entreprises \r\nbâtiment b4 \r\n213 rue de gerland 69007 Lyon", '69007', '69'),
(u"M. le président, 9, rue Saint Pierre Lentin cs 94117 Cedex 1 45041 Orléans Cedex", '45041', '45'),
(u"M. le président Du Conseil Général Du Lot, avenue de l'europe - regourd Cedex 9 46005 Cahors", '46005', '46'),
(u"M. le président, hôtel du Département , rue Gaston Manent B.P. 1324 Cedex 9 65013 Tarbes", '65013', '65'),
('a l attention de M. Bon Jean, Avenue des client', None, None),
(u"SICTOM du Guiers\n27 avenue Pravaz BP66\n38480 - Pont de Beauvoisin ", '38480', '38'),
(u"SICTOM du Guiers\n27\n avenue Pravaz BP\n\n 66\n38480\n - Pont de Beauvoisin ", '38480', '38'),
(u"Mlle DAMAGNEZ Julie, place Victor Pauchet pil daa Marchés Publics 80054 Amiens Cedex 1", '80054', '80'),
(u"CS 17569 80054 Amiens CEDEX 158", '80054', '80'),
(u"Adresse de test C.S. 17569 80054 Amiens CEDEX 15800", '80054', '80'),
(u"Adresse de test CS. 17569 80054 Amiens CEDEX 15800", '80054', '80'),
(u"Adresse de test C.S 17569 80054 Amiens CEDEX 15800", '80054', '80'),
(u"Adresse de test BP. 17569 80054 Amiens CEDEX 15800", '80054', '80'),
(u"Adresse de test B.P 17569 80054 Amiens CEDEX 15800", '80054', '80'),
(u"M. Bonnet Roland, Directeur interdépartemental des routes Centre-Ouest, le Pastel 22 rue des Pénitents Blancs Le Pastel 22 rue des Pénitents Blancs 87032 Limoges Cedex", '87032', '87'),
(u"Mme del bianco Véronique, Chargée de marché public, service es marchés publics 93130 Noisy-le-Sec", '93130', '93'),
(u"direction de la Commande Publique, à l'attention de M. le président, 379 rue Hubert Delisle B.P 437 97838 Le Tampon Cedex", '97838', '978'),
(u"M. le Directeur, Paris Bâtiment 153 93352 Paris", '93352', '93'),
(u"M. le Directeur, Paris Bâtiment 53 93352 Paris", '93352', '93'),
(u"M. le Directeur, Paris Bâtiment 3 93352 Paris", '93352', '93'),
(u"Adresse : CS 72055 56002 Vannes", '56002', '56')
]
def test_zipcode(self):
"""
Test zipcode detection
"""
for address_string, zipcode, dept_number in self.data:
address = self.address_parser.parse(address_string)
self.assertEqual(address.zipcode, zipcode)
def test_department(self):
"""
Test department detection
"""
for address_string, zipcode, dept_number in self.data:
address = self.address_parser.parse(address_string)
self.assertEqual(address.get_department(), dept_number)
class TestsUtils(unittest.TestCase):
def test_reverse_dict(self):
self.assertEqual(
reverse_dict({'key': 'value'}),
{'value': 'key'}
)
self.assertEqual(
reverse_dict({'key1': 'value1', 'key2': 'value2'})['value1'],
'key1'
)
self.assertEqual(
reverse_dict({'key1': 'value1', 'key2': 'value2'})['value2'],
'key2'
)