]>
Commit | Line | Data |
---|---|---|
7aab0ecf BD |
1 | <?php |
2 | ||
3 | namespace Tests\Wallabag\CoreBundle\GuzzleSiteAuthenticator; | |
4 | ||
7aab0ecf | 5 | use Graby\SiteConfig\SiteConfig as GrabySiteConfig; |
f808b016 JB |
6 | use Monolog\Handler\TestHandler; |
7 | use Monolog\Logger; | |
4b6942d2 | 8 | use PHPUnit\Framework\TestCase; |
b8427f22 | 9 | use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage; |
f808b016 JB |
10 | use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; |
11 | use Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder; | |
7aab0ecf | 12 | |
4b6942d2 | 13 | class GrabySiteConfigBuilderTest extends TestCase |
7aab0ecf BD |
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 */ | |
b8427f22 | 21 | $grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder') |
7aab0ecf BD |
22 | ->disableOriginalConstructor() |
23 | ->getMock(); | |
24 | ||
25 | $grabySiteConfig = new GrabySiteConfig(); | |
26 | $grabySiteConfig->requires_login = true; | |
9de9f1e5 | 27 | $grabySiteConfig->login_uri = 'http://www.example.com/login'; |
7aab0ecf BD |
28 | $grabySiteConfig->login_username_field = 'login'; |
29 | $grabySiteConfig->login_password_field = 'password'; | |
662db41b | 30 | $grabySiteConfig->login_extra_fields = ['field=value']; |
7aab0ecf BD |
31 | $grabySiteConfig->not_logged_in_xpath = '//div[@class="need-login"]'; |
32 | ||
33 | $grabyConfigBuilderMock | |
34 | ->method('buildForHost') | |
35 | ->with('example.com') | |
36 | ->will($this->returnValue($grabySiteConfig)); | |
37 | ||
94b232bb JB |
38 | $logger = new Logger('foo'); |
39 | $handler = new TestHandler(); | |
40 | $logger->pushHandler($handler); | |
41 | ||
b8427f22 JB |
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 | ||
7aab0ecf BD |
62 | $this->builder = new GrabySiteConfigBuilder( |
63 | $grabyConfigBuilderMock, | |
b8427f22 JB |
64 | $tokenStorage, |
65 | $siteCrentialRepo, | |
94b232bb | 66 | $logger |
7aab0ecf BD |
67 | ); |
68 | ||
9de9f1e5 | 69 | $config = $this->builder->buildForHost('www.example.com'); |
7aab0ecf | 70 | |
38520658 | 71 | $this->assertSame('example.com', $config->getHost()); |
64a5a6cf | 72 | $this->assertTrue($config->requiresLogin()); |
38520658 JB |
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()); | |
94b232bb JB |
80 | |
81 | $records = $handler->getRecords(); | |
82 | ||
83 | $this->assertCount(1, $records, 'One log was recorded'); | |
7aab0ecf BD |
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 | ->will($this->returnValue(new GrabySiteConfig())); | |
97 | ||
94b232bb JB |
98 | $logger = new Logger('foo'); |
99 | $handler = new TestHandler(); | |
100 | $logger->pushHandler($handler); | |
101 | ||
b8427f22 JB |
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 | ||
94b232bb JB |
122 | $this->builder = new GrabySiteConfigBuilder( |
123 | $grabyConfigBuilderMock, | |
b8427f22 JB |
124 | $tokenStorage, |
125 | $siteCrentialRepo, | |
94b232bb JB |
126 | $logger |
127 | ); | |
7aab0ecf BD |
128 | |
129 | $config = $this->builder->buildForHost('unknown.com'); | |
130 | ||
94b232bb JB |
131 | $this->assertFalse($config); |
132 | ||
133 | $records = $handler->getRecords(); | |
134 | ||
135 | $this->assertCount(1, $records, 'One log was recorded'); | |
7aab0ecf | 136 | } |
8c0ba953 JB |
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 | ->will($this->returnValue($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 | } | |
7aab0ecf | 205 | } |