/[openfoncier]/branches/3.28.x/tests/base.php
ViewVC logotype

Contents of /branches/3.28.x/tests/base.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4063 - (show annotations)
Tue May 3 09:11:01 2016 UTC (8 years, 9 months ago) by softime
File size: 15938 byte(s)
* Création de la branche de la version 3.28.0.

1 <?php
2 /**
3 * Ce script contient la déclaration des classes BaseTesCase et Base2TestCase.
4 *
5 * @package openfoncier
6 * @version SVN : $Id: base.php 4802 2015-05-27 14:13:05Z nhaye $
7 */
8
9 class BaseTestCase extends PHPUnit_Extensions_SeleniumTestCase {
10
11 protected function setUp() {
12 $this->setBrowser("firefox");
13 $this->setBrowserUrl("http://localhost/");
14 //$this->setSleep(1);
15 }
16
17 protected function tearDown() {
18
19 }
20
21 protected function connect($login, $password) {
22 $this->open(BASE_PATH_URL);
23 $this->type("id=login", $login);
24 $this->type("id=password", $password);
25 $this->click("name=login.action.connect");
26 $this->waitForPageToLoad("30000");
27 }
28
29 protected function deconnect() {
30 $this->click("link=Déconnexion");
31 $this->waitForPageToLoad("30000");
32 }
33
34 protected function login($login, $password) {
35 // on commence par se connecter
36 $this->connect($login, $password);
37 // On vérifie qu'il n'y a pas d'erreur sur l'élément affiché
38 $this->verifyNoErrors();
39 // On doit être connecté
40 $this->assertTrue($this->isTextPresent("Votre session est maintenant ouverte."));
41 }
42
43 protected function logout() {
44 // puis on se déconnecte
45 $this->deconnect();
46 // On vérifie qu'il n'y a pas d'erreur sur l'élément affiché
47 $this->verifyNoErrors();
48 // on doit avoir un message nous indiquant que la session est finie
49 $this->assertTrue($this->isTextPresent("Votre session est maintenant terminée."));
50 // on ne doit plus avoir de lien de déconnexion
51 $this->assertFalse($this->isElementPresent("link=Déconnexion"));
52 }
53
54 /**
55 * Cette méthode permet de fair un assert sur la NON présence d'un message
56 * indiquant une erreur de base de données ou une notice PHP
57 */
58 public function verifyNoErrors() {
59 try {
60 $this->assertFalse($this->isTextPresent("Erreur de base de données. Contactez votre administrateur."));
61 } catch (PHPUnit_Framework_AssertionFailedError $e) {
62 array_push($this->verificationErrors, "Erreur de base de données.");
63 }
64 try {
65 $this->assertFalse($this->isTextPresent("Parse error:"));
66 } catch (PHPUnit_Framework_AssertionFailedError $e) {
67 array_push($this->verificationErrors, "PHP Parse error:");
68 }
69 try {
70 $this->assertFalse($this->isTextPresent("Fatal error:"));
71 } catch (PHPUnit_Framework_AssertionFailedError $e) {
72 array_push($this->verificationErrors, "PHP Fatal error:");
73 }
74 try {
75 $this->assertFalse($this->isTextPresent("Notice:"));
76 } catch (PHPUnit_Framework_AssertionFailedError $e) {
77 array_push($this->verificationErrors, "PHP Notice:");
78 }
79 }
80
81 }
82
83 /**
84 * Cette classe est une classe de base à utiliser par les tests (thèmes)
85 * fonctionnels utilisant Selenium2 pour avoir les méthodes communes setUp,
86 * tearDown ainsi que certaines méthodes utilitaires comme login, logout, ou
87 * verifiynoerrors...
88 */
89 class Base2TestCase extends PHPUnit_Extensions_Selenium2TestCase {
90
91 /**
92 * Url de base
93 * @var string
94 */
95 var $url = BASE_PATH_URL;
96
97 /**
98 * Chemin dossier des screenshots
99 * @var string
100 */
101 var $screenshotPath = '';
102
103 /**
104 * Option capture d'écran
105 * @var boolean
106 */
107 var $screenshotOnFailureAndError = true;
108
109 /**
110 * Cette méthode est appelée avant le lancement de chaque test
111 * (fonctionnalité).
112 */
113 protected function setUp() {
114 $this->screenshotPath = '/var/www/'.BASE_PATH_URL.'tests/results/';
115 // On positionne le navigateur
116 $this->setBrowser("firefox");
117 //$this->setBrowser("chrome");
118 // On positionne l'URL de base
119 $this->setBrowserUrl("http://localhost/");
120 $this->setPort(SELENIUM_PORT);
121 // Instancie la timezone
122 date_default_timezone_set('Europe/Paris');
123 }
124
125 /**
126 * Cette méthode est appelée après le lancement de chaque test
127 * (fonctionnalité).
128 */
129 protected function tearDown() {
130
131 // Récupère le statut
132 $status = $this->getStatus();
133 // Si l'option capture d'écran est activé et qu'il y a une erreur(error)
134 // ou un echec(failure)
135 if ($this->screenshotOnFailureAndError === true
136 && ($status == PHPUnit_Runner_BaseTestRunner::STATUS_ERROR
137 || $status == PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE)) {
138 // Si c'est une erreur
139 if ($status == PHPUnit_Runner_BaseTestRunner::STATUS_ERROR) {
140 $startFilename = "error_";
141 }
142 // Si c'est un echec
143 if ($status == PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE) {
144 $startFilename = "failure_";
145 }
146 // Nom de l'image
147 $filename = $startFilename.$this->getName()."_".date("Ymd_His").".png";
148 // Ajout de l'image
149 file_put_contents($this->screenshotPath.$filename,
150 $this->currentScreenshot());
151 }
152 }
153
154 /**
155 * Cette méthode permet de connecter l'utilisateur à l'application.
156 */
157 protected function connect($login, $password) {
158 // On ouvre l'url openexemple
159 $this->url($this->url);
160 $this->timeouts()->implicitWait(2000);
161 // On saisit le login dans le champ login
162 $this->byId("login")->clear();
163 $this->byId("login")->value($login);
164 // On saisit le mot de passe dans le champ mot de passe
165 $this->byId("password")->clear();
166 $this->byId("password")->value($password);
167 // On clique sur le bouton de connexion
168 $this->byname("login.action.connect")->click();
169 }
170
171 /**
172 * Cette méthode permet de déconnecter l'utilisateur.
173 */
174 protected function deconnect() {
175 // On clique sur le lien de déconnexion
176 $element = $this->bycssselector("a.actions-logout");
177 $element->click();
178 }
179
180 /**
181 * Cette méthode permet de connecter l'utilisateur à l'application et de
182 * vérifier que la connecion s'est bien déroulée.
183 */
184 protected function login($login, $password) {
185 // On se connecte
186 $this->connect($login, $password);
187 // Allonge le temps d'attente lors de la recherche d'élément
188 $this->timeouts()->implicitWait(10000);
189 // On vérifie qu'il n'y a pas d'erreur sur l'élément affiché
190 $this->verifynoerrors();
191 // On vérifie qu'un message nous indique que la session est ouverte
192 $element = $this->bycssselector("div.message span.text");
193 $this->assertequals("Votre session est maintenant ouverte.", $element->text());
194 }
195
196 /**
197 * Cette méthode vérifier que la déconnexion s'est bien déroulée.
198 */
199 protected function verifyDeconnect() {
200 // Réduit le temps d'attente lors de la recherche d'élément
201 $this->timeouts()->implicitWait(240);
202 // On vérifie qu'il n'y a pas d'erreur sur l'élément affiché
203 $this->verifynoerrors();
204 // On vérifie qu'un message nous indique que la session est terminée
205 $element = $this->bycssselector("div.message span.text");
206 $this->assertequals("Votre session est maintenant terminée.", $element->text());
207 // On vérifie que le lien de déconnexion n'est pas présent
208 try {
209 $el = $this->bycssselector("a.actions-logout");
210 $this->fail("The element shouldn't exist.");
211 } catch (RuntimeException $e) {}
212 //Ferme la fenêtre
213 $this->closeWindow();
214 }
215
216 /**
217 * Cette méthode permet de déconnecter l'utilisateur et de vérifier que la
218 * déconnexion s'est bien déroulée.
219 */
220 protected function logout() {
221 // On se déconnecte
222 $this->deconnect();
223 // On vérifie que la déconnexion s'est bien déroulée
224 $this->verifyDeconnect();
225 }
226
227 /**
228 * Cette méthode permet de fair un assert sur la NON présence d'un message
229 * indiquant une erreur de base de données ou une notice PHP.
230 * XXX Remplacer les tests par des expressions régulières pour améliorer
231 * les performances et être plus exhaustif
232 */
233 public function verifynoerrors() {
234 // On récupère le contenu du rendu de la page
235 $source = $this->source();
236 // On vérifie la présence du message d'erreur de base de données
237 try {
238 $this->assertNotContains("Erreur de base de données. Contactez votre administrateur.", $source);
239 $this->assertNotContains("Erreur de base de donnees. Contactez votre administrateur.", $source);
240 } catch (PHPUnit_Framework_AssertionFailedError $e) {
241 $this->fail("Failed asserting that the source does not contain \"Erreur de base de données\".");
242 }
243 // On vérifie la présence d'une erreur fatale PHP
244 try {
245 $this->assertNotContains("Fatal error:", $source);
246 } catch (PHPUnit_Framework_AssertionFailedError $e) {
247 $this->fail("Failed asserting that the source does not contain \"PHP Fatal error:\".");
248 }
249 // On vérifie la présence d'une erreur fatale PHP
250 try {
251 $this->assertNotContains("<b>Fatal error</b>", $source);
252 } catch (PHPUnit_Framework_AssertionFailedError $e) {
253 $this->fail("Failed asserting that the source does not contain \"PHP Fatal error:\".");
254 }
255 // On vérifie la présence d'une erreur de syntaxe PHP
256 try {
257 $this->assertNotContains("Parse error:", $source);
258 } catch (PHPUnit_Framework_AssertionFailedError $e) {
259 $this->fail("Failed asserting that the source does not contain \"PHP Parse error:\".");
260 }
261 // On vérifie la présence d'une erreur de syntaxe PHP
262 try {
263 $this->assertNotContains("<b>Parse error</b>", $source);
264 } catch (PHPUnit_Framework_AssertionFailedError $e) {
265 $this->fail("Failed asserting that the source does not contain \"PHP Parse error:\".");
266 }
267 // On vérifie la présence d'une notice PHP
268 try {
269 $this->assertNotContains("Notice:", $source);
270 } catch (PHPUnit_Framework_AssertionFailedError $e) {
271 $this->fail("Failed asserting that the source does not contain \"PHP Notice:\".");
272 }
273 // On vérifie la présence d'une notice PHP
274 try {
275 $this->assertNotContains("<b>Notice</b>", $source);
276 } catch (PHPUnit_Framework_AssertionFailedError $e) {
277 $this->fail("Failed asserting that the source does not contain \"PHP Notice:\".");
278 }
279 }
280
281 /**
282 * Cette fonction permet de cliquer sur le menu si celui-ci n'est pas déjà
283 * ouvert de base en fonction de l'utilisateur
284 * @param string $menu Titre du menu
285 * @param array $utilisateur Login et mdp de l'utilisateur
286 */
287 public function openMenu($menu, $utilisateur) {
288 // Si le menu est 'Guichet Unique'
289 if ($menu == 'Guichet Unique') {
290 // Vérifie les utilisateurs
291 if ($utilisateur["login"] != "guichet") {
292 // Clique sur le menu
293 $this->byLinkText($menu)->click();
294 $this->verifyNoErrors();
295 }
296 }
297 // Si le menu est 'Instruction'
298 if ($menu == 'Instruction') {
299 // Vérifie les utilisateurs
300 if ($utilisateur["login"] != "instr"
301 && $utilisateur["login"] != "visudadi"
302 && $utilisateur["login"] != "divi"
303 && $utilisateur["login"] != "chef"
304 && $utilisateur["login"] != "adminfonct") {
305 // Clique sur le menu
306 $this->byLinkText($menu)->click();
307 $this->verifyNoErrors();
308 }
309 }
310 // Si le menu est 'Suivi'
311 if ($menu == 'Suivi') {
312 // Vérifie les utilisateurs
313 if ($utilisateur["login"] != "suivi") {
314 // Clique sur le menu
315 $this->byLinkText($menu)->click();
316 $this->verifyNoErrors();
317 }
318 }
319 // Si le menu est 'Demandes D'avis'
320 if ($menu == "Demandes D'avis") {
321 // Vérifie les utilisateurs
322 if ($utilisateur["login"] != "consu"
323 && $utilisateur["login"] != "consu1"
324 && $utilisateur["login"] != "consu2") {
325 // Clique sur le menu
326 $this->byLinkText($menu)->click();
327 $this->verifyNoErrors();
328 }
329 }
330 }
331
332 /**
333 * COPIE DE LA FONCTION mois_date() DE LA CLASSE utils
334 */
335 /**
336 * Calcule uen date avec l'ajout ou le soustrait de mois.
337 * @param date $date Date de base
338 * @param integer $delay Délais à ajouter (en mois)
339 * @param string $operator Opérateur pour le calcul ("-" ou "+")
340 *
341 * @return date Date calculée
342 */
343 function mois_date($date, $delay, $operator = "+") {
344
345 // Découpage de la date
346 $temp = explode("-", $date);
347 $day = (int) $temp[2];
348 $month = (int) $temp[1];
349 $year = (int) $temp[0];
350
351 // Si c'est une addition
352 if ($operator == '+') {
353 // Année à ajouter
354 $year += floor($delay / 12);
355 // Mois restant
356 $nb_month = ($delay % 12);
357 // S'il y a des mois restant
358 if ($nb_month != 0) {
359 // Ajout des mois restant
360 $month += $nb_month;
361 // Si ça dépasse le mois 12 (décembre)
362 if ($month > 12) {
363 // Soustrait 12 au mois
364 $month -= 12;
365 // Ajoute 1 à l'année
366 $year += 1;
367 }
368 }
369 }
370
371 // Si c'est une soustraction
372 if ($operator == "-") {
373 // Année à soustraire
374 $year -= floor($delay / 12);
375 // Mois restant
376 $nb_month = ($delay % 12);
377 // S'il y a des mois restant
378 if ($nb_month != 0) {
379 // Soustrait le délais
380 $month -= $nb_month;
381 // Si ça dépasse le mois 1 (janvier)
382 if ($month < 1) {
383 // Soustrait 12 au mois
384 $month += 12;
385 // Ajoute 1 à l'année
386 $year -= 1;
387 }
388 }
389 }
390
391 // Calcul du nombre de jours dans le mois sélectionné
392 switch($month) {
393 // Mois de février
394 case "2":
395 if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) {
396 $day_max = 29;
397 } else {
398 $day_max = 28;
399 }
400 break;
401 // Mois d'avril, juin, septembre et novembre
402 case "4":
403 case "6":
404 case "9":
405 case "11":
406 $day_max = 30;
407 break;
408 // Mois de janvier, mars, mai, juillet, août, octobre et décembre
409 default:
410 $day_max = 31;
411 }
412
413 // Si le jour est supérieur au jour maximum du mois
414 if ($day > $day_max) {
415 // Le jour devient le jour maximum
416 $day = $day_max;
417 }
418
419 // Compléte le mois et le jour par un 0 à gauche si c'est un chiffre
420 $month = str_pad($month, 2, "0", STR_PAD_LEFT);
421 $day = str_pad($day, 2, "0", STR_PAD_LEFT);
422
423 // Retourne la date calculée
424 return $year."-".$month."-".$day ;
425 }
426
427 }
428
429 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26