handle($request, []); self::assertSame(200, $response->status); self::assertStringContainsString('text/html', $response->headers['Content-Type'] ?? ''); self::assertSame('nosniff', $response->headers['X-Content-Type-Options']); self::assertStringContainsString('default-src', $response->headers['Content-Security-Policy']); self::assertStringContainsString('', $response->body); } public function testItRendersTheBundledScenariosListFromTheManifest(): void { $tmpDir = sys_get_temp_dir() . '/bf-home-bundled-' . bin2hex(random_bytes(4)); mkdir($tmpDir, 0700, true); file_put_contents( $tmpDir . '/manifest.json', json_encode([ 'skirmish' => ['name' => 'Skirmish', 'summary' => 'Open ground.'], 'hold-the-line' => ['name' => 'Hold the Line', 'summary' => 'Defend.'], ], JSON_THROW_ON_ERROR), ); foreach (['skirmish.json', 'hold-the-line.json'] as $file) { file_put_contents($tmpDir . '/' . $file, '{}'); } $handler = new GetHomePage($tmpDir); $request = new Request([], [], [], [], [], '', 'GET', '/', 'text/html', ''); $response = $handler->handle($request, []); self::assertSame(200, $response->status); self::assertStringContainsString('id="bf-bundled"', $response->body); self::assertStringContainsString('data-bf-bundle="skirmish"', $response->body); self::assertStringContainsString('data-bf-bundle="hold-the-line"', $response->body); self::assertStringContainsString('Open ground.', $response->body); self::assertStringContainsString('Defend.', $response->body); unlink($tmpDir . '/manifest.json'); foreach (['skirmish.json', 'hold-the-line.json'] as $file) { unlink($tmpDir . '/' . $file); } rmdir($tmpDir); } }