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