em->getConnection()->insert('app_log', [ 'level' => $level, 'message' => $message, 'channel' => 'app', 'path' => '/test', 'created_at' => time(), ]); } public function testNonAdminForbidden(): void { $user = $this->createUser(['ROLE_USER']); $this->authJson('GET', '/api/v1/admin/logs', $user); self::assertSame(403, $this->responseCode()); } public function testAdminSeesLogsFilteredByLevel(): void { $marker = 'ADMINLOGTEST_' . bin2hex(random_bytes(5)); $this->seedLog('error', $marker . '_err'); $this->seedLog('warning', $marker . '_warn'); $admin = $this->createUser(['ROLE_ADMIN']); $body = $this->authJson('GET', '/api/v1/admin/logs?level=error&search=' . $marker, $admin); self::assertSame(200, $this->responseCode()); self::assertTrue($body['success']); self::assertCount(1, $body['data']); self::assertSame('error', $body['data'][0]['level']); self::assertSame($marker . '_err', $body['data'][0]['message']); self::assertArrayHasKey('totalRecords', $body['meta']); $this->em->getConnection()->executeStatement('DELETE FROM app_log WHERE message LIKE ?', [$marker . '%']); } }