/[openfoncier]/branches/merge_tests_suppression_fichiers/tests/base.php
ViewVC logotype

Contents of /branches/merge_tests_suppression_fichiers/tests/base.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4339 - (show annotations)
Fri May 27 11:47:37 2016 UTC (8 years, 8 months ago) by jymadier
File size: 13205 byte(s)
* Rebase

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26