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 testForgotPassword()
45 $client = $this->getClient();
47 $crawler = $client->request('GET', '/forgot-password');
49 $this->assertEquals(200, $client->getResponse()->getStatusCode());
51 $this->assertContains('Forgot password', $client->getResponse()->getContent());
53 $form = $crawler->filter('button[type=submit]');
55 $this->assertCount(1, $form);
58 'form' => $form->form(),
64 * @depends testForgotPassword
66 public function testSubmitForgotPasswordFail($parameters)
68 $form = $parameters['form'];
69 $client = $parameters['client'];
72 'forgot_password[email]' => 'material',
75 $client->submit($form, $data);
77 $this->assertEquals(200, $client->getResponse()->getStatusCode());
78 $this->assertContains('No user found with this email', $client->getResponse()->getContent());
82 * @depends testForgotPassword
84 * Instead of using collector which slow down the test suite
85 * http://symfony.com/doc/current/cookbook/email/testing.html
87 * Use a different way where Swift store email as file
89 public function testSubmitForgotPassword($parameters)
91 $form = $parameters['form'];
92 $client = $parameters['client'];
94 $spoolDir = $client->getKernel()->getContainer()->getParameter('swiftmailer.spool.default.file.path');
97 $filesystem = new Filesystem();
98 $filesystem->remove($spoolDir);
100 // to use `getCollector` since `collect: false` in config_test.yml
101 $client->enableProfiler();
104 'forgot_password[email]' => 'bobby@wallabag.org',
107 $client->submit($form, $data);
109 $this->assertEquals(302, $client->getResponse()->getStatusCode());
111 $crawler = $client->followRedirect();
113 $this->assertContains('An email has been sent to', $client->getResponse()->getContent());
115 // find every files (ie: emails) inside the spool dir except hidden files
116 $finder = new Finder();
119 ->ignoreDotFiles(true)
122 $this->assertCount(1, $finder, 'Only one email has been sent');
124 foreach ($finder as $file) {
125 $message = unserialize(file_get_contents($file));
127 $this->assertInstanceOf('Swift_Message', $message);
128 $this->assertEquals('Reset Password', $message->getSubject());
129 $this->assertEquals('no-reply@wallabag.org', key($message->getFrom()));
130 $this->assertEquals('bobby@wallabag.org', key($message->getTo()));
131 $this->assertContains(
132 'To reset your password - please visit',
138 public function testReset()
140 $client = $this->getClient();
141 $user = $client->getContainer()
142 ->get('doctrine.orm.entity_manager')
143 ->getRepository('WallabagCoreBundle:User')
144 ->findOneByEmail('bobby@wallabag.org');
146 $crawler = $client->request('GET', '/forgot-password/'.$user->getConfirmationToken());
148 $this->assertEquals(200, $client->getResponse()->getStatusCode());
149 $this->assertCount(2, $crawler->filter('input[type=password]'));
150 $this->assertCount(1, $form = $crawler->filter('button[type=submit]'));
151 $this->assertCount(1, $form);
154 'change_passwd[new_password][first]' => 'mypassword',
155 'change_passwd[new_password][second]' => 'mypassword',
158 $client->submit($form->form(), $data);
160 $this->assertEquals(302, $client->getResponse()->getStatusCode());
161 $this->assertContains('login', $client->getResponse()->headers
->get('location'));
164 public function testResetBadToken()
166 $client = $this->getClient();
168 $client->request('GET', '/forgot-password/UIZOAU29UE902IEPZO');
170 $this->assertEquals(404, $client->getResponse()->getStatusCode());
173 public function testCheckEmailWithoutEmail()
175 $client = $this->getClient();
177 $client->request('GET', '/forgot-password/check-email');
179 $this->assertEquals(302, $client->getResponse()->getStatusCode());
180 $this->assertContains('forgot-password', $client->getResponse()->headers
->get('location'));