Completed
Push — 6.7 ( 730fb7...a124d5 )
by André
39:46 queued 26:19
created

getPermissionResolverMock()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 24
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 19
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 24
rs 8.9713
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\API\Repository\Repository;
12
use eZ\Publish\API\Repository\Values\User\User as ApiUser;
13
use eZ\Publish\API\Repository\Values\User\UserReference;
14
use eZ\Publish\Core\MVC\Symfony\Security\Authentication\RememberMeRepositoryAuthenticationProvider;
15
use eZ\Publish\Core\MVC\Symfony\Security\User;
16
use eZ\Publish\Core\Repository\Helper\LimitationService;
17
use eZ\Publish\Core\Repository\Helper\RoleDomainMapper;
18
use eZ\Publish\Core\Repository\Permission\PermissionResolver;
19
use eZ\Publish\SPI\Persistence\User\Handler as UserHandler;
20
use PHPUnit\Framework\TestCase;
21
use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
22
use Symfony\Component\Security\Core\Authentication\Token\RememberMeToken;
23
use Symfony\Component\Security\Core\User\UserCheckerInterface;
24
use Symfony\Component\Security\Core\User\UserInterface;
25
26
class RememberMeRepositoryAuthenticationProviderTest extends TestCase
27
{
28
    /**
29
     * @var RememberMeRepositoryAuthenticationProvider
30
     */
31
    private $authProvider;
32
33
    /**
34
     * @var \PHPUnit_Framework_MockObject_MockObject|\eZ\Publish\API\Repository\Repository
35
     */
36
    private $repository;
37
38
    protected function setUp()
39
    {
40
        parent::setUp();
41
42
        $this->repository = $this->getMock(Repository::class);
43
        $this->authProvider = new RememberMeRepositoryAuthenticationProvider(
44
            $this->getMock(UserCheckerInterface::class),
45
            'my secret',
46
            'my provider secret'
47
        );
48
        $this->authProvider->setRepository($this->repository);
49
    }
50
51
    /**
52
     * @expectedException \Symfony\Component\Security\Core\Exception\AuthenticationException
53
     * @expectedExceptionMessage The token is not supported by this authentication provider.
54
     */
55
    public function testAuthenticateUnsupportedToken()
56
    {
57
        $anonymousToken = $this
58
            ->getMockBuilder(AnonymousToken::class)
59
            ->setConstructorArgs(['secret', $this->getMock(UserInterface::class)])
60
            ->getMock();
61
        $this->authProvider->authenticate($anonymousToken);
62
    }
63
64
    /**
65
     * @expectedException \Symfony\Component\Security\Core\Exception\AuthenticationException
66
     * @expectedExceptionMessage The token is not supported by this authentication provider.
67
     */
68
    public function testAuthenticateWrongProviderKey()
69
    {
70
        $user = $this->getMock(UserInterface::class);
71
        $user
72
            ->expects($this->any())
73
            ->method('getRoles')
74
            ->will($this->returnValue([]));
75
76
        $rememberMeToken = $this
77
            ->getMockBuilder(RememberMeToken::class)
78
            ->setConstructorArgs([$user, 'wrong provider secret', 'my secret'])
79
            ->getMock();
80
        $rememberMeToken
81
            ->expects($this->any())
82
            ->method('getProviderKey')
83
            ->will($this->returnValue('wrong provider secret'));
84
85
        $this->authProvider->authenticate($rememberMeToken);
86
    }
87
88
    /**
89
     * @expectedException \Symfony\Component\Security\Core\Exception\BadCredentialsException
90
     */
91
    public function testAuthenticateWrongSecret()
92
    {
93
        $user = $this->getMock(UserInterface::class);
94
        $user
95
            ->expects($this->any())
96
            ->method('getRoles')
97
            ->will($this->returnValue([]));
98
99
        $rememberMeToken = $this
100
            ->getMockBuilder(RememberMeToken::class)
101
            ->setConstructorArgs([$user, 'my provider secret', 'the wrong secret'])
102
            ->getMock();
103
        $rememberMeToken
104
            ->expects($this->any())
105
            ->method('getProviderKey')
106
            ->will($this->returnValue('my provider secret'));
107
        $rememberMeToken
108
            ->expects($this->any())
109
            ->method('getSecret')
110
            ->will($this->returnValue('the wrong secret'));
111
112
        $this->authProvider->authenticate($rememberMeToken);
113
    }
114
115
    public function testAuthenticate()
116
    {
117
        $this->repository
118
            ->expects($this->once())
119
            ->method('getPermissionResolver')
120
            ->will($this->returnValue($this->getPermissionResolverMock()));
121
122
        $apiUser = $this->getMock(ApiUser::class);
123
        $apiUser
124
            ->expects($this->any())
125
            ->method('getUserId')
126
            ->will($this->returnValue(42));
127
128
        $tokenUser = new User($apiUser);
129
        $rememberMeToken = new RememberMeToken($tokenUser, 'my provider secret', 'my secret');
130
131
        $authenticatedToken = $this->authProvider->authenticate($rememberMeToken);
132
        $this->assertEquals(
133
            [$rememberMeToken->getProviderKey(), $rememberMeToken->getSecret(), $rememberMeToken->getUsername()],
134
            [$authenticatedToken->getProviderKey(), $authenticatedToken->getSecret(), $authenticatedToken->getUsername()]
135
        );
136
    }
137
138
    /**
139
     * @return \eZ\Publish\Core\Repository\Permission\PermissionResolver|\PHPUnit_Framework_MockObject_MockObject
140
     */
141
    private function getPermissionResolverMock()
142
    {
143
        return $this
144
            ->getMockBuilder(PermissionResolver::class)
145
            ->setMethods(null)
146
            ->setConstructorArgs(
147
                [
148
                    $this
149
                        ->getMockBuilder(RoleDomainMapper::class)
150
                        ->disableOriginalConstructor()
151
                        ->getMock(),
152
                    $this
153
                        ->getMockBuilder(LimitationService::class)
154
                        ->getMock(),
155
                    $this
156
                        ->getMockBuilder(UserHandler::class)
157
                        ->getMock(),
158
                    $this
159
                        ->getMockBuilder(UserReference::class)
160
                        ->getMock(),
161
                ]
162
            )
163
            ->getMock();
164
    }
165
}
166