manager = new SessionManager(); } /** * Réinitialise $_SESSION après chaque test. */ protected function tearDown(): void { $_SESSION = []; } // ── isAuthenticated ──────────────────────────────────────────── /** * Sans session active, isAuthenticated() doit retourner false. */ public function testIsAuthenticatedWithoutSession(): void { $this->assertFalse($this->manager->isAuthenticated()); } /** * Après setUser(), isAuthenticated() doit retourner true. */ public function testIsAuthenticatedAfterSetUser(): void { $this->manager->setUser(1, 'alice', 'user'); $this->assertTrue($this->manager->isAuthenticated()); } // ── getUserId ────────────────────────────────────────────────── /** * Sans session active, getUserId() doit retourner null. */ public function testGetUserIdWithoutSession(): void { $this->assertNull($this->manager->getUserId()); } /** * Après setUser(), getUserId() doit retourner l'identifiant correct. */ public function testGetUserIdAfterSetUser(): void { $this->manager->setUser(42, 'alice', 'user'); $this->assertSame(42, $this->manager->getUserId()); } // ── Rôles — isAdmin / isEditor ───────────────────────────────── /** * Un utilisateur avec le rôle 'admin' doit être reconnu comme administrateur. */ public function testIsAdminWithAdminRole(): void { $this->manager->setUser(1, 'alice', 'admin'); $this->assertTrue($this->manager->isAdmin()); $this->assertFalse($this->manager->isEditor()); } /** * Un utilisateur avec le rôle 'editor' doit être reconnu comme éditeur. */ public function testIsEditorWithEditorRole(): void { $this->manager->setUser(1, 'alice', 'editor'); $this->assertFalse($this->manager->isAdmin()); $this->assertTrue($this->manager->isEditor()); } /** * Un utilisateur avec le rôle 'user' ne doit être ni admin ni éditeur. */ public function testUserRoleIsNeitherAdminNorEditor(): void { $this->manager->setUser(1, 'alice', 'user'); $this->assertFalse($this->manager->isAdmin()); $this->assertFalse($this->manager->isEditor()); } /** * Sans session active, isAdmin() doit retourner false. */ public function testIsAdminWithoutSession(): void { $this->assertFalse($this->manager->isAdmin()); } /** * Sans session active, isEditor() doit retourner false. */ public function testIsEditorWithoutSession(): void { $this->assertFalse($this->manager->isEditor()); } // ── Données en session ───────────────────────────────────────── /** * setUser() doit écrire le username et le rôle dans $_SESSION. */ public function testSetUserWritesToSession(): void { $this->manager->setUser(5, 'bob', 'editor'); $this->assertSame(5, $_SESSION['user_id']); $this->assertSame('bob', $_SESSION['username']); $this->assertSame('editor', $_SESSION['role']); } // ── destroy ──────────────────────────────────────────────────── /** * Après destroy(), isAuthenticated() doit retourner false. */ public function testDestroyClearsSession(): void { $this->manager->setUser(1, 'alice', 'user'); $this->manager->destroy(); $this->assertFalse($this->manager->isAuthenticated()); $this->assertNull($this->manager->getUserId()); $this->assertEmpty($_SESSION); } }