Completed
Push — master ( 2b9271...11d3cd )
by
unknown
13:17
created

testCheckPostAuthWithNonExpiredUser()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 0
dl 0
loc 28
rs 9.472
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
5
 * @license For full copyright and license information view LICENSE file distributed with this source code.
6
 */
7
declare(strict_types=1);
8
9
namespace eZ\Publish\Core\MVC\Symfony\Security\Tests;
10
11
use eZ\Publish\API\Repository\UserService;
12
use eZ\Publish\API\Repository\Values\Content\ContentInfo;
13
use eZ\Publish\API\Repository\Values\User\PasswordInfo;
14
use eZ\Publish\Core\MVC\Symfony\Security\User;
15
use eZ\Publish\Core\MVC\Symfony\Security\UserChecker;
16
use eZ\Publish\Core\Repository\Values\Content\Content;
17
use eZ\Publish\Core\Repository\Values\Content\VersionInfo;
18
use PHPUnit\Framework\TestCase;
19
use Symfony\Component\Security\Core\Exception\CredentialsExpiredException;
20
use Symfony\Component\Security\Core\Exception\DisabledException;
21
use eZ\Publish\Core\Repository\Values\User\User as APIUser;
22
use Throwable;
23
use DateTimeImmutable;
24
25
final class UserCheckerTest extends TestCase
26
{
27
    /** @var \PHPUnit\Framework\MockObject\MockObject */
28
    private $userServiceMock;
29
30
    /** @var \eZ\Publish\Core\MVC\Symfony\Security\UserChecker */
31
    private $userChecker;
32
33
    protected function setUp(): void
34
    {
35
        $this->userServiceMock = $this->createMock(UserService::class);
36
        $this->userChecker = new UserChecker($this->userServiceMock);
37
    }
38
39
    public function testCheckPreAuthWithEnabledUser(): void
40
    {
41
        $apiUser = new APIUser(
42
            [
43
                'content' => new Content(
44
                    [
45
                        'versionInfo' => new VersionInfo(
46
                            [
47
                                'contentInfo' => new ContentInfo(),
48
                            ]
49
                        ),
50
                    ]
51
                ),
52
                'enabled' => true,
53
            ]
54
        );
55
56
        try {
57
            $this->userChecker->checkPreAuth(new User($apiUser));
58
        } catch (Throwable $t) {
59
            self::fail('Error was not expected to be raised.');
60
        }
61
    }
62
63
    public function testCheckPreAuthWithDisabledUser(): void
64
    {
65
        $apiUser = new APIUser(
66
            [
67
                'content' => new Content(
68
                    [
69
                        'versionInfo' => new VersionInfo(
70
                            [
71
                                'contentInfo' => new ContentInfo(),
72
                            ]
73
                        ),
74
                    ]
75
                ),
76
                'enabled' => false,
77
            ]
78
        );
79
80
        $this->expectException(DisabledException::class);
81
        $this->expectExceptionMessage('User account is locked.');
82
83
        $this->userChecker->checkPreAuth(new User($apiUser));
84
    }
85
86
    public function testCheckPostAuthWithNonExpiredUser(): void
87
    {
88
        $apiUser = new APIUser(
89
            [
90
                'content' => new Content(
91
                    [
92
                        'versionInfo' => new VersionInfo(
93
                            [
94
                                'contentInfo' => new ContentInfo(),
95
                            ]
96
                        ),
97
                    ]
98
                ),
99
            ]
100
        );
101
102
        $this->userServiceMock
103
            ->expects(self::once())
104
            ->method('getPasswordInfo')
105
            ->with(self::identicalTo($apiUser))
106
            ->willReturn(new PasswordInfo());
107
108
        try {
109
            $this->userChecker->checkPostAuth(new User($apiUser));
110
        } catch (Throwable $t) {
111
            self::fail('Error was not expected to be raised.');
112
        }
113
    }
114
115
    public function testCheckPostAuthWithExpiredUser(): void
116
    {
117
        $apiUser = new APIUser(
118
            [
119
                'content' => new Content(
120
                    [
121
                        'versionInfo' => new VersionInfo(
122
                            [
123
                                'contentInfo' => new ContentInfo(),
124
                            ]
125
                        ),
126
                    ]
127
                ),
128
            ]
129
        );
130
131
        $this->userServiceMock
132
            ->expects(self::once())
133
            ->method('getPasswordInfo')
134
            ->with(self::identicalTo($apiUser))
135
            ->willReturn(
136
                new PasswordInfo(
137
                    DateTimeImmutable::createFromFormat('Y-m-d', '2019-01-01')
138
                )
139
            );
140
141
        $this->expectException(CredentialsExpiredException::class);
142
        $this->expectExceptionMessage('User account has expired.');
143
144
        $this->userChecker->checkPostAuth(new User($apiUser));
145
    }
146
}
147