Completed
Push — ezp27996-repository_remember_m... ( 628b75...37ac24 )
by
unknown
40:53 queued 21:34
created

testAuthenticate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 22
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

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