jilo-web/tests/Feature/Middleware/SessionMiddlewareTest.php

106 lines
3.0 KiB
PHP
Raw Normal View History

2025-02-19 13:31:01 +00:00
<?php
2025-02-20 08:41:14 +00:00
require_once dirname(__DIR__, 3) . '/app/includes/session_middleware.php';
2025-02-19 13:31:01 +00:00
use PHPUnit\Framework\TestCase;
class SessionMiddlewareTest extends TestCase
{
protected $config;
protected $app_root;
protected function setUp(): void
{
parent::setUp();
// Mock server variables
$_SERVER['HTTP_USER_AGENT'] = 'PHPUnit Test Browser';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['HTTPS'] = 'on';
// Set up test config
$this->config = [
'folder' => '/app',
'domain' => 'localhost'
];
$this->app_root = 'https://localhost/app';
2025-04-08 10:13:49 +00:00
// Initialize session variables
$_SESSION = [
'user_id' => 1,
'username' => 'testuser',
'CREATED' => time(),
'LAST_ACTIVITY' => time()
];
2025-02-19 13:31:01 +00:00
}
protected function tearDown(): void
{
parent::tearDown();
}
public function testSessionStart()
{
$result = applySessionMiddleware($this->config, $this->app_root);
$this->assertTrue($result);
$this->assertArrayHasKey('LAST_ACTIVITY', $_SESSION);
$this->assertArrayHasKey('CREATED', $_SESSION);
2025-04-08 10:13:49 +00:00
$this->assertArrayHasKey('user_id', $_SESSION);
$this->assertEquals(1, $_SESSION['user_id']);
2025-02-19 13:31:01 +00:00
}
public function testSessionTimeout()
{
2025-04-08 10:13:49 +00:00
$_SESSION['LAST_ACTIVITY'] = time() - 1500; // 25 minutes ago
2025-02-19 13:31:01 +00:00
$result = applySessionMiddleware($this->config, $this->app_root);
$this->assertFalse($result);
2025-04-08 10:13:49 +00:00
$this->assertArrayNotHasKey('user_id', $_SESSION, 'Session should be cleared after timeout');
2025-02-19 13:31:01 +00:00
}
public function testSessionRegeneration()
{
$now = time();
2025-04-08 10:13:49 +00:00
$_SESSION['CREATED'] = $now - 1900; // 31+ minutes ago
2025-02-19 13:31:01 +00:00
$result = applySessionMiddleware($this->config, $this->app_root);
$this->assertTrue($result);
2025-04-08 10:13:49 +00:00
$this->assertEquals(1, $_SESSION['user_id']);
2025-02-19 13:31:01 +00:00
$this->assertGreaterThanOrEqual($now - 1900, $_SESSION['CREATED']);
$this->assertLessThanOrEqual($now + 10, $_SESSION['CREATED']);
}
public function testRememberMe()
{
2025-04-08 10:13:49 +00:00
$_SESSION['REMEMBER_ME'] = true;
$_SESSION['LAST_ACTIVITY'] = time() - 86500; // More than 24 hours ago
2025-02-19 13:31:01 +00:00
$result = applySessionMiddleware($this->config, $this->app_root);
$this->assertTrue($result);
2025-04-08 10:13:49 +00:00
$this->assertArrayHasKey('user_id', $_SESSION);
2025-02-19 13:31:01 +00:00
}
public function testNoUserSession()
{
2025-04-08 10:13:49 +00:00
unset($_SESSION['user_id']);
2025-02-19 13:31:01 +00:00
$result = applySessionMiddleware($this->config, $this->app_root);
$this->assertFalse($result);
2025-04-08 10:13:49 +00:00
$this->assertArrayNotHasKey('user_id', $_SESSION);
2025-02-19 13:31:01 +00:00
}
public function testSessionHeaders()
{
2025-04-08 10:13:49 +00:00
$_SESSION['LAST_ACTIVITY'] = time() - 1500; // 25 minutes ago
2025-02-19 13:31:01 +00:00
$result = applySessionMiddleware($this->config, $this->app_root);
$this->assertFalse($result);
2025-04-08 10:13:49 +00:00
$this->assertArrayNotHasKey('user_id', $_SESSION, 'Session should be cleared after timeout');
2025-02-19 13:31:01 +00:00
}
}