3 namespace Wallabag\CoreBundle\Tests\Controller
;
5 use Symfony\Component\Filesystem\Filesystem
;
6 use Symfony\Component\Finder\Finder
;
7 use Wallabag\CoreBundle\Tests\WallabagCoreTestCase
;
9 class SecurityControllerTest
extends WallabagCoreTestCase
11 public function testLogin()
13 $client = $this->getClient();
15 $crawler = $client->request('GET', '/new');
17 $this->assertEquals(302, $client->getResponse()->getStatusCode());
18 $this->assertContains('login', $client->getResponse()->headers
->get('location'));
21 public function testLoginFail()
23 $client = $this->getClient();
25 $crawler = $client->request('GET', '/login');
27 $form = $crawler->filter('button[type=submit]')->form();
29 '_username' => 'admin',
30 '_password' => 'admin',
33 $client->submit($form, $data);
35 $this->assertEquals(302, $client->getResponse()->getStatusCode());
36 $this->assertContains('login', $client->getResponse()->headers
->get('location'));
38 $crawler = $client->followRedirect();
40 $this->assertContains('Bad credentials', $client->getResponse()->getContent());
43 public function testRedirectionAfterLogin()
45 $client = $this->getClient();
46 $client->followRedirects();
48 $crawler = $client->request('GET', '/config');
50 $form = $crawler->filter('button[type=submit]')->form();
53 '_username' => 'admin',
54 '_password' => 'mypassword',
57 $client->submit($form, $data);
59 $this->assertContains('RSS', $client->getResponse()->getContent());
62 public function testForgotPassword()
64 $client = $this->getClient();
66 $crawler = $client->request('GET', '/forgot-password');
68 $this->assertEquals(200, $client->getResponse()->getStatusCode());
70 $this->assertContains('Forgot password', $client->getResponse()->getContent());
72 $form = $crawler->filter('button[type=submit]');
74 $this->assertCount(1, $form);
77 'form' => $form->form(),
83 * @depends testForgotPassword
85 public function testSubmitForgotPasswordFail($parameters)
87 $form = $parameters['form'];
88 $client = $parameters['client'];
91 'forgot_password[email]' => 'material',
94 $client->submit($form, $data);
96 $this->assertEquals(200, $client->getResponse()->getStatusCode());
97 $this->assertContains('No user found with this email', $client->getResponse()->getContent());
101 * @depends testForgotPassword
103 * Instead of using collector which slow down the test suite
104 * http://symfony.com/doc/current/cookbook/email/testing.html
106 * Use a different way where Swift store email as file
108 public function testSubmitForgotPassword($parameters)
110 $form = $parameters['form'];
111 $client = $parameters['client'];
113 $spoolDir = $client->getKernel()->getContainer()->getParameter('swiftmailer.spool.default.file.path');
116 $filesystem = new Filesystem();
117 $filesystem->remove($spoolDir);
119 // to use `getCollector` since `collect: false` in config_test.yml
120 $client->enableProfiler();
123 'forgot_password[email]' => 'bobby@wallabag.org',
126 $client->submit($form, $data);
128 $this->assertEquals(302, $client->getResponse()->getStatusCode());
130 $crawler = $client->followRedirect();
132 $this->assertContains('An email has been sent to', $client->getResponse()->getContent());
134 // find every files (ie: emails) inside the spool dir except hidden files
135 $finder = new Finder();
138 ->ignoreDotFiles(true)
141 $this->assertCount(1, $finder, 'Only one email has been sent');
143 foreach ($finder as $file) {
144 $message = unserialize(file_get_contents($file));
146 $this->assertInstanceOf('Swift_Message', $message);
147 $this->assertEquals('Reset Password', $message->getSubject());
148 $this->assertEquals('no-reply@wallabag.org', key($message->getFrom()));
149 $this->assertEquals('bobby@wallabag.org', key($message->getTo()));
150 $this->assertContains(
151 'To reset your password - please visit',
157 public function testReset()
159 $client = $this->getClient();
160 $user = $client->getContainer()
161 ->get('doctrine.orm.entity_manager')
162 ->getRepository('WallabagCoreBundle:User')
163 ->findOneByEmail('bobby@wallabag.org');
165 $crawler = $client->request('GET', '/forgot-password/'.$user->getConfirmationToken());
167 $this->assertEquals(200, $client->getResponse()->getStatusCode());
168 $this->assertCount(2, $crawler->filter('input[type=password]'));
169 $this->assertCount(1, $form = $crawler->filter('button[type=submit]'));
170 $this->assertCount(1, $form);
173 'change_passwd[new_password][first]' => 'mypassword',
174 'change_passwd[new_password][second]' => 'mypassword',
177 $client->submit($form->form(), $data);
179 $this->assertEquals(302, $client->getResponse()->getStatusCode());
180 $this->assertContains('login', $client->getResponse()->headers
->get('location'));
183 public function testResetBadToken()
185 $client = $this->getClient();
187 $client->request('GET', '/forgot-password/UIZOAU29UE902IEPZO');
189 $this->assertEquals(404, $client->getResponse()->getStatusCode());
192 public function testCheckEmailWithoutEmail()
194 $client = $this->getClient();
196 $client->request('GET', '/forgot-password/check-email');
198 $this->assertEquals(302, $client->getResponse()->getStatusCode());
199 $this->assertContains('forgot-password', $client->getResponse()->headers
->get('location'));