3 namespace Tests\Wallabag\CoreBundle\GuzzleSiteAuthenticator
;
5 use Graby\SiteConfig\SiteConfig
as GrabySiteConfig
;
6 use Monolog\Handler\TestHandler
;
8 use PHPUnit\Framework\TestCase
;
9 use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage
;
10 use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken
;
11 use Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder
;
13 class GrabySiteConfigBuilderTest
extends TestCase
15 /** @var \Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder */
18 public function testBuildConfigExists()
20 /* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */
21 $grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder')
22 ->disableOriginalConstructor()
25 $grabySiteConfig = new GrabySiteConfig();
26 $grabySiteConfig->requires_login
= true;
27 $grabySiteConfig->login_uri
= 'http://www.example.com/login';
28 $grabySiteConfig->login_username_field
= 'login';
29 $grabySiteConfig->login_password_field
= 'password';
30 $grabySiteConfig->login_extra_fields
= ['field=value'];
31 $grabySiteConfig->not_logged_in_xpath
= '//div[@class="need-login"]';
33 $grabyConfigBuilderMock
34 ->method('buildForHost')
36 ->will($this->returnValue($grabySiteConfig));
38 $logger = new Logger('foo');
39 $handler = new TestHandler();
40 $logger->pushHandler($handler);
42 $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository')
43 ->disableOriginalConstructor()
45 $siteCrentialRepo->expects($this->once())
46 ->method('findOneByHostAndUser')
47 ->with('example.com', 1)
48 ->willReturn(['username' => 'foo', 'password' => 'bar']);
50 $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
51 ->disableOriginalConstructor()
53 $user->expects($this->once())
57 $token = new UsernamePasswordToken($user, 'pass', 'provider');
59 $tokenStorage = new TokenStorage();
60 $tokenStorage->setToken($token);
62 $this->builder
= new GrabySiteConfigBuilder(
63 $grabyConfigBuilderMock,
69 $config = $this->builder
->buildForHost('www.example.com');
71 $this->assertSame('example.com', $config->getHost());
72 $this->assertTrue($config->requiresLogin());
73 $this->assertSame('http://www.example.com/login', $config->getLoginUri());
74 $this->assertSame('login', $config->getUsernameField());
75 $this->assertSame('password', $config->getPasswordField());
76 $this->assertSame(['field' => 'value'], $config->getExtraFields());
77 $this->assertSame('//div[@class="need-login"]', $config->getNotLoggedInXpath());
78 $this->assertSame('foo', $config->getUsername());
79 $this->assertSame('bar', $config->getPassword());
81 $records = $handler->getRecords();
83 $this->assertCount(1, $records, 'One log was recorded');
86 public function testBuildConfigDoesntExist()
88 /* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */
89 $grabyConfigBuilderMock = $this->getMockBuilder('\Graby\SiteConfig\ConfigBuilder')
90 ->disableOriginalConstructor()
93 $grabyConfigBuilderMock
94 ->method('buildForHost')
96 ->will($this->returnValue(new GrabySiteConfig()));
98 $logger = new Logger('foo');
99 $handler = new TestHandler();
100 $logger->pushHandler($handler);
102 $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository')
103 ->disableOriginalConstructor()
105 $siteCrentialRepo->expects($this->once())
106 ->method('findOneByHostAndUser')
107 ->with('unknown.com', 1)
110 $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
111 ->disableOriginalConstructor()
113 $user->expects($this->once())
117 $token = new UsernamePasswordToken($user, 'pass', 'provider');
119 $tokenStorage = new TokenStorage();
120 $tokenStorage->setToken($token);
122 $this->builder
= new GrabySiteConfigBuilder(
123 $grabyConfigBuilderMock,
129 $config = $this->builder
->buildForHost('unknown.com');
131 $this->assertFalse($config);
133 $records = $handler->getRecords();
135 $this->assertCount(1, $records, 'One log was recorded');