/[openfoncier]/3.35.x/tests/base.php
ViewVC logotype

Annotation of /3.35.x/tests/base.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5592 - (hide annotations)
Fri Dec 23 12:03:25 2016 UTC (8 years, 1 month ago) by softime
File size: 13205 byte(s)
* Branche de développement pour la version 3.35.x.

1 mbroquet 3730 <?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