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

Contents of /trunk/tests/base.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2786 - (show annotations)
Tue Mar 4 15:37:20 2014 UTC (10 years, 11 months ago) by softime
File size: 15681 byte(s)
Correctiond e la fonction mois_date() + ajout de test unitaire sur cette fonction

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

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26