From b8427f22f06cab58383ec3080f09715c712c65ef Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Mon, 1 May 2017 22:13:35 +0200 Subject: Add menu access to site credentials CRUD --- .../Controller/SiteCredentialControllerTest.php | 140 +++++++++++++++++++++ .../GrabySiteConfigBuilderTest.php | 50 +++++++- 2 files changed, 187 insertions(+), 3 deletions(-) create mode 100644 tests/Wallabag/CoreBundle/Controller/SiteCredentialControllerTest.php (limited to 'tests/Wallabag/CoreBundle') diff --git a/tests/Wallabag/CoreBundle/Controller/SiteCredentialControllerTest.php b/tests/Wallabag/CoreBundle/Controller/SiteCredentialControllerTest.php new file mode 100644 index 00000000..47bf0907 --- /dev/null +++ b/tests/Wallabag/CoreBundle/Controller/SiteCredentialControllerTest.php @@ -0,0 +1,140 @@ +logInAs('admin'); + $client = $this->getClient(); + + $crawler = $client->request('GET', '/site-credentials/'); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $body = $crawler->filter('body')->extract(['_text'])[0]; + + $this->assertContains('site_credential.description', $body); + $this->assertContains('site_credential.list.create_new_one', $body); + } + + public function testNewSiteCredential() + { + $this->logInAs('admin'); + $client = $this->getClient(); + + $crawler = $client->request('GET', '/site-credentials/new'); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $body = $crawler->filter('body')->extract(['_text'])[0]; + + $this->assertContains('site_credential.new_site_credential', $body); + $this->assertContains('site_credential.form.back_to_list', $body); + + $form = $crawler->filter('button[id=site_credential_save]')->form(); + + $data = [ + 'site_credential[host]' => 'google.io', + 'site_credential[username]' => 'sergei', + 'site_credential[password]' => 'microsoft', + ]; + + $client->submit($form, $data); + + $this->assertEquals(302, $client->getResponse()->getStatusCode()); + + $crawler = $client->followRedirect(); + + $this->assertContains('flashes.site_credential.notice.added', $crawler->filter('body')->extract(['_text'])[0]); + } + + /** + * @depends testNewSiteCredential + */ + public function testEditSiteCredential() + { + $this->logInAs('admin'); + $client = $this->getClient(); + + $credential = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:SiteCredential') + ->findOneByHost('google.io'); + + $crawler = $client->request('GET', '/site-credentials/'.$credential->getId().'/edit'); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $body = $crawler->filter('body')->extract(['_text'])[0]; + + $this->assertContains('site_credential.edit_site_credential', $body); + $this->assertContains('site_credential.form.back_to_list', $body); + + $form = $crawler->filter('button[id=site_credential_save]')->form(); + + $data = [ + 'site_credential[host]' => 'google.io', + 'site_credential[username]' => 'larry', + 'site_credential[password]' => 'microsoft', + ]; + + $client->submit($form, $data); + + $this->assertEquals(302, $client->getResponse()->getStatusCode()); + + $crawler = $client->followRedirect(); + + $this->assertContains('flashes.site_credential.notice.updated', $crawler->filter('body')->extract(['_text'])[0]); + $this->assertContains('larry', $crawler->filter('input[id=site_credential_username]')->attr('value')); + } + + /** + * @depends testNewSiteCredential + */ + public function testEditFromADifferentUserSiteCredential() + { + $this->logInAs('bob'); + $client = $this->getClient(); + + $credential = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:SiteCredential') + ->findOneByHost('google.io'); + + $client->request('GET', '/site-credentials/'.$credential->getId().'/edit'); + + $this->assertEquals(403, $client->getResponse()->getStatusCode()); + } + + /** + * @depends testNewSiteCredential + */ + public function testDeleteSiteCredential() + { + $this->logInAs('admin'); + $client = $this->getClient(); + + $credential = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:SiteCredential') + ->findOneByHost('google.io'); + + $crawler = $client->request('GET', '/site-credentials/'.$credential->getId().'/edit'); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $deleteForm = $crawler->filter('body')->selectButton('site_credential.form.delete')->form(); + + $client->submit($deleteForm, []); + + $this->assertEquals(302, $client->getResponse()->getStatusCode()); + + $crawler = $client->followRedirect(); + + $this->assertContains('flashes.site_credential.notice.deleted', $crawler->filter('body')->extract(['_text'])[0]); + } +} diff --git a/tests/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilderTest.php b/tests/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilderTest.php index 8b50bce9..980f7579 100644 --- a/tests/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilderTest.php +++ b/tests/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilderTest.php @@ -8,6 +8,8 @@ use BD\GuzzleSiteAuthenticator\SiteConfig\SiteConfig; use Graby\SiteConfig\SiteConfig as GrabySiteConfig; use PHPUnit_Framework_TestCase; use Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder; +use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; +use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage; class GrabySiteConfigBuilderTest extends PHPUnit_Framework_TestCase { @@ -17,7 +19,7 @@ class GrabySiteConfigBuilderTest extends PHPUnit_Framework_TestCase public function testBuildConfigExists() { /* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */ - $grabyConfigBuilderMock = $this->getMockBuilder('\Graby\SiteConfig\ConfigBuilder') + $grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder') ->disableOriginalConstructor() ->getMock(); @@ -38,9 +40,30 @@ class GrabySiteConfigBuilderTest extends PHPUnit_Framework_TestCase $handler = new TestHandler(); $logger->pushHandler($handler); + $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository') + ->disableOriginalConstructor() + ->getMock(); + $siteCrentialRepo->expects($this->once()) + ->method('findOneByHostAndUser') + ->with('example.com', 1) + ->willReturn(['username' => 'foo', 'password' => 'bar']); + + $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User') + ->disableOriginalConstructor() + ->getMock(); + $user->expects($this->once()) + ->method('getId') + ->willReturn(1); + + $token = new UsernamePasswordToken($user, 'pass', 'provider'); + + $tokenStorage = new TokenStorage(); + $tokenStorage->setToken($token); + $this->builder = new GrabySiteConfigBuilder( $grabyConfigBuilderMock, - ['example.com' => ['username' => 'foo', 'password' => 'bar']], + $tokenStorage, + $siteCrentialRepo, $logger ); @@ -82,9 +105,30 @@ class GrabySiteConfigBuilderTest extends PHPUnit_Framework_TestCase $handler = new TestHandler(); $logger->pushHandler($handler); + $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository') + ->disableOriginalConstructor() + ->getMock(); + $siteCrentialRepo->expects($this->once()) + ->method('findOneByHostAndUser') + ->with('unknown.com', 1) + ->willReturn(null); + + $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User') + ->disableOriginalConstructor() + ->getMock(); + $user->expects($this->once()) + ->method('getId') + ->willReturn(1); + + $token = new UsernamePasswordToken($user, 'pass', 'provider'); + + $tokenStorage = new TokenStorage(); + $tokenStorage->setToken($token); + $this->builder = new GrabySiteConfigBuilder( $grabyConfigBuilderMock, - [], + $tokenStorage, + $siteCrentialRepo, $logger ); -- cgit v1.2.3