]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - tests/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilderTest.php
Merge remote-tracking branch 'origin/master' into 2.4
[github/wallabag/wallabag.git] / tests / Wallabag / CoreBundle / GuzzleSiteAuthenticator / GrabySiteConfigBuilderTest.php
index 277d80129ebe421afde895ae6db4edd073de47cb..44affde83e063e6e88681f90d3e9bff3c22f62db 100644 (file)
@@ -5,26 +5,22 @@ namespace Tests\Wallabag\CoreBundle\GuzzleSiteAuthenticator;
 use Graby\SiteConfig\SiteConfig as GrabySiteConfig;
 use Monolog\Handler\TestHandler;
 use Monolog\Logger;
-use PHPUnit\Framework\TestCase;
 use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
 use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
+use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
 use Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder;
 
-class GrabySiteConfigBuilderTest extends TestCase
+class GrabySiteConfigBuilderTest extends WallabagCoreTestCase
 {
-    /** @var \Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder */
-    protected $builder;
-
     public function testBuildConfigExists()
     {
-        /* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */
         $grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder')
             ->disableOriginalConstructor()
             ->getMock();
 
         $grabySiteConfig = new GrabySiteConfig();
         $grabySiteConfig->requires_login = true;
-        $grabySiteConfig->login_uri = 'http://www.example.com/login';
+        $grabySiteConfig->login_uri = 'http://api.example.com/login';
         $grabySiteConfig->login_username_field = 'login';
         $grabySiteConfig->login_password_field = 'password';
         $grabySiteConfig->login_extra_fields = ['field=value'];
@@ -32,7 +28,7 @@ class GrabySiteConfigBuilderTest extends TestCase
 
         $grabyConfigBuilderMock
             ->method('buildForHost')
-            ->with('example.com')
+            ->with('api.example.com')
             ->willReturn($grabySiteConfig);
 
         $logger = new Logger('foo');
@@ -43,8 +39,8 @@ class GrabySiteConfigBuilderTest extends TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $siteCrentialRepo->expects($this->once())
-            ->method('findOneByHostAndUser')
-            ->with('example.com', 1)
+            ->method('findOneByHostsAndUser')
+            ->with(['api.example.com', '.example.com'], 1)
             ->willReturn(['username' => 'foo', 'password' => 'bar']);
 
         $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
@@ -59,18 +55,18 @@ class GrabySiteConfigBuilderTest extends TestCase
         $tokenStorage = new TokenStorage();
         $tokenStorage->setToken($token);
 
-        $this->builder = new GrabySiteConfigBuilder(
+        $builder = new GrabySiteConfigBuilder(
             $grabyConfigBuilderMock,
             $tokenStorage,
             $siteCrentialRepo,
             $logger
         );
 
-        $config = $this->builder->buildForHost('www.example.com');
+        $config = $builder->buildForHost('api.example.com');
 
-        $this->assertSame('example.com', $config->getHost());
+        $this->assertSame('api.example.com', $config->getHost());
         $this->assertTrue($config->requiresLogin());
-        $this->assertSame('http://www.example.com/login', $config->getLoginUri());
+        $this->assertSame('http://api.example.com/login', $config->getLoginUri());
         $this->assertSame('login', $config->getUsernameField());
         $this->assertSame('password', $config->getPasswordField());
         $this->assertSame(['field' => 'value'], $config->getExtraFields());
@@ -85,7 +81,6 @@ class GrabySiteConfigBuilderTest extends TestCase
 
     public function testBuildConfigDoesntExist()
     {
-        /* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */
         $grabyConfigBuilderMock = $this->getMockBuilder('\Graby\SiteConfig\ConfigBuilder')
             ->disableOriginalConstructor()
             ->getMock();
@@ -103,8 +98,8 @@ class GrabySiteConfigBuilderTest extends TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $siteCrentialRepo->expects($this->once())
-            ->method('findOneByHostAndUser')
-            ->with('unknown.com', 1)
+            ->method('findOneByHostsAndUser')
+            ->with(['unknown.com', '.com'], 1)
             ->willReturn(null);
 
         $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
@@ -119,14 +114,14 @@ class GrabySiteConfigBuilderTest extends TestCase
         $tokenStorage = new TokenStorage();
         $tokenStorage->setToken($token);
 
-        $this->builder = new GrabySiteConfigBuilder(
+        $builder = new GrabySiteConfigBuilder(
             $grabyConfigBuilderMock,
             $tokenStorage,
             $siteCrentialRepo,
             $logger
         );
 
-        $config = $this->builder->buildForHost('unknown.com');
+        $config = $builder->buildForHost('unknown.com');
 
         $this->assertFalse($config);
 
@@ -137,7 +132,6 @@ class GrabySiteConfigBuilderTest extends TestCase
 
     public function testBuildConfigWithBadExtraFields()
     {
-        /* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */
         $grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder')
             ->disableOriginalConstructor()
             ->getMock();
@@ -202,4 +196,121 @@ class GrabySiteConfigBuilderTest extends TestCase
 
         $this->assertCount(1, $records, 'One log was recorded');
     }
+
+    public function testBuildConfigUserNotDefined()
+    {
+        $grabyConfigBuilderMock = $this->getMockBuilder('\Graby\SiteConfig\ConfigBuilder')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $grabyConfigBuilderMock
+            ->method('buildForHost')
+            ->with('unknown.com')
+            ->willReturn(new GrabySiteConfig());
+
+        $logger = new Logger('foo');
+        $handler = new TestHandler();
+        $logger->pushHandler($handler);
+
+        $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $tokenStorage = new TokenStorage();
+
+        $builder = new GrabySiteConfigBuilder(
+            $grabyConfigBuilderMock,
+            $tokenStorage,
+            $siteCrentialRepo,
+            $logger
+        );
+
+        $config = $builder->buildForHost('unknown.com');
+
+        $this->assertFalse($config);
+    }
+
+    public function dataProviderCredentials()
+    {
+        return [
+            [
+                'host' => 'example.com',
+            ],
+            [
+                'host' => 'other.example.com',
+            ],
+            [
+                'host' => 'paywall.example.com',
+                'expectedUsername' => 'paywall.example',
+                'expectedPassword' => 'bar',
+            ],
+            [
+                'host' => 'api.super.com',
+                'expectedUsername' => '.super',
+                'expectedPassword' => 'bar',
+            ],
+            [
+                'host' => '.super.com',
+                'expectedUsername' => '.super',
+                'expectedPassword' => 'bar',
+            ],
+        ];
+    }
+
+    /**
+     * @dataProvider dataProviderCredentials
+     */
+    public function testBuildConfigWithDbAccess($host, $expectedUsername = null, $expectedPassword = null)
+    {
+        $grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $grabySiteConfig = new GrabySiteConfig();
+        $grabySiteConfig->requires_login = true;
+        $grabySiteConfig->login_uri = 'http://api.example.com/login';
+        $grabySiteConfig->login_username_field = 'login';
+        $grabySiteConfig->login_password_field = 'password';
+        $grabySiteConfig->login_extra_fields = ['field=value'];
+        $grabySiteConfig->not_logged_in_xpath = '//div[@class="need-login"]';
+
+        $grabyConfigBuilderMock
+            ->method('buildForHost')
+            ->with($host)
+            ->willReturn($grabySiteConfig);
+
+        $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);
+
+        $logger = new Logger('foo');
+        $handler = new TestHandler();
+        $logger->pushHandler($handler);
+
+        $builder = new GrabySiteConfigBuilder(
+            $grabyConfigBuilderMock,
+            $tokenStorage,
+            $this->getClient()->getContainer()->get('wallabag_core.site_credential_repository'),
+            $logger
+        );
+
+        $config = $builder->buildForHost($host);
+
+        if (null === $expectedUsername && null === $expectedPassword) {
+            $this->assertFalse($config);
+
+            return;
+        }
+
+        $this->assertSame($expectedUsername, $config->getUsername());
+        $this->assertSame($expectedPassword, $config->getPassword());
+    }
 }