92 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
		
		
			
		
	
	
			92 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
|  | <?php | ||
|  | 
 | ||
|  | namespace Tests\Unit\Classes; | ||
|  | 
 | ||
|  | use PHPUnit\Framework\TestCase; | ||
|  | 
 | ||
|  | class SessionTest extends TestCase | ||
|  | { | ||
|  |     protected function setUp(): void | ||
|  |     { | ||
|  |         parent::setUp(); | ||
|  |         require_once __DIR__ . '/../../../app/classes/session.php'; | ||
|  |         $_SESSION = []; | ||
|  |     } | ||
|  | 
 | ||
|  |     protected function tearDown(): void | ||
|  |     { | ||
|  |         parent::tearDown(); | ||
|  |         $_SESSION = []; | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testGetUsername() | ||
|  |     { | ||
|  |         $_SESSION['username'] = 'testuser'; | ||
|  |         $this->assertEquals('testuser', \Session::getUsername()); | ||
|  |         unset($_SESSION['username']); | ||
|  |         $this->assertNull(\Session::getUsername()); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testGetUserId() | ||
|  |     { | ||
|  |         $_SESSION['user_id'] = 123; | ||
|  |         $this->assertEquals(123, \Session::getUserId()); | ||
|  |         unset($_SESSION['user_id']); | ||
|  |         $this->assertNull(\Session::getUserId()); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testIsValidSession() | ||
|  |     { | ||
|  |         // Invalid without required variables
 | ||
|  |         $this->assertFalse(\Session::isValidSession()); | ||
|  | 
 | ||
|  |         // Valid with required variables
 | ||
|  |         $_SESSION['user_id'] = 123; | ||
|  |         $_SESSION['username'] = 'testuser'; | ||
|  |         $_SESSION['LAST_ACTIVITY'] = time(); | ||
|  |         $this->assertTrue(\Session::isValidSession()); | ||
|  | 
 | ||
|  |         // Invalid after timeout
 | ||
|  |         $_SESSION['LAST_ACTIVITY'] = time() - 8000; // More than 2 hours
 | ||
|  |         $this->assertFalse(\Session::isValidSession()); | ||
|  | 
 | ||
|  |         // Valid with remember me
 | ||
|  |         $_SESSION = [ | ||
|  |             'user_id' => 123, | ||
|  |             'username' => 'testuser', | ||
|  |             'REMEMBER_ME' => true, | ||
|  |             'LAST_ACTIVITY' => time() - 8000 | ||
|  |         ]; | ||
|  |         $this->assertTrue(\Session::isValidSession()); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSetRememberMe() | ||
|  |     { | ||
|  |         \Session::setRememberMe(true); | ||
|  |         $this->assertTrue($_SESSION['REMEMBER_ME']); | ||
|  |         \Session::setRememberMe(false); | ||
|  |         $this->assertFalse($_SESSION['REMEMBER_ME']); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function test2FASession() | ||
|  |     { | ||
|  |         // Test storing 2FA pending info
 | ||
|  |         \Session::store2FAPending(123, 'testuser', true); | ||
|  |         $this->assertEquals(123, $_SESSION['2fa_pending_user_id']); | ||
|  |         $this->assertEquals('testuser', $_SESSION['2fa_pending_username']); | ||
|  |         $this->assertTrue(isset($_SESSION['2fa_pending_remember'])); | ||
|  | 
 | ||
|  |         // Test getting 2FA pending info
 | ||
|  |         $pendingInfo = \Session::get2FAPending(); | ||
|  |         $this->assertEquals([ | ||
|  |             'user_id' => 123, | ||
|  |             'username' => 'testuser', | ||
|  |             'remember_me' => true | ||
|  |         ], $pendingInfo); | ||
|  | 
 | ||
|  |         // Test clearing 2FA pending info
 | ||
|  |         \Session::clear2FAPending(); | ||
|  |         $this->assertNull(\Session::get2FAPending()); | ||
|  |     } | ||
|  | } |