111 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
		
		
			
		
	
	
			111 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
|  | <?php | ||
|  | 
 | ||
|  | require_once dirname(__DIR__, 3) . '/app/includes/session_middleware.php'; | ||
|  | 
 | ||
|  | 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'; | ||
|  |     } | ||
|  | 
 | ||
|  |     protected function tearDown(): void | ||
|  |     { | ||
|  |         parent::tearDown(); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSessionStart() | ||
|  |     { | ||
|  |         $_SESSION = ['USER_ID' => 1]; | ||
|  |         $result = applySessionMiddleware($this->config, $this->app_root); | ||
|  | 
 | ||
|  |         $this->assertTrue($result); | ||
|  |         $this->assertArrayHasKey('LAST_ACTIVITY', $_SESSION); | ||
|  |         $this->assertArrayHasKey('CREATED', $_SESSION); | ||
|  |         $this->assertArrayHasKey('USER_ID', $_SESSION); | ||
|  |         $this->assertEquals(1, $_SESSION['USER_ID']); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSessionTimeout() | ||
|  |     { | ||
|  |         $_SESSION = [ | ||
|  |             'USER_ID' => 1, | ||
|  |             'LAST_ACTIVITY' => time() - 1500 // 25 minutes ago
 | ||
|  |         ]; | ||
|  | 
 | ||
|  |         $result = applySessionMiddleware($this->config, $this->app_root); | ||
|  | 
 | ||
|  |         $this->assertFalse($result); | ||
|  |         $this->assertArrayNotHasKey('USER_ID', $_SESSION, 'Session should be cleared after timeout'); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSessionRegeneration() | ||
|  |     { | ||
|  |         $now = time(); | ||
|  |         $_SESSION = [ | ||
|  |             'USER_ID' => 1, | ||
|  |             'CREATED' => $now - 1900 // 31+ minutes ago
 | ||
|  |         ]; | ||
|  | 
 | ||
|  |         $result = applySessionMiddleware($this->config, $this->app_root); | ||
|  | 
 | ||
|  |         $this->assertTrue($result); | ||
|  |         $this->assertEquals(1, $_SESSION['USER_ID']); | ||
|  |         $this->assertGreaterThanOrEqual($now - 1900, $_SESSION['CREATED']); | ||
|  |         $this->assertLessThanOrEqual($now + 10, $_SESSION['CREATED']); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testRememberMe() | ||
|  |     { | ||
|  |         $_SESSION = [ | ||
|  |             'USER_ID' => 1, | ||
|  |             'REMEMBER_ME' => true, | ||
|  |             'LAST_ACTIVITY' => time() - 86500 // More than 24 hours ago
 | ||
|  |         ]; | ||
|  | 
 | ||
|  |         $result = applySessionMiddleware($this->config, $this->app_root); | ||
|  | 
 | ||
|  |         $this->assertTrue($result); | ||
|  |         $this->assertArrayHasKey('USER_ID', $_SESSION); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testNoUserSession() | ||
|  |     { | ||
|  |         $_SESSION = []; | ||
|  |         $result = applySessionMiddleware($this->config, $this->app_root); | ||
|  | 
 | ||
|  |         $this->assertFalse($result); | ||
|  |         $this->assertArrayNotHasKey('USER_ID', $_SESSION); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSessionHeaders() | ||
|  |     { | ||
|  |         $_SESSION = [ | ||
|  |             'USER_ID' => 1, | ||
|  |             'LAST_ACTIVITY' => time() - 1500 // 25 minutes ago
 | ||
|  |         ]; | ||
|  | 
 | ||
|  |         $result = applySessionMiddleware($this->config, $this->app_root); | ||
|  | 
 | ||
|  |         $this->assertFalse($result); | ||
|  |         $this->assertArrayNotHasKey('USER_ID', $_SESSION, 'Session should be cleared after timeout'); | ||
|  |     } | ||
|  | } |