/[openfoncier]/trunk/tests/testImportSpecific.php
ViewVC logotype

Contents of /trunk/tests/testImportSpecific.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3730 - (show annotations)
Fri Mar 18 11:50:26 2016 UTC (8 years, 10 months ago) by mbroquet
File size: 12433 byte(s)
Actualisation du trunk
1 <?php
2 /**
3 * Ce fichier regroupe les tests unitaires de l'import spécifique de CSV
4 *
5 * @package openfoncier
6 * @version SVN : $Id$
7 */
8 require_once "../obj/utils.class.php";
9 require_once "../obj/import_specific.class.php";
10 /**
11 * Tests unitaires des contrôles et manipulations des données récupérées
12 * depuis le fichier CSV;
13 */
14 class ImportSpecific extends PHPUnit_Framework_TestCase {
15
16 /**
17 * Méthode lancée en début de chaque test case
18 */
19 public function setUp() {
20 // Instancie la timezone
21 date_default_timezone_set('Europe/Paris');
22 echo ' = '.get_class().'.'.str_replace('test_', '', $this->getName())."\r\n";
23 $this->init_data_test();
24 // Instance de la classe Utils
25 require_once "../obj/utils.class.php";
26 $_SESSION['collectivite'] = 1;
27 $_SESSION['login'] = "admin";
28 $_SERVER['REQUEST_URI'] = "";
29 $f = new utils("nohtml");
30 // Instancie la classe à tester
31 $this->inst = new import_specific();
32 $this->inst->f = $f;
33
34 }
35
36 public function onNotSuccessfulTest(Exception $e){
37 echo 'Line '.$e->getLine().' : '.$e->getMessage()."\r\n";
38 parent::onNotSuccessfulTest($e);
39 }
40
41 /**
42 * Jeu de données : deux tableaux pour chaque test :
43 * colonnes et valeurs.
44 *
45 * Les colonnes sont commentées par un exemple du CSV comme suit :
46 * COL (débute à 0) - Libellé header
47 */
48 function init_data_test() {
49
50 // check_required()
51 $this->required_column = array(
52 // COL 0 - Type
53 "type" => array(
54 "require" => true,
55 "header" => "Type",
56 ),
57 // COL 1 - Numéro
58 "numero" => array(
59 "require" => true,
60 "header" => "Numero",
61 ),
62 // COL 5 - INSEE
63 "insee" => array(
64 "require" => false,
65 "header" => "INSEE",
66 ),
67 );
68 $this->required_row_data = array(
69 "type" => "",
70 "numero" => "10",
71 "insee" => "",
72 );
73
74 // check_type()
75 $this->type_column = array(
76 // COL 38 - Date envoi demande de pièces
77 0 => array(
78 "type" => "date",
79 "header" => "Date envoi demande de pieces",
80 ),
81 1 => array(
82 "type" => "date",
83 "header" => "Date envoi demande de pieces",
84 ),
85 // COL 8 - Projet
86 2 => array(
87 "type" => "string",
88 "header" => "Projet",
89 ),
90 3 => array(
91 "type" => "string",
92 "header" => "Projet",
93 ),
94 // COL 10 - Nb logements
95 4 => array(
96 "type" => "integer",
97 "header" => "Nb logements",
98 ),
99 5 => array(
100 "type" => "integer",
101 "header" => "Nb logements",
102 ),
103 6 => array(
104 "type" => "integer",
105 "header" => "Nb logements",
106 ),
107 // COL 11 - Surface terrain
108 7 => array(
109 "type" => "float",
110 "header" => "Surface terrain",
111 ),
112 8 => array(
113 "type" => "float",
114 "header" => "Surface terrain",
115 ),
116 // COL 24 - Lotissement
117 9 => array(
118 "type" => "boolean",
119 "header" => "Lotissement",
120 ),
121 10 => array(
122 "type" => "boolean",
123 "header" => "Lotissement",
124 ),
125 );
126 $this->type_row_data = array(
127 0 => "10/10/2015",
128 1 => "101/5/2015",
129 2 => "chaîne valide",
130 4 => "50",
131 5 => "50a",
132 6 => "50,5",
133 7 => "50,5",
134 8 => "50a",
135 9 => "Oui",
136 10 => "true",
137 );
138
139 $this->type_return_expected = array(
140 // Cas 1 : date valide
141 0 =>true,
142 // Cas 2 : date invalide
143 1 =>false,
144 // Cas 3 : chaîne de caractères valide
145 2 =>true,
146 // Cas 5 : nombre entier valide
147 4 =>true,
148 // Cas 6 : nombre entier invalide
149 5 =>false,
150 // Cas 7 : nombre entier invalide
151 6 =>false,
152 // Cas 8 : nombre décimal valide
153 7 =>true,
154 // Cas 9 : nombre décimal invalide
155 8 =>false,
156 // Cas 10 : booléen valide
157 9 =>true,
158 // Cas 11 : booléen invalide
159 10 =>false
160 );
161
162 // check_foreign_key()
163 $this->fk_column = array(
164 // COL 0 - Type
165 0 => array(
166 "foreign_key" => array(
167 "sql"=>"SELECT dossier_autorisation_type_detaille FROM openads.dossier_autorisation_type_detaille WHERE code ='<value>'",
168 "table" => "dossier_autorisation_type_detaille",
169 "field" => "code",
170 ),
171 "header" => "Type",
172 ),
173 1 => array(
174 "foreign_key" => array(
175 "sql"=>"SELECT dossier_autorisation_type_detaille FROM openads.dossier_autorisation_type_detaille WHERE code ='<value>'",
176 "table" => "dossier_autorisation_type_detaille",
177 "field" => "code",
178 ),
179 "header" => "Type",
180 ),
181 );
182 $this->fk_row_data = array(
183 0 => "PCI",
184 1 => "lambda",
185 );
186
187 // set_linked_value()
188 $this->linked_values_column = array(
189 // COL 0 - Type
190 0 => array(
191 "link" => array(
192 "PC MI" => "PI",
193 ),
194 "header" => "Type",
195 ),
196 1 => array(
197 "link" => array(
198 "PC MI" => "PI",
199 ),
200 "header" => "Type",
201 ),
202 );
203 $this->linked_values_row_data = array(
204 0 => "PCI",
205 1 => "PC MI",
206 );
207 }
208
209 /**
210 * Teste la méthode check_required() de la classe import_specific.
211 * Est-ce qu'il y a une valeur si champ obligatoire ?
212 *
213 * @param $key [integer] colonne du fichier CSV
214 * @param $value [string] valeur à tester
215 * @return [string] message d'erreur ou chaîne vide si succès
216 */
217 public function test_check_required() {
218 // Message d'erreur
219 $error = _("La colonne %s est obligatoire");
220 // Utilisation du jeu de données
221 $this->inst->column = $this->required_column;
222 $this->inst->line = $this->required_row_data;
223 // Cas 1 : champ requis vide
224 $ret = $this->inst->check_required("type");
225 $this->assertEquals($ret, false);
226 // Cas 2 : champ requis renseigné
227 $ret = $this->inst->check_required("numero");
228 $this->assertEquals($ret, true);
229 // Cas 3 : champ non requis vide
230 $ret = $this->inst->check_required("insee");
231 $this->assertEquals($ret, true);
232 }
233
234 /**
235 * Teste la méthode check_type() de la classe import_specific.
236 * Est-ce que la valeur est valide pour le type attendu ?
237 *
238 * @param $key [integer] colonne du fichier CSV
239 * @param $value [string] valeur à tester
240 * @return [string] message d'erreur ou chaîne vide si succès
241 */
242 public function test_check_type() {
243
244 // Utilisation du jeu de données
245 $this->inst->column = $this->type_column;
246 $this->inst->line = $this->type_row_data;
247 // Définition des résultats attendus
248 $this->type_return_expected;
249 // Pour chaque colonne testée
250 foreach ($this->inst->line as $key => $value) {
251 // Vérification du retour de la méthode
252 $this->assertEquals(
253 $this->inst->check_type($key),
254 $this->type_return_expected[$key]
255 );
256 }
257 }
258
259 /**
260 * Teste la méthode get_foreign_key_id() de la classe import_specific.
261 * Est-ce que la clé étrangère existe ?
262 *
263 * @param $key [integer] colonne du fichier CSV
264 * @return [string] message d'erreur ou chaîne vide si succès
265 */
266 public function test_get_foreign_key_id() {
267
268 // Utilisation du jeu de données
269 $this->inst->column = $this->fk_column;
270 $this->inst->line = $this->fk_row_data;
271 // Cas 1 : clé étrangère valide
272 $ret = $this->inst->get_foreign_key_id(0);
273 $this->assertEquals($ret, true);
274 // Cas 2 : clé étrangère invalide
275 $ret = $this->inst->get_foreign_key_id(1);
276 $this->assertEquals($ret, false);
277 }
278
279 /**
280 * Teste la méthode explode_address() de la classe import_specific.
281 * Doit retourner un tableau d'éléments composant l'adresse fournie.
282 *
283 * @param $value [string] adresse complète
284 * @return [array] tableau (numéro, rue, CP, ville, ...)
285 */
286 public function test_explode_address() {
287 // Cas 1 : adresse 'normale' à transformer
288 $adresse_complete1 = "27 bis Avenue Jules Cantini 13008 Marseille France";
289 // Récupération de la transformation
290 $adresse_triee1 = $this->inst->explode_address($adresse_complete1);
291 // Vérification des éléments
292 $this->assertEquals($adresse_triee1['numero'], '27');
293 $this->assertEquals($adresse_triee1['voie'], 'bis Avenue Jules Cantini');
294 $this->assertEquals($adresse_triee1['complement1'], '');
295 $this->assertEquals($adresse_triee1['complement2'], '');
296 $this->assertEquals($adresse_triee1['cp'], '13008');
297 $this->assertEquals($adresse_triee1['ville'], 'Marseille');
298 // Cas 2 : adresse longue (libellée voie supérieur à 30 caractères)
299 $adresse_complete2 = "27 bis Avenue Jules Cantini Boulevard de la Blancarde 06001 Nice";
300 // Récupération de la transformation
301 $adresse_triee2 = $this->inst->explode_address($adresse_complete2);
302 // Vérification des éléments
303 $this->assertEquals($adresse_triee2['numero'], '27');
304 $this->assertEquals($adresse_triee2['voie'], 'bis Avenue Jules Cantini');
305 $this->assertEquals($adresse_triee2['complement1'], 'Boulevard de la Blancarde');
306 $this->assertEquals($adresse_triee2['complement2'], '');
307 $this->assertEquals($adresse_triee2['cp'], '06001');
308 $this->assertEquals($adresse_triee2['ville'], 'Nice');
309 // Cas 3 : adresse très longue (libellée voie supérieur à 60 caractères)
310 // Numéro composé suivi d'une virgule
311 $adresse_complete3 = "11-12, Place des grands hommes Boulevard du Panthéon Route de Paris 13380 Plan de Cuques";
312 // Récupération de la transformation
313 $adresse_triee3 = $this->inst->explode_address($adresse_complete3);
314 // Vérification des éléments
315 $this->assertEquals($adresse_triee3['numero'], '11-12');
316 $this->assertEquals($adresse_triee3['voie'], 'Place des grands hommes');
317 $this->assertEquals($adresse_triee3['complement1'], 'Boulevard du Panthéon Route');
318 $this->assertEquals($adresse_triee3['complement2'], 'de Paris');
319 $this->assertEquals($adresse_triee3['cp'], '13380');
320 $this->assertEquals($adresse_triee3['ville'], 'Plan de Cuques');
321 }
322
323 /**
324 * Teste la méthode set_linked_value() qui subsitue les valeurs du CSV
325 * par le paramétrage.
326 *
327 * @param $key [integer] colonne du fichier CSV
328 * @return [void]
329 */
330 function test_set_linked_value(){
331 // Utilisation du jeu de données
332 $this->inst->column = $this->linked_values_column;
333 $this->inst->line = $this->linked_values_row_data;
334 // Cas 1 : aucune correspondance
335 // PCI reste PCI
336 $this->inst->set_linked_value(0);
337 $this->assertEquals($this->inst->line[0], "PCI");
338 // Cas 2 : existance d'une correspondance
339 // PC MI devient PI
340 $this->inst->set_linked_value(1);
341 $this->assertEquals($this->inst->line[1], "PI");
342 }
343 }
344
345 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26