Failed Conditions
Push — master ( cde8a4...83021f )
by Sam
06:52
created

tillActive()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 0
dl 0
loc 8
rs 10
c 0
b 0
f 0
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 PHPUnit\Framework\TestCase;
11
use Psr\Http\Message\ResponseInterface;
12
use Psr\Http\Message\ServerRequestInterface;
13
use Psr\Http\Server\RequestHandlerInterface;
14
use Zend\Diactoros\Response;
15
use Zend\Diactoros\ServerRequest;
16
use Zend\Expressive\Session\Session;
17
use Zend\Expressive\Session\SessionInterface;
18
use Zend\Expressive\Session\SessionMiddleware;
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::assertNull(User::getCurrent());
28
    }
29
30
    public function testUserNotFound(): void
31
    {
32
        $user = null;
33
        $session = $this->process(true, $user);
34
35
        self::assertFalse($session->has('user'));
36
        self::assertNull(User::getCurrent());
37
    }
38
39
    public function testUserNoLimit(): void
40
    {
41
        $user = new User();
42
        $session = $this->process(true, $user);
43
44
        self::assertTrue($session->has('user'));
45
        self::assertSame($user, User::getCurrent());
46
    }
47
48
    private function process(bool $userInSession, ?User $user): SessionInterface
49
    {
50
        User::setCurrent(null);
51
52
        $userRepository = new class($user) extends UserRepository {
53
            private $user;
54
55
            public function __construct(?User $user)
56
            {
57
                $this->user = $user;
58
            }
59
60
            public function getOneById(int $id): ?User
61
            {
62
                return $this->user;
63
            }
64
        };
65
66
        $session = new Session([]);
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
            private $response;
76
77
            public function __construct(ResponseInterface $response)
78
            {
79
                $this->response = $response;
80
            }
81
82
            public function handle(ServerRequestInterface $request): ResponseInterface
83
            {
84
                return $this->response;
85
            }
86
        };
87
88
        $middleware = new AuthenticationMiddleware($userRepository);
89
        $middleware->process($request, $handler);
90
91
        return $session;
92
    }
93
}
94