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

Annotation of /trunk/tests/base.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2740 - (hide annotations)
Fri Feb 14 16:41:21 2014 UTC (10 years, 11 months ago) by softime
File size: 12969 byte(s)
- Correction des tests.
- Ajout du set de la timezone dans les setUp
1 fmichon 1649 <?php
2     /**
3 fmichon 2258 * Ce script contient la déclaration des classes BaseTesCase et Base2TestCase.
4 fmichon 1649 *
5     * @package openfoncier
6     * @version SVN : $Id$
7     */
8    
9 fmichon 1654 class BaseTestCase extends PHPUnit_Extensions_SeleniumTestCase {
10 fmichon 1649
11     protected function setUp() {
12     $this->setBrowser("firefox");
13 fmichon 1654 $this->setBrowserUrl("http://localhost/");
14 fmichon 2218 //$this->setSleep(1);
15 fmichon 1649 }
16    
17     protected function tearDown() {
18    
19     }
20    
21     protected function connect($login, $password) {
22 fmichon 2174 $this->open("openads/");
23 fmichon 1649 $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 fmichon 1727 protected function login($login, $password) {
35     // on commence par se connecter
36     $this->connect($login, $password);
37 fmichon 1816 // On vérifie qu'il n'y a pas d'erreur sur l'élément affiché
38     $this->verifyNoErrors();
39 fmichon 1727 // 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 fmichon 1816 // On vérifie qu'il n'y a pas d'erreur sur l'élément affiché
47     $this->verifyNoErrors();
48 fmichon 1727 // 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 fmichon 1674 /**
55     * Cette méthode permet de fair un assert sur la NON présence d'un message
56 fmichon 1719 * indiquant une erreur de base de données ou une notice PHP
57 fmichon 1674 */
58 fmichon 1719 public function verifyNoErrors() {
59 fmichon 1674 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 fmichon 1719 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 fmichon 1674 }
80    
81 fmichon 1649 }
82    
83 softime 1990 /**
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 fmichon 2329 * Url de base
93     * @var string
94     */
95     var $url = "openads/";
96    
97     /**
98 softime 2416 * Chemin dossier des screenshots
99     * @var string
100     */
101 mbroquet 2708 var $screenshotPath = '/var/www/openads/tests/results/';
102 softime 2416
103     /**
104     * Option capture d'écran
105     * @var boolean
106     */
107     var $screenshotOnFailureAndError = true;
108    
109     /**
110 softime 1990 * Cette méthode est appelée avant le lancement de chaque test
111     * (fonctionnalité).
112     */
113 fmichon 2258 protected function setUp() {
114 softime 1990 // 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 softime 2740 // Instancie la timezone
120     date_default_timezone_set('Europe/Paris');
121 softime 1990 }
122    
123     /**
124     * Cette méthode est appelée après le lancement de chaque test
125     * (fonctionnalité).
126     */
127     protected function tearDown() {
128 softime 2416
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 softime 1990 }
151    
152     /**
153 fmichon 2258 * Cette méthode permet de connecter l'utilisateur à l'application.
154 softime 1990 */
155     protected function connect($login, $password) {
156     // On ouvre l'url openexemple
157 fmichon 2329 $this->url($this->url);
158 softime 1990 // 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 fmichon 2258 * Cette méthode permet de déconnecter l'utilisateur.
168 softime 1990 */
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 fmichon 2181 // 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 softime 1990 }
190    
191     /**
192 softime 2605 * Cette méthode vérifier que la déconnexion s'est bien déroulée.
193 softime 1990 */
194 softime 2605 protected function verifyDeconnect() {
195 fmichon 2181 // Réduit le temps d'attente lors de la recherche d'élément
196 fmichon 2258 $this->timeouts()->implicitWait(240);
197 fmichon 2181 // 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 softime 1990 //Ferme la fenêtre
208     $this->closeWindow();
209     }
210    
211     /**
212 softime 2605 * 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 softime 1990 * 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 fmichon 2181 * XXX Remplacer les tests par des expressions régulières pour améliorer
226     * les performances et être plus exhaustif
227 softime 1990 */
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 fmichon 2258 $this->assertNotContains("Erreur de base de donnees. Contactez votre administrateur.", $source);
235 softime 1990 } 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 fmichon 2181 // 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 softime 1990 // 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 fmichon 2181 // 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 softime 1990 // 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 fmichon 2181 // 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 softime 1990 }
275    
276     /**
277 softime 2605 * 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 softime 2740 && $utilisateur["login"] != "visudadi"
297     && $utilisateur["login"] != "divi"
298     && $utilisateur["login"] != "chef"
299     && $utilisateur["login"] != "adminfonct") {
300 softime 2605 // 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 softime 2740 && $utilisateur["login"] != "consu1"
319     && $utilisateur["login"] != "consu2") {
320 softime 2605 // Clique sur le menu
321     $this->byLinkText($menu)->click();
322     $this->verifyNoErrors();
323     }
324     }
325     }
326    
327     /**
328 softime 1990 * Cette méthode est un test (fonctionnalité) qui permet de tester le
329     * fonctionnement de la classe Base2TestCase
330     */
331     //public function test_login_logout() {
332     // // On se connecte avec l'utilisateur admin
333     // $this->login("admin", "admin");
334     // // On se déconnecte
335     // $this->logout();
336     //}
337    
338     }
339    
340 fmichon 1649 ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26