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());
 | |
|     }
 | |
| }
 |