1 |
fmichon |
1649 |
<?php |
2 |
|
|
/** |
3 |
|
|
* |
4 |
|
|
* |
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 |
softime |
1990 |
$this->setSleep(1); |
15 |
fmichon |
1649 |
} |
16 |
|
|
|
17 |
|
|
protected function tearDown() { |
18 |
|
|
|
19 |
|
|
} |
20 |
|
|
|
21 |
|
|
protected function connect($login, $password) { |
22 |
fmichon |
1654 |
$this->open("openfoncier/"); |
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 |
|
|
* Cette méthode est appelée avant le lancement de chaque test |
93 |
|
|
* (fonctionnalité). |
94 |
|
|
*/ |
95 |
|
|
protected function setUp() { |
96 |
|
|
// On positionne le navigateur |
97 |
|
|
$this->setBrowser("firefox"); |
98 |
|
|
//$this->setBrowser("chrome"); |
99 |
|
|
// On positionne l'URL de base |
100 |
|
|
$this->setBrowserUrl("http://localhost/"); |
101 |
|
|
} |
102 |
|
|
|
103 |
|
|
/** |
104 |
|
|
* Cette méthode est appelée après le lancement de chaque test |
105 |
|
|
* (fonctionnalité). |
106 |
|
|
*/ |
107 |
|
|
protected function tearDown() { |
108 |
|
|
// |
109 |
|
|
|
110 |
|
|
} |
111 |
|
|
|
112 |
|
|
/** |
113 |
|
|
* Cette méthode permet de connecter l'utilisateur à l'application et de |
114 |
|
|
* vérifier que la connecion s'est bien déroulée. |
115 |
|
|
*/ |
116 |
|
|
protected function connect($login, $password) { |
117 |
|
|
// On ouvre l'url openexemple |
118 |
softime |
2008 |
$this->url("openfoncier/"); |
119 |
softime |
1990 |
// On vérifie que le titre de la page HTML est le bon |
120 |
|
|
$this->assertequals(":: openMairie :: openADS", $this->title()); |
121 |
|
|
// On vérifie qu'il n'y a pas d'erreur sur l'élément affiché |
122 |
|
|
$this->verifynoerrors(); |
123 |
|
|
// On saisit le login dans le champ login |
124 |
|
|
$this->byName("login")->value($login); |
125 |
|
|
// On saisit le mot de passe dans le champ mot de passe |
126 |
|
|
$this->byName("password")->value($password); |
127 |
|
|
// On clique sur le bouton de connexion |
128 |
|
|
$this->byname("login.action.connect")->click(); |
129 |
|
|
// On vérifie qu'il n'y a pas d'erreur sur l'élément affiché |
130 |
|
|
$this->verifynoerrors(); |
131 |
|
|
// On vérifie qu'un message nous indique que la session est ouverte |
132 |
|
|
$element = $this->bycssselector("div.message span.text"); |
133 |
|
|
$this->assertequals("Votre session est maintenant ouverte.", $element->text()); |
134 |
|
|
} |
135 |
|
|
|
136 |
|
|
/** |
137 |
|
|
* Cette méthode permet de déconnecter l'utilisateur et de vérifier que la |
138 |
|
|
* déconnexion s'est bien déroulée. |
139 |
|
|
*/ |
140 |
|
|
protected function deconnect() { |
141 |
|
|
// On clique sur le lien de déconnexion |
142 |
|
|
$element = $this->bycssselector("a.actions-logout"); |
143 |
|
|
$element->click(); |
144 |
|
|
// Réduit le temps d'attente lors de la recherche d'élément |
145 |
|
|
$this->timeouts()->implicitWait(0); |
146 |
|
|
// On vérifie qu'il n'y a pas d'erreur sur l'élément affiché |
147 |
|
|
$this->verifynoerrors(); |
148 |
|
|
// On vérifie qu'un message nous indique que la session est terminée |
149 |
|
|
$element = $this->bycssselector("div.message span.text"); |
150 |
|
|
$this->assertequals("Votre session est maintenant terminée.", $element->text()); |
151 |
|
|
// On vérifie que le lien de déconnexion n'est pas présent |
152 |
|
|
try { |
153 |
|
|
$el = $this->bycssselector("a.actions-logout"); |
154 |
|
|
$this->fail("The element shouldn't exist."); |
155 |
|
|
} catch (RuntimeException $e) {} |
156 |
|
|
} |
157 |
|
|
|
158 |
|
|
/** |
159 |
|
|
* Cette méthode permet de connecter l'utilisateur à l'application et de |
160 |
|
|
* vérifier que la connecion s'est bien déroulée. |
161 |
|
|
*/ |
162 |
|
|
protected function login($login, $password) { |
163 |
|
|
// On se connecte |
164 |
|
|
$this->connect($login, $password); |
165 |
|
|
// Allonge le temps d'attente lors de la recherche d'élément |
166 |
|
|
$this->timeouts()->implicitWait(10000); |
167 |
|
|
} |
168 |
|
|
|
169 |
|
|
/** |
170 |
|
|
* Cette méthode permet de déconnecter l'utilisateur et de vérifier que la |
171 |
|
|
* déconnexion s'est bien déroulée. |
172 |
|
|
*/ |
173 |
|
|
protected function logout() { |
174 |
|
|
// On se déconnecte |
175 |
|
|
$this->deconnect(); |
176 |
|
|
//Ferme la fenêtre |
177 |
|
|
$this->closeWindow(); |
178 |
|
|
} |
179 |
|
|
|
180 |
|
|
/** |
181 |
|
|
* Cette méthode permet de fair un assert sur la NON présence d'un message |
182 |
|
|
* indiquant une erreur de base de données ou une notice PHP. |
183 |
|
|
*/ |
184 |
|
|
public function verifynoerrors() { |
185 |
|
|
// On récupère le contenu du rendu de la page |
186 |
|
|
$source = $this->source(); |
187 |
|
|
// On vérifie la présence du message d'erreur de base de données |
188 |
|
|
try { |
189 |
|
|
$this->assertNotContains("Erreur de base de données. Contactez votre administrateur.", $source); |
190 |
|
|
} catch (PHPUnit_Framework_AssertionFailedError $e) { |
191 |
|
|
$this->fail("Failed asserting that the source does not contain \"Erreur de base de données\"."); |
192 |
|
|
} |
193 |
|
|
// On vérifie la présence d'une erreur fatale PHP |
194 |
|
|
try { |
195 |
|
|
$this->assertNotContains("Fatal error:", $source); |
196 |
|
|
} catch (PHPUnit_Framework_AssertionFailedError $e) { |
197 |
|
|
$this->fail("Failed asserting that the source does not contain \"PHP Fatal error:\"."); |
198 |
|
|
} |
199 |
|
|
// On vérifie la présence d'une erreur de syntaxe PHP |
200 |
|
|
try { |
201 |
|
|
$this->assertNotContains("Parse error:", $source); |
202 |
|
|
} catch (PHPUnit_Framework_AssertionFailedError $e) { |
203 |
|
|
$this->fail("Failed asserting that the source does not contain \"PHP Parse error:\"."); |
204 |
|
|
} |
205 |
|
|
// On vérifie la présence d'une notice PHP |
206 |
|
|
try { |
207 |
|
|
$this->assertNotContains("Notice:", $source); |
208 |
|
|
} catch (PHPUnit_Framework_AssertionFailedError $e) { |
209 |
|
|
$this->fail("Failed asserting that the source does not contain \"PHP Notice:\"."); |
210 |
|
|
} |
211 |
|
|
} |
212 |
|
|
|
213 |
|
|
/** |
214 |
|
|
* Cette méthode est un test (fonctionnalité) qui permet de tester le |
215 |
|
|
* fonctionnement de la classe Base2TestCase |
216 |
|
|
*/ |
217 |
|
|
//public function test_login_logout() { |
218 |
|
|
// // On se connecte avec l'utilisateur admin |
219 |
|
|
// $this->login("admin", "admin"); |
220 |
|
|
// // On se déconnecte |
221 |
|
|
// $this->logout(); |
222 |
|
|
//} |
223 |
|
|
|
224 |
|
|
} |
225 |
|
|
|
226 |
fmichon |
1649 |
?> |