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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1719 by fmichon, Thu Apr 18 10:45:27 2013 UTC revision 2416 by softime, Thu Oct 17 16:48:51 2013 UTC
# Line 1  Line 1 
1  <?php  <?php
2  /**  /**
3   *   * Ce script contient la déclaration des classes BaseTesCase et Base2TestCase.
4   *   *
5   * @package openfoncier   * @package openfoncier
6   * @version SVN : $Id$   * @version SVN : $Id$
# Line 11  class BaseTestCase extends PHPUnit_Exten Line 11  class BaseTestCase extends PHPUnit_Exten
11      protected function setUp() {      protected function setUp() {
12          $this->setBrowser("firefox");          $this->setBrowser("firefox");
13          $this->setBrowserUrl("http://localhost/");          $this->setBrowserUrl("http://localhost/");
14          // $this->setSleep(1);          //$this->setSleep(1);
15      }      }
16    
17      protected function tearDown() {      protected function tearDown() {
# Line 19  class BaseTestCase extends PHPUnit_Exten Line 19  class BaseTestCase extends PHPUnit_Exten
19      }      }
20    
21      protected function connect($login, $password) {      protected function connect($login, $password) {
22          $this->open("openfoncier/");          $this->open("openads/");
23          $this->type("id=login", $login);          $this->type("id=login", $login);
24          $this->type("id=password", $password);          $this->type("id=password", $password);
25          $this->click("name=login.action.connect");          $this->click("name=login.action.connect");
# Line 31  class BaseTestCase extends PHPUnit_Exten Line 31  class BaseTestCase extends PHPUnit_Exten
31          $this->waitForPageToLoad("30000");          $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       * 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       * indiquant une erreur de base de données ou une notice PHP
# Line 60  class BaseTestCase extends PHPUnit_Exten Line 80  class BaseTestCase extends PHPUnit_Exten
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/screenshots/';
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        }
120    
121        /**
122         * Cette méthode est appelée après le lancement de chaque test
123         * (fonctionnalité).
124         */
125        protected function tearDown() {
126    
127            // Récupère le statut
128            $status = $this->getStatus();
129            // Si l'option capture d'écran est activé et qu'il y a une erreur(error)
130            // ou un echec(failure)
131            if ($this->screenshotOnFailureAndError === true
132                && ($status == PHPUnit_Runner_BaseTestRunner::STATUS_ERROR
133                    || $status == PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE)) {
134                // Si c'est une erreur
135                if ($status == PHPUnit_Runner_BaseTestRunner::STATUS_ERROR) {
136                    $startFilename = "error_";
137                }
138                // Si c'est un echec
139                if ($status == PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE) {
140                    $startFilename = "failure_";
141                }
142                // Nom de l'image
143                $filename = $startFilename.$this->getName()."_".date("Ymd_His").".png";
144                // Ajout de l'image
145                file_put_contents($this->screenshotPath.$filename,
146                    $this->currentScreenshot());
147            }
148        }
149    
150        /**
151         * Cette méthode permet de connecter l'utilisateur à l'application.
152         */
153        protected function connect($login, $password) {
154            // On ouvre l'url openexemple
155            $this->url($this->url);
156            // On saisit le login dans le champ login
157            $this->byName("login")->value($login);
158            // On saisit le mot de passe dans le champ mot de passe
159            $this->byName("password")->value($password);
160            // On clique sur le bouton de connexion
161            $this->byname("login.action.connect")->click();
162        }
163    
164        /**
165         * Cette méthode permet de déconnecter l'utilisateur.
166         */
167        protected function deconnect() {
168            // On clique sur le lien de déconnexion
169            $element = $this->bycssselector("a.actions-logout");
170            $element->click();
171        }
172    
173        /**
174         * Cette méthode permet de connecter l'utilisateur à l'application et de
175         * vérifier que la connecion s'est bien déroulée.
176         */
177        protected function login($login, $password) {
178            // On se connecte
179            $this->connect($login,  $password);
180            // Allonge le temps d'attente lors de la recherche d'élément
181            $this->timeouts()->implicitWait(10000);
182            // On vérifie qu'il n'y a pas d'erreur sur l'élément affiché
183            $this->verifynoerrors();
184            // On vérifie qu'un message nous indique que la session est ouverte
185            $element = $this->bycssselector("div.message span.text");
186            $this->assertequals("Votre session est maintenant ouverte.", $element->text());
187        }
188    
189        /**
190         * Cette méthode permet de déconnecter l'utilisateur et de vérifier que la
191         * déconnexion s'est bien déroulée.
192         */
193        protected function logout() {
194            // On se déconnecte
195            $this->deconnect();
196            // Réduit le temps d'attente lors de la recherche d'élément
197            $this->timeouts()->implicitWait(240);
198            // On vérifie qu'il n'y a pas d'erreur sur l'élément affiché
199            $this->verifynoerrors();
200            // On vérifie qu'un message nous indique que la session est terminée
201            $element = $this->bycssselector("div.message span.text");
202            $this->assertequals("Votre session est maintenant terminée.", $element->text());
203            // On vérifie que le lien de déconnexion n'est pas présent
204            try {
205                $el = $this->bycssselector("a.actions-logout");
206                $this->fail("The element shouldn't exist.");
207            } catch (RuntimeException $e) {}
208            //Ferme la fenêtre
209            $this->closeWindow();
210        }
211    
212        /**
213         * Cette méthode permet de fair un assert sur la NON présence d'un message
214         * indiquant une erreur de base de données ou une notice PHP.
215         * XXX Remplacer les tests par des expressions régulières pour améliorer
216         *     les performances et être plus exhaustif
217         */
218        public function verifynoerrors() {
219            // On récupère le contenu du rendu de la page
220            $source = $this->source();
221            // On vérifie la présence du message d'erreur de base de données
222            try {
223                $this->assertNotContains("Erreur de base de données. Contactez votre administrateur.", $source);
224                $this->assertNotContains("Erreur de base de donnees. Contactez votre administrateur.", $source);
225            } catch (PHPUnit_Framework_AssertionFailedError $e) {
226                $this->fail("Failed asserting that the source does not contain \"Erreur de base de données\".");
227            }
228            // On vérifie la présence d'une erreur fatale PHP
229            try {
230                $this->assertNotContains("Fatal error:", $source);
231            } catch (PHPUnit_Framework_AssertionFailedError $e) {
232                $this->fail("Failed asserting that the source does not contain \"PHP Fatal error:\".");
233            }
234            // On vérifie la présence d'une erreur fatale PHP
235            try {
236                $this->assertNotContains("<b>Fatal error</b>", $source);
237            } catch (PHPUnit_Framework_AssertionFailedError $e) {
238                $this->fail("Failed asserting that the source does not contain \"PHP Fatal error:\".");
239            }
240            // On vérifie la présence d'une erreur de syntaxe PHP
241            try {
242                $this->assertNotContains("Parse error:", $source);
243            } catch (PHPUnit_Framework_AssertionFailedError $e) {
244                $this->fail("Failed asserting that the source does not contain \"PHP Parse error:\".");
245            }
246            // On vérifie la présence d'une erreur de syntaxe PHP
247            try {
248                $this->assertNotContains("<b>Parse error</b>", $source);
249            } catch (PHPUnit_Framework_AssertionFailedError $e) {
250                $this->fail("Failed asserting that the source does not contain \"PHP Parse error:\".");
251            }
252            // On vérifie la présence d'une notice PHP
253            try {
254                $this->assertNotContains("Notice:", $source);
255            } catch (PHPUnit_Framework_AssertionFailedError $e) {
256                $this->fail("Failed asserting that the source does not contain \"PHP Notice:\".");
257            }
258            // On vérifie la présence d'une notice PHP
259            try {
260                $this->assertNotContains("<b>Notice</b>", $source);
261            } catch (PHPUnit_Framework_AssertionFailedError $e) {
262                $this->fail("Failed asserting that the source does not contain \"PHP Notice:\".");
263            }
264        }
265    
266        /**
267         * Cette méthode est un test (fonctionnalité) qui permet de tester le
268         * fonctionnement de la classe Base2TestCase
269         */
270        //public function test_login_logout() {
271        //    // On se connecte avec l'utilisateur admin
272        //    $this->login("admin", "admin");
273        //    // On se déconnecte
274        //    $this->logout();
275        //}
276    
277    }
278    
279  ?>  ?>

Legend:
Removed from v.1719  
changed lines
  Added in v.2416

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26