3 namespace Wallabag\CoreBundle\Tests\Controller
;
5 use Wallabag\CoreBundle\Tests\WallabagCoreTestCase
;
7 class ConfigControllerTest
extends WallabagCoreTestCase
9 public function testLogin()
11 $client = $this->getClient();
13 $client->request('GET', '/new');
15 $this->assertEquals(302, $client->getResponse()->getStatusCode());
16 $this->assertContains('login', $client->getResponse()->headers
->get('location'));
19 public function testIndex()
21 $this->logInAs('admin');
22 $client = $this->getClient();
24 $crawler = $client->request('GET', '/config');
26 $this->assertEquals(200, $client->getResponse()->getStatusCode());
28 $this->assertCount(1, $crawler->filter('button[id=config_save]'));
29 $this->assertCount(1, $crawler->filter('button[id=change_passwd_save]'));
30 $this->assertCount(1, $crawler->filter('button[id=update_user_save]'));
31 $this->assertCount(1, $crawler->filter('button[id=new_user_save]'));
32 $this->assertCount(1, $crawler->filter('button[id=rss_config_save]'));
35 public function testUpdate()
37 $this->logInAs('admin');
38 $client = $this->getClient();
40 $crawler = $client->request('GET', '/config');
42 $this->assertEquals(200, $client->getResponse()->getStatusCode());
44 $form = $crawler->filter('button[id=config_save]')->form();
48 'config[items_per_page]' => '30',
49 'config[language]' => 'fr_FR',
52 $client->submit($form, $data);
54 $this->assertEquals(302, $client->getResponse()->getStatusCode());
56 $crawler = $client->followRedirect();
58 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text')));
59 $this->assertContains('Config saved', $alert[0]);
62 public function dataForUpdateFailed()
67 'config[items_per_page]' => '',
68 'config[language]' => 'fr_FR',
72 'config[items_per_page]' => '12',
73 'config[language]' => '',
79 * @dataProvider dataForUpdateFailed
81 public function testUpdateFailed($data)
83 $this->logInAs('admin');
84 $client = $this->getClient();
86 $crawler = $client->request('GET', '/config');
88 $this->assertEquals(200, $client->getResponse()->getStatusCode());
90 $form = $crawler->filter('button[id=config_save]')->form();
92 $crawler = $client->submit($form, $data);
94 $this->assertEquals(200, $client->getResponse()->getStatusCode());
96 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text')));
97 $this->assertContains('This value should not be blank', $alert[0]);
100 public function dataForChangePasswordFailed()
105 'change_passwd[old_password]' => 'material',
106 'change_passwd[new_password][first]' => '',
107 'change_passwd[new_password][second]' => '',
109 'Wrong value for your current password',
113 'change_passwd[old_password]' => 'mypassword',
114 'change_passwd[new_password][first]' => '',
115 'change_passwd[new_password][second]' => '',
117 'This value should not be blank',
121 'change_passwd[old_password]' => 'mypassword',
122 'change_passwd[new_password][first]' => 'hop',
123 'change_passwd[new_password][second]' => '',
125 'The password fields must match',
129 'change_passwd[old_password]' => 'mypassword',
130 'change_passwd[new_password][first]' => 'hop',
131 'change_passwd[new_password][second]' => 'hop',
133 'Password should by at least',
139 * @dataProvider dataForChangePasswordFailed
141 public function testChangePasswordFailed($data, $expectedMessage)
143 $this->logInAs('admin');
144 $client = $this->getClient();
146 $crawler = $client->request('GET', '/config');
148 $this->assertEquals(200, $client->getResponse()->getStatusCode());
150 $form = $crawler->filter('button[id=change_passwd_save]')->form();
152 $crawler = $client->submit($form, $data);
154 $this->assertEquals(200, $client->getResponse()->getStatusCode());
156 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text')));
157 $this->assertContains($expectedMessage, $alert[0]);
160 public function testChangePassword()
162 $this->logInAs('admin');
163 $client = $this->getClient();
165 $crawler = $client->request('GET', '/config');
167 $this->assertEquals(200, $client->getResponse()->getStatusCode());
169 $form = $crawler->filter('button[id=change_passwd_save]')->form();
172 'change_passwd[old_password]' => 'mypassword',
173 'change_passwd[new_password][first]' => 'mypassword',
174 'change_passwd[new_password][second]' => 'mypassword',
177 $client->submit($form, $data);
179 $this->assertEquals(302, $client->getResponse()->getStatusCode());
181 $crawler = $client->followRedirect();
183 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text')));
184 $this->assertContains('Password updated', $alert[0]);
187 public function dataForUserFailed()
192 'update_user[name]' => '',
193 'update_user[email]' => '',
195 'Please enter an email',
199 'update_user[name]' => '',
200 'update_user[email]' => 'test',
202 'The email is not valid',
208 * @dataProvider dataForUserFailed
210 public function testUserFailed($data, $expectedMessage)
212 $this->logInAs('admin');
213 $client = $this->getClient();
215 $crawler = $client->request('GET', '/config');
217 $this->assertEquals(200, $client->getResponse()->getStatusCode());
219 $form = $crawler->filter('button[id=update_user_save]')->form();
221 $crawler = $client->submit($form, $data);
223 $this->assertEquals(200, $client->getResponse()->getStatusCode());
225 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text')));
226 $this->assertContains($expectedMessage, $alert[0]);
229 public function testUserUpdate()
231 $this->logInAs('admin');
232 $client = $this->getClient();
234 $crawler = $client->request('GET', '/config');
236 $this->assertEquals(200, $client->getResponse()->getStatusCode());
238 $form = $crawler->filter('button[id=update_user_save]')->form();
241 'update_user[name]' => 'new name',
242 'update_user[email]' => 'admin@wallabag.io',
245 $client->submit($form, $data);
247 $this->assertEquals(302, $client->getResponse()->getStatusCode());
249 $crawler = $client->followRedirect();
251 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text')));
252 $this->assertContains('Information updated', $alert[0]);
255 public function dataForNewUserFailed()
260 'new_user[username]' => '',
261 'new_user[plainPassword][first]' => '',
262 'new_user[plainPassword][second]' => '',
263 'new_user[email]' => '',
265 'Please enter a username',
269 'new_user[username]' => 'a',
270 'new_user[plainPassword][first]' => 'mypassword',
271 'new_user[plainPassword][second]' => 'mypassword',
272 'new_user[email]' => '',
274 'The username is too short',
278 'new_user[username]' => 'wallace',
279 'new_user[plainPassword][first]' => 'mypassword',
280 'new_user[plainPassword][second]' => 'mypassword',
281 'new_user[email]' => 'test',
283 'The email is not valid',
287 'new_user[username]' => 'admin',
288 'new_user[plainPassword][first]' => 'wallacewallace',
289 'new_user[plainPassword][second]' => 'wallacewallace',
290 'new_user[email]' => 'wallace@wallace.me',
292 'The username is already used',
296 'new_user[username]' => 'wallace',
297 'new_user[plainPassword][first]' => 'mypassword1',
298 'new_user[plainPassword][second]' => 'mypassword2',
299 'new_user[email]' => 'wallace@wallace.me',
301 'This value is not valid',
307 * @dataProvider dataForNewUserFailed
309 public function testNewUserFailed($data, $expectedMessage)
311 $this->logInAs('admin');
312 $client = $this->getClient();
314 $crawler = $client->request('GET', '/config');
316 $this->assertEquals(200, $client->getResponse()->getStatusCode());
318 $form = $crawler->filter('button[id=new_user_save]')->form();
320 $crawler = $client->submit($form, $data);
322 $this->assertEquals(200, $client->getResponse()->getStatusCode());
324 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text')));
325 $this->assertContains($expectedMessage, $alert[0]);
328 public function testNewUserCreated()
330 $this->logInAs('admin');
331 $client = $this->getClient();
333 $crawler = $client->request('GET', '/config');
335 $this->assertEquals(200, $client->getResponse()->getStatusCode());
337 $form = $crawler->filter('button[id=new_user_save]')->form();
340 'new_user[username]' => 'wallace',
341 'new_user[plainPassword][first]' => 'wallace1',
342 'new_user[plainPassword][second]' => 'wallace1',
343 'new_user[email]' => 'wallace@wallace.me',
346 $client->submit($form, $data);
348 $this->assertEquals(302, $client->getResponse()->getStatusCode());
350 $crawler = $client->followRedirect();
352 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text')));
353 $this->assertContains('User "wallace" added', $alert[0]);
355 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
357 ->getRepository('WallabagUserBundle:User')
358 ->findOneByUsername('wallace');
360 $this->assertTrue(false !== $user);
361 $this->assertTrue($user->isEnabled());
364 public function testRssUpdateResetToken()
366 $this->logInAs('admin');
367 $client = $this->getClient();
370 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
372 ->getRepository('WallabagUserBundle:User')
373 ->findOneByUsername('admin');
376 $this->markTestSkipped('No user found in db.');
379 $config = $user->getConfig();
380 $config->setRssToken(null);
381 $em->persist($config);
384 $crawler = $client->request('GET', '/config');
386 $this->assertEquals(200, $client->getResponse()->getStatusCode());
388 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
389 $this->assertContains('You need to generate a token first.', $body[0]);
391 $client->request('GET', '/generate-token');
392 $this->assertEquals(302, $client->getResponse()->getStatusCode());
394 $crawler = $client->followRedirect();
396 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
397 $this->assertNotContains('You need to generate a token first.', $body[0]);
400 public function testGenerateTokenAjax()
402 $this->logInAs('admin');
403 $client = $this->getClient();
410 array('HTTP_X-Requested-With' => 'XMLHttpRequest')
413 $this->assertEquals(200, $client->getResponse()->getStatusCode());
414 $content = json_decode($client->getResponse()->getContent(), true);
415 $this->assertArrayHasKey('token', $content);
418 public function testRssUpdate()
420 $this->logInAs('admin');
421 $client = $this->getClient();
423 $crawler = $client->request('GET', '/config');
425 if (500 == $client->getResponse()->getStatusCode()) {
426 var_export($client->getResponse()->getContent());
430 $this->assertEquals(200, $client->getResponse()->getStatusCode());
432 $form = $crawler->filter('button[id=rss_config_save]')->form();
435 'rss_config[rss_limit]' => 12,
438 $client->submit($form, $data);
440 $this->assertEquals(302, $client->getResponse()->getStatusCode());
442 $crawler = $client->followRedirect();
444 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text')));
445 $this->assertContains('RSS information updated', $alert[0]);
448 public function dataForRssFailed()
453 'rss_config[rss_limit]' => 0,
455 'This value should be 1 or more.',
459 'rss_config[rss_limit]' => 1000000000000,
461 'This will certainly kill the app',
467 * @dataProvider dataForRssFailed
469 public function testRssFailed($data, $expectedMessage)
471 $this->logInAs('admin');
472 $client = $this->getClient();
474 $crawler = $client->request('GET', '/config');
476 $this->assertEquals(200, $client->getResponse()->getStatusCode());
478 $form = $crawler->filter('button[id=rss_config_save]')->form();
480 $crawler = $client->submit($form, $data);
482 $this->assertEquals(200, $client->getResponse()->getStatusCode());
484 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text')));
485 $this->assertContains($expectedMessage, $alert[0]);