Completed
Push — ezp27996-repository_remember_m... ( 0d8224...436d88 )
by
unknown
13:37
created

testAuthenticateUnsupportedToken()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
nc 1
nop 0
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * File containing the RememberMeRepositoryAuthenticationProviderTest class.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 */
9
namespace eZ\Publish\Core\MVC\Symfony\Security\Tests\Authentication;
10
11
use eZ\Publish\Core\MVC\Symfony\Security\Authentication\RememberMeRepositoryAuthenticationProvider;
12
use PHPUnit\Framework\TestCase;
13
14
class RememberMeRepositoryAuthenticationProviderTest extends TestCase
15
{
16
    /**
17
     * @var RememberMeRepositoryAuthenticationProvider
18
     */
19
    private $authProvider;
20
21
    /**
22
     * @var \PHPUnit_Framework_MockObject_MockObject|\eZ\Publish\API\Repository\Repository
23
     */
24
    private $repository;
25
26
    protected function setUp()
27
    {
28
        parent::setUp();
29
30
        $this->repository = $this->getMock('eZ\Publish\API\Repository\Repository');
31
        $this->authProvider = new RememberMeRepositoryAuthenticationProvider(
32
            $this->getMock('Symfony\Component\Security\Core\User\UserCheckerInterface'),
33
            'my secret',
34
            'my provider secret'
35
        );
36
        $this->authProvider->setRepository($this->repository);
37
    }
38
39
    public function testAuthenticateUnsupportedToken()
40
    {
41
        $anonymousToken = $this
42
            ->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\AnonymousToken')
43
            ->setConstructorArgs(['secret', $this->getMock('Symfony\Component\Security\Core\User\UserInterface')])
44
            ->getMock();
45
        $this->assertNull($this->authProvider->authenticate($anonymousToken));
46
    }
47
48
    public function testAuthenticateWrongProviderKey()
49
    {
50
        $user = $this->getMock('Symfony\Component\Security\Core\User\UserInterface');
51
        $user
52
            ->expects($this->any())
53
            ->method('getRoles')
54
            ->will($this->returnValue([]));
55
56
        $rememberMeToken = $this
57
            ->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\RememberMeToken')
58
            ->setConstructorArgs([$user, 'wrong provider secret', 'my secret'])
59
            ->getMock();
60
        $rememberMeToken
61
            ->expects($this->any())
62
            ->method('getProviderKey')
63
            ->will($this->returnValue('wrong provider secret'));
64
65
        $this->assertNull($this->authProvider->authenticate($rememberMeToken));
66
    }
67
68
    /**
69
     * @expectedException \Symfony\Component\Security\Core\Exception\BadCredentialsException
70
     */
71
    public function testAuthenticateWrongSecret()
72
    {
73
        $this->repository
74
            ->expects($this->once())
75
            ->method('getPermissionResolver')
76
            ->will($this->returnValue($this->getPermissionResolverMock()));
77
78
        $this->getPermissionResolverMock()
79
            ->expects($this->once())
80
            ->method('setCurrentUserReference');
81
82
        $user = $this->getMock('Symfony\Component\Security\Core\User\UserInterface');
83
        $user
84
            ->expects($this->any())
85
            ->method('getRoles')
86
            ->will($this->returnValue([]));
87
88
        $rememberMeToken = $this
89
            ->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\RememberMeToken')
90
            ->setConstructorArgs([$user, 'my provider secret', 'the wrong secret'])
91
            ->getMock();
92
        $rememberMeToken
93
            ->expects($this->any())
94
            ->method('getProviderKey')
95
            ->will($this->returnValue('my provider secret'));
96
        $rememberMeToken
97
            ->expects($this->any())
98
            ->method('getSecret')
99
            ->will($this->returnValue('the wrong secret'));
100
    }
101
102
    public function testAuthenticate()
103
    {
104
        $this->repository
105
            ->expects($this->once())
106
            ->method('getPermissionResolver')
107
            ->will($this->returnValue($this->getPermissionResolverMock()));
108
109
        $this->getPermissionResolverMock()
110
            ->expects($this->once())
111
            ->method('setCurrentUserReference');
112
113
        $user = $this->getMock('Symfony\Component\Security\Core\User\UserInterface');
114
        $user
115
            ->expects($this->any())
116
            ->method('getRoles')
117
            ->will($this->returnValue([]));
118
        $user
119
            ->expects($this->once())
120
            ->method('getAPIUser')
121
            ->will($this->returnValue($this->getMock('eZ\Publish\API\Repository\Values\User\User')));
122
123
        $rememberMeToken = $this
124
            ->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\RememberMeToken')
125
            ->setConstructorArgs([$user, 'my provider secret', 'my secret'])
126
            ->getMock();
127
        $rememberMeToken
128
            ->expects($this->any())
129
            ->method('getProviderKey')
130
            ->will($this->returnValue('my provider secret'));
131
        $rememberMeToken
132
            ->expects($this->any())
133
            ->method('getSecret')
134
            ->will($this->returnValue('my secret'));
135
        $rememberMeToken
136
            ->expects($this->any())
137
            ->method('getUser')
138
            ->will($this->returnValue($user));
139
        $rememberMeToken
140
            ->expects($this->any())
141
            ->method('getAttributes')
142
            ->will($this->returnValue([]));
143
144
        $this->assertSame($rememberMeToken, $this->authProvider->authenticate($rememberMeToken));
145
    }
146
147
    /**
148
     * @return \eZ\Publish\Core\Repository\Permission\PermissionResolver|\PHPUnit_Framework_MockObject_MockObject
149
     */
150
    private function getPermissionResolverMock()
151
    {
152
        return $this
153
            ->getMockBuilder('eZ\Publish\Core\Repository\Permission\PermissionResolver')
154
            ->setMethods(null)
155
            ->setConstructorArgs(
156
                [
157
                    $this
158
                        ->getMockBuilder('eZ\Publish\Core\Repository\Helper\RoleDomainMapper')
159
                        ->disableOriginalConstructor()
160
                        ->getMock(),
161
                    $this
162
                        ->getMockBuilder('eZ\Publish\Core\Repository\Helper\LimitationService')
163
                        ->getMock(),
164
                    $this
165
                        ->getMockBuilder('eZ\Publish\SPI\Persistence\User\Handler')
166
                        ->getMock(),
167
                    $this
168
                        ->getMockBuilder('eZ\Publish\API\Repository\Values\User\UserReference')
169
                        ->getMock(),
170
                ]
171
            )
172
            ->getMock();
173
    }
174
}
175