3 namespace Tests\Wallabag\CoreBundle\GuzzleSiteAuthenticator
;
5 use Graby\SiteConfig\SiteConfig
as GrabySiteConfig
;
6 use Monolog\Handler\TestHandler
;
8 use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage
;
9 use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken
;
10 use Tests\Wallabag\CoreBundle\WallabagCoreTestCase
;
11 use Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder
;
13 class GrabySiteConfigBuilderTest
extends WallabagCoreTestCase
15 public function testBuildConfigExists()
17 $grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder')
18 ->disableOriginalConstructor()
21 $grabySiteConfig = new GrabySiteConfig();
22 $grabySiteConfig->requires_login
= true;
23 $grabySiteConfig->login_uri
= 'http://api.example.com/login';
24 $grabySiteConfig->login_username_field
= 'login';
25 $grabySiteConfig->login_password_field
= 'password';
26 $grabySiteConfig->login_extra_fields
= ['field=value'];
27 $grabySiteConfig->not_logged_in_xpath
= '//div[@class="need-login"]';
29 $grabyConfigBuilderMock
30 ->method('buildForHost')
31 ->with('api.example.com')
32 ->will($this->returnValue($grabySiteConfig));
34 $logger = new Logger('foo');
35 $handler = new TestHandler();
36 $logger->pushHandler($handler);
38 $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository')
39 ->disableOriginalConstructor()
41 $siteCrentialRepo->expects($this->once())
42 ->method('findOneByHostsAndUser')
43 ->with(['api.example.com', '.example.com'], 1)
44 ->willReturn(['username' => 'foo', 'password' => 'bar']);
46 $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
47 ->disableOriginalConstructor()
49 $user->expects($this->once())
53 $token = new UsernamePasswordToken($user, 'pass', 'provider');
55 $tokenStorage = new TokenStorage();
56 $tokenStorage->setToken($token);
58 $builder = new GrabySiteConfigBuilder(
59 $grabyConfigBuilderMock,
65 $config = $builder->buildForHost('api.example.com');
67 $this->assertSame('api.example.com', $config->getHost());
68 $this->assertTrue($config->requiresLogin());
69 $this->assertSame('http://api.example.com/login', $config->getLoginUri());
70 $this->assertSame('login', $config->getUsernameField());
71 $this->assertSame('password', $config->getPasswordField());
72 $this->assertSame(['field' => 'value'], $config->getExtraFields());
73 $this->assertSame('//div[@class="need-login"]', $config->getNotLoggedInXpath());
74 $this->assertSame('foo', $config->getUsername());
75 $this->assertSame('bar', $config->getPassword());
77 $records = $handler->getRecords();
79 $this->assertCount(1, $records, 'One log was recorded');
82 public function testBuildConfigDoesntExist()
84 $grabyConfigBuilderMock = $this->getMockBuilder('\Graby\SiteConfig\ConfigBuilder')
85 ->disableOriginalConstructor()
88 $grabyConfigBuilderMock
89 ->method('buildForHost')
91 ->will($this->returnValue(new GrabySiteConfig()));
93 $logger = new Logger('foo');
94 $handler = new TestHandler();
95 $logger->pushHandler($handler);
97 $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository')
98 ->disableOriginalConstructor()
100 $siteCrentialRepo->expects($this->once())
101 ->method('findOneByHostsAndUser')
102 ->with(['unknown.com', '.com'], 1)
105 $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
106 ->disableOriginalConstructor()
108 $user->expects($this->once())
112 $token = new UsernamePasswordToken($user, 'pass', 'provider');
114 $tokenStorage = new TokenStorage();
115 $tokenStorage->setToken($token);
117 $builder = new GrabySiteConfigBuilder(
118 $grabyConfigBuilderMock,
124 $config = $builder->buildForHost('unknown.com');
126 $this->assertFalse($config);
128 $records = $handler->getRecords();
130 $this->assertCount(1, $records, 'One log was recorded');
133 public function testBuildConfigUserNotDefined()
135 $grabyConfigBuilderMock = $this->getMockBuilder('\Graby\SiteConfig\ConfigBuilder')
136 ->disableOriginalConstructor()
139 $grabyConfigBuilderMock
140 ->method('buildForHost')
141 ->with('unknown.com')
142 ->will($this->returnValue(new GrabySiteConfig()));
144 $logger = new Logger('foo');
145 $handler = new TestHandler();
146 $logger->pushHandler($handler);
148 $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository')
149 ->disableOriginalConstructor()
152 $tokenStorage = new TokenStorage();
154 $builder = new GrabySiteConfigBuilder(
155 $grabyConfigBuilderMock,
161 $config = $builder->buildForHost('unknown.com');
163 $this->assertFalse($config);
166 public function dataProviderCredentials()
170 'host' => 'example.com',
173 'host' => 'other.example.com',
176 'host' => 'paywall.example.com',
177 'expectedUsername' => 'paywall.example',
178 'expectedPassword' => 'bar',
181 'host' => 'api.super.com',
182 'expectedUsername' => '.super',
183 'expectedPassword' => 'bar',
186 'host' => '.super.com',
187 'expectedUsername' => '.super',
188 'expectedPassword' => 'bar',
194 * @dataProvider dataProviderCredentials
196 public function testBuildConfigWithDbAccess($host, $expectedUsername = null, $expectedPassword = null)
198 $grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder')
199 ->disableOriginalConstructor()
202 $grabySiteConfig = new GrabySiteConfig();
203 $grabySiteConfig->requires_login
= true;
204 $grabySiteConfig->login_uri
= 'http://api.example.com/login';
205 $grabySiteConfig->login_username_field
= 'login';
206 $grabySiteConfig->login_password_field
= 'password';
207 $grabySiteConfig->login_extra_fields
= ['field=value'];
208 $grabySiteConfig->not_logged_in_xpath
= '//div[@class="need-login"]';
210 $grabyConfigBuilderMock
211 ->method('buildForHost')
213 ->will($this->returnValue($grabySiteConfig));
215 $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
216 ->disableOriginalConstructor()
218 $user->expects($this->once())
222 $token = new UsernamePasswordToken($user, 'pass', 'provider');
224 $tokenStorage = new TokenStorage();
225 $tokenStorage->setToken($token);
227 $logger = new Logger('foo');
228 $handler = new TestHandler();
229 $logger->pushHandler($handler);
231 $builder = new GrabySiteConfigBuilder(
232 $grabyConfigBuilderMock,
234 $this->getClient()->getContainer()->get('wallabag_core.site_credential_repository'),
238 $config = $builder->buildForHost($host);
240 if (null === $expectedUsername && null === $expectedPassword) {
241 $this->assertFalse($config);
246 $this->assertSame($expectedUsername, $config->getUsername());
247 $this->assertSame($expectedPassword, $config->getPassword());