assertEquals('user', $normalUser['role'], 'Ohne Angabe wird ein Benutzer mit Rolle "user" angelegt'); User::create('roletest-admin', 'password123', 'admin'); $admin = User::findByUsername('roletest-admin'); $this->assertEquals('admin', $admin['role'], 'Explizit angelegter Benutzer erhält die Rolle "admin"'); User::setRole((int)$normalUser['id'], 'admin'); $promoted = User::find((int)$normalUser['id']); $this->assertEquals('admin', $promoted['role'], 'setRole() befördert einen Benutzer nachträglich zum Admin'); $listed = User::all(); $found = null; foreach ($listed as $u) { if ($u['id'] === $admin['id']) { $found = $u; break; } } $this->assertNotEmpty($found, 'User::all() liefert den angelegten Admin-Benutzer'); $this->assertEquals('admin', $found['role'] ?? null, 'User::all() liefert das Rollen-Feld mit'); // Auth::isAdmin() liest ausschließlich aus der Session (kein DB-Zugriff), // damit sich die Prüfung ohne echten Request isoliert testen lässt. $backup = $_SESSION ?? null; try { $_SESSION = []; $this->assert(!Auth::isAdmin(), 'Ohne Session-Rolle gilt der Benutzer nicht als Admin'); $_SESSION['role'] = 'user'; $this->assert(!Auth::isAdmin(), 'Rolle "user" in der Session ist kein Admin'); $_SESSION['role'] = 'admin'; $this->assert(Auth::isAdmin(), 'Rolle "admin" in der Session wird als Admin erkannt'); } finally { $_SESSION = $backup ?? []; } } }