SessionTest   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 75
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 37
dl 0
loc 75
rs 10
c 3
b 0
f 0
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 12 1
A testHandleWithoutGc() 0 22 1
A testHandleWithGc() 0 24 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AbterPhp\Framework\Http\Middleware;
6
7
use Opulence\Framework\Configuration\Config;
8
use Opulence\Http\Requests\Request;
9
use Opulence\Http\Responses\Response;
10
use Opulence\Sessions\ISession;
11
use PHPUnit\Framework\MockObject\MockObject;
12
use PHPUnit\Framework\TestCase;
13
use SessionHandlerInterface;
14
15
class SessionTest extends TestCase
16
{
17
    /** @var Session - System Under Test */
18
    protected Session $sut;
19
20
    protected string $sessionId = 'foo-session-id';
21
22
    /** @var ISession|MockObject */
23
    protected $sessionMock;
24
25
    /** @var SessionHandlerInterface|MockObject */
26
    protected $sessionHandlerMock;
27
28
    public function setUp(): void
29
    {
30
        parent::setUp();
31
32
        $this->sessionMock = $this->createMock(ISession::class);
33
        $this->sessionMock->expects($this->any())->method('getId')->willReturn($this->sessionId);
34
35
        $this->sessionHandlerMock = $this->getMockBuilder(SessionHandlerInterface::class)
36
            ->disableOriginalConstructor()
37
            ->getMock();
38
39
        $this->sut = new Session($this->sessionMock, $this->sessionHandlerMock);
40
    }
41
42
    public function testHandleWithoutGc(): void
43
    {
44
        Config::set('sessions', 'gc.divisor', 1);
45
        Config::set('sessions', 'gc.chance', 0);
46
47
        Config::set('sessions', 'lifetime', 0);
48
        Config::set('sessions', 'cookie.path', '');
49
        Config::set('sessions', 'cookie.domain', '');
50
        Config::set('sessions', 'cookie.isSecure', false);
51
        Config::set('sessions', 'cookie.isHttpOnly', false);
52
53
        /** @var Request|MockObject $requestMock */
54
        $requestMock = $this->createMock(Request::class);
55
56
        /** @var Response|MockObject $requestMock */
57
        $responseMock = $this->createMock(Response::class);
58
59
        $next = fn () => $responseMock;
60
61
        $actualResult = $this->sut->handle($requestMock, $next);
62
63
        $this->assertSame($responseMock, $actualResult);
64
    }
65
66
    public function testHandleWithGc(): void
67
    {
68
        Config::set('sessions', 'gc.divisor', 1);
69
        Config::set('sessions', 'gc.chance', 2);
70
71
        Config::set('sessions', 'lifetime', 0);
72
        Config::set('sessions', 'cookie.path', '');
73
        Config::set('sessions', 'cookie.domain', '');
74
        Config::set('sessions', 'cookie.isSecure', false);
75
        Config::set('sessions', 'cookie.isHttpOnly', false);
76
77
        /** @var Request|MockObject $requestMock */
78
        $requestMock = $this->createMock(Request::class);
79
80
        /** @var Response|MockObject $requestMock */
81
        $responseMock = $this->createMock(Response::class);
82
83
        $next = fn () => $responseMock;
84
85
        $this->sessionHandlerMock->expects($this->once())->method('gc');
86
87
        $actualResult = $this->sut->handle($requestMock, $next);
88
89
        $this->assertSame($responseMock, $actualResult);
90
    }
91
}
92