]> git.immae.eu Git - github/wallabag/wallabag.git/blob - tests/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilderTest.php
Merge pull request #3956 from wallabag/fix/delete-cascade-oauth2
[github/wallabag/wallabag.git] / tests / Wallabag / CoreBundle / GuzzleSiteAuthenticator / GrabySiteConfigBuilderTest.php
1 <?php
2
3 namespace Tests\Wallabag\CoreBundle\GuzzleSiteAuthenticator;
4
5 use Graby\SiteConfig\SiteConfig as GrabySiteConfig;
6 use Monolog\Handler\TestHandler;
7 use Monolog\Logger;
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;
12
13 class GrabySiteConfigBuilderTest extends TestCase
14 {
15 /** @var \Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder */
16 protected $builder;
17
18 public function testBuildConfigExists()
19 {
20 /* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */
21 $grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder')
22 ->disableOriginalConstructor()
23 ->getMock();
24
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"]';
32
33 $grabyConfigBuilderMock
34 ->method('buildForHost')
35 ->with('example.com')
36 ->willReturn($grabySiteConfig);
37
38 $logger = new Logger('foo');
39 $handler = new TestHandler();
40 $logger->pushHandler($handler);
41
42 $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository')
43 ->disableOriginalConstructor()
44 ->getMock();
45 $siteCrentialRepo->expects($this->once())
46 ->method('findOneByHostAndUser')
47 ->with('example.com', 1)
48 ->willReturn(['username' => 'foo', 'password' => 'bar']);
49
50 $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
51 ->disableOriginalConstructor()
52 ->getMock();
53 $user->expects($this->once())
54 ->method('getId')
55 ->willReturn(1);
56
57 $token = new UsernamePasswordToken($user, 'pass', 'provider');
58
59 $tokenStorage = new TokenStorage();
60 $tokenStorage->setToken($token);
61
62 $this->builder = new GrabySiteConfigBuilder(
63 $grabyConfigBuilderMock,
64 $tokenStorage,
65 $siteCrentialRepo,
66 $logger
67 );
68
69 $config = $this->builder->buildForHost('www.example.com');
70
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());
80
81 $records = $handler->getRecords();
82
83 $this->assertCount(1, $records, 'One log was recorded');
84 }
85
86 public function testBuildConfigDoesntExist()
87 {
88 /* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */
89 $grabyConfigBuilderMock = $this->getMockBuilder('\Graby\SiteConfig\ConfigBuilder')
90 ->disableOriginalConstructor()
91 ->getMock();
92
93 $grabyConfigBuilderMock
94 ->method('buildForHost')
95 ->with('unknown.com')
96 ->willReturn(new GrabySiteConfig());
97
98 $logger = new Logger('foo');
99 $handler = new TestHandler();
100 $logger->pushHandler($handler);
101
102 $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository')
103 ->disableOriginalConstructor()
104 ->getMock();
105 $siteCrentialRepo->expects($this->once())
106 ->method('findOneByHostAndUser')
107 ->with('unknown.com', 1)
108 ->willReturn(null);
109
110 $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
111 ->disableOriginalConstructor()
112 ->getMock();
113 $user->expects($this->once())
114 ->method('getId')
115 ->willReturn(1);
116
117 $token = new UsernamePasswordToken($user, 'pass', 'provider');
118
119 $tokenStorage = new TokenStorage();
120 $tokenStorage->setToken($token);
121
122 $this->builder = new GrabySiteConfigBuilder(
123 $grabyConfigBuilderMock,
124 $tokenStorage,
125 $siteCrentialRepo,
126 $logger
127 );
128
129 $config = $this->builder->buildForHost('unknown.com');
130
131 $this->assertFalse($config);
132
133 $records = $handler->getRecords();
134
135 $this->assertCount(1, $records, 'One log was recorded');
136 }
137
138 public function testBuildConfigWithBadExtraFields()
139 {
140 /* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */
141 $grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder')
142 ->disableOriginalConstructor()
143 ->getMock();
144
145 $grabySiteConfig = new GrabySiteConfig();
146 $grabySiteConfig->requires_login = true;
147 $grabySiteConfig->login_uri = 'http://www.example.com/login';
148 $grabySiteConfig->login_username_field = 'login';
149 $grabySiteConfig->login_password_field = 'password';
150 $grabySiteConfig->login_extra_fields = ['field'];
151 $grabySiteConfig->not_logged_in_xpath = '//div[@class="need-login"]';
152
153 $grabyConfigBuilderMock
154 ->method('buildForHost')
155 ->with('example.com')
156 ->willReturn($grabySiteConfig);
157
158 $logger = new Logger('foo');
159 $handler = new TestHandler();
160 $logger->pushHandler($handler);
161
162 $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository')
163 ->disableOriginalConstructor()
164 ->getMock();
165 $siteCrentialRepo->expects($this->once())
166 ->method('findOneByHostAndUser')
167 ->with('example.com', 1)
168 ->willReturn(['username' => 'foo', 'password' => 'bar']);
169
170 $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
171 ->disableOriginalConstructor()
172 ->getMock();
173 $user->expects($this->once())
174 ->method('getId')
175 ->willReturn(1);
176
177 $token = new UsernamePasswordToken($user, 'pass', 'provider');
178
179 $tokenStorage = new TokenStorage();
180 $tokenStorage->setToken($token);
181
182 $this->builder = new GrabySiteConfigBuilder(
183 $grabyConfigBuilderMock,
184 $tokenStorage,
185 $siteCrentialRepo,
186 $logger
187 );
188
189 $config = $this->builder->buildForHost('www.example.com');
190
191 $this->assertSame('example.com', $config->getHost());
192 $this->assertTrue($config->requiresLogin());
193 $this->assertSame('http://www.example.com/login', $config->getLoginUri());
194 $this->assertSame('login', $config->getUsernameField());
195 $this->assertSame('password', $config->getPasswordField());
196 $this->assertSame([], $config->getExtraFields());
197 $this->assertSame('//div[@class="need-login"]', $config->getNotLoggedInXpath());
198 $this->assertSame('foo', $config->getUsername());
199 $this->assertSame('bar', $config->getPassword());
200
201 $records = $handler->getRecords();
202
203 $this->assertCount(1, $records, 'One log was recorded');
204 }
205 }