3 namespace Wallabag\CoreBundle\Tests\Controller
;
5 use Wallabag\CoreBundle\Tests\WallabagTestCase
;
6 use Symfony\Component\Filesystem\Filesystem
;
7 use Symfony\Component\Finder\Finder
;
9 class SecurityControllerTest
extends WallabagTestCase
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]' => 'baggy',
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',