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