]> git.immae.eu Git - github/wallabag/wallabag.git/blob - tests/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilderTest.php
1e1e8989b76417e9220db8b95094db7626103deb
[github/wallabag/wallabag.git] / tests / Wallabag / CoreBundle / GuzzleSiteAuthenticator / GrabySiteConfigBuilderTest.php
1 <?php
2
3 namespace Tests\Wallabag\CoreBundle\GuzzleSiteAuthenticator;
4
5 use Monolog\Handler\TestHandler;
6 use Monolog\Logger;
7 use BD\GuzzleSiteAuthenticator\SiteConfig\SiteConfig;
8 use Graby\SiteConfig\SiteConfig as GrabySiteConfig;
9 use PHPUnit_Framework_TestCase;
10 use Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder;
11 use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
12 use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
13
14 class GrabySiteConfigBuilderTest extends PHPUnit_Framework_TestCase
15 {
16 /** @var \Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder */
17 protected $builder;
18
19 public function testBuildConfigExists()
20 {
21 /* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */
22 $grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder')
23 ->disableOriginalConstructor()
24 ->getMock();
25
26 $grabySiteConfig = new GrabySiteConfig();
27 $grabySiteConfig->requires_login = true;
28 $grabySiteConfig->login_uri = 'http://www.example.com/login';
29 $grabySiteConfig->login_username_field = 'login';
30 $grabySiteConfig->login_password_field = 'password';
31 $grabySiteConfig->login_extra_fields = ['field=value'];
32 $grabySiteConfig->not_logged_in_xpath = '//div[@class="need-login"]';
33
34 $grabyConfigBuilderMock
35 ->method('buildForHost')
36 ->with('example.com')
37 ->will($this->returnValue($grabySiteConfig));
38
39 $logger = new Logger('foo');
40 $handler = new TestHandler();
41 $logger->pushHandler($handler);
42
43 $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository')
44 ->disableOriginalConstructor()
45 ->getMock();
46 $siteCrentialRepo->expects($this->once())
47 ->method('findOneByHostAndUser')
48 ->with('example.com', 1)
49 ->willReturn(['username' => 'foo', 'password' => 'bar']);
50
51 $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
52 ->disableOriginalConstructor()
53 ->getMock();
54 $user->expects($this->once())
55 ->method('getId')
56 ->willReturn(1);
57
58 $token = new UsernamePasswordToken($user, 'pass', 'provider');
59
60 $tokenStorage = new TokenStorage();
61 $tokenStorage->setToken($token);
62
63 $this->builder = new GrabySiteConfigBuilder(
64 $grabyConfigBuilderMock,
65 $tokenStorage,
66 $siteCrentialRepo,
67 $logger
68 );
69
70 $config = $this->builder->buildForHost('www.example.com');
71
72 $this->assertEquals(
73 new SiteConfig([
74 'host' => 'example.com',
75 'requiresLogin' => true,
76 'loginUri' => 'http://www.example.com/login',
77 'usernameField' => 'login',
78 'passwordField' => 'password',
79 'extraFields' => ['field' => 'value'],
80 'notLoggedInXpath' => '//div[@class="need-login"]',
81 'username' => 'foo',
82 'password' => 'bar',
83 ]),
84 $config
85 );
86
87 $records = $handler->getRecords();
88
89 $this->assertCount(1, $records, 'One log was recorded');
90 }
91
92 public function testBuildConfigDoesntExist()
93 {
94 /* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */
95 $grabyConfigBuilderMock = $this->getMockBuilder('\Graby\SiteConfig\ConfigBuilder')
96 ->disableOriginalConstructor()
97 ->getMock();
98
99 $grabyConfigBuilderMock
100 ->method('buildForHost')
101 ->with('unknown.com')
102 ->will($this->returnValue(new GrabySiteConfig()));
103
104 $logger = new Logger('foo');
105 $handler = new TestHandler();
106 $logger->pushHandler($handler);
107
108 $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository')
109 ->disableOriginalConstructor()
110 ->getMock();
111 $siteCrentialRepo->expects($this->once())
112 ->method('findOneByHostAndUser')
113 ->with('unknown.com', 1)
114 ->willReturn(null);
115
116 $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
117 ->disableOriginalConstructor()
118 ->getMock();
119 $user->expects($this->once())
120 ->method('getId')
121 ->willReturn(1);
122
123 $token = new UsernamePasswordToken($user, 'pass', 'provider');
124
125 $tokenStorage = new TokenStorage();
126 $tokenStorage->setToken($token);
127
128 $this->builder = new GrabySiteConfigBuilder(
129 $grabyConfigBuilderMock,
130 $tokenStorage,
131 $siteCrentialRepo,
132 $logger
133 );
134
135 $config = $this->builder->buildForHost('unknown.com');
136
137 $this->assertFalse($config);
138
139 $records = $handler->getRecords();
140
141 $this->assertCount(1, $records, 'One log was recorded');
142 }
143 }