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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3343 - (show annotations)
Thu Mar 19 17:34:18 2015 UTC (9 years, 10 months ago) by vpihour
File size: 15805 byte(s)
Ajout de la branche

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

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26