AuthenticationMiddlewareTest.php$1 ➔ process()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 38

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 38
rs 9.312
c 0
b 0
f 0
cc 1

4 Methods

Rating   Name   Duplication   Size   Complexity  
A AuthenticationMiddlewareTest.php$0 ➔ getOneById() 0 3 1
A AuthenticationMiddlewareTest.php$1 ➔ __construct() 0 2 1
A AuthenticationMiddlewareTest.php$0 ➔ __construct() 0 2 1
A AuthenticationMiddlewareTest.php$1 ➔ handle() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ApplicationTest\Middleware;
6
7
use Application\Middleware\AuthenticationMiddleware;
8
use Application\Model\User;
9
use Application\Repository\UserRepository;
10
use Laminas\Diactoros\Response;
11
use Laminas\Diactoros\ServerRequest;
12
use Mezzio\Session\Session;
13
use Mezzio\Session\SessionInterface;
14
use Mezzio\Session\SessionMiddleware;
15
use PHPUnit\Framework\TestCase;
16
use Psr\Http\Message\ResponseInterface;
17
use Psr\Http\Message\ServerRequestInterface;
18
use Psr\Http\Server\RequestHandlerInterface;
19
20
class AuthenticationMiddlewareTest extends TestCase
21
{
22
    public function testEmptySession(): void
23
    {
24
        $session = $this->process(false, null);
25
26
        self::assertFalse($session->has('user'));
27
        self::assertTrue($session->has('other'));
28
        self::assertNull(User::getCurrent());
29
    }
30
31
    public function testUserNotFound(): void
32
    {
33
        $user = null;
34
        $session = $this->process(true, $user);
35
36
        self::assertFalse($session->has('user'));
37
        self::assertFalse($session->has('other'));
38
        self::assertNull(User::getCurrent());
39
    }
40
41
    public function testUserNoLimit(): void
42
    {
43
        $user = new User();
44
        $session = $this->process(true, $user);
45
46
        self::assertTrue($session->has('user'));
47
        self::assertTrue($session->has('other'));
48
        self::assertSame($user, User::getCurrent());
49
    }
50
51
    private function process(bool $userInSession, ?User $user): SessionInterface
52
    {
53
        User::setCurrent(null);
54
55
        $userRepository = new class($user) extends UserRepository {
56
            public function __construct(private readonly ?User $user)
57
            {
58
            }
59
60
            public function getOneById(int $id): ?User
61
            {
62
                return $this->user;
63
            }
64
        };
65
66
        $session = new Session(['other' => 'foo']);
67
        if ($userInSession) {
68
            $session->set('user', 123);
69
        }
70
        $request = new ServerRequest();
71
        $request = $request->withAttribute(SessionMiddleware::SESSION_ATTRIBUTE, $session);
72
73
        $response = new Response();
74
        $handler = new class($response) implements RequestHandlerInterface {
75
            public function __construct(private readonly ResponseInterface $response)
76
            {
77
            }
78
79
            public function handle(ServerRequestInterface $request): ResponseInterface
80
            {
81
                return $this->response;
82
            }
83
        };
84
85
        $middleware = new AuthenticationMiddleware($userRepository);
86
        $middleware->process($request, $handler);
87
88
        return $session;
89
    }
90
}
91