Chapters now carry an eyebrow ("Overview", "Prologue", ...) and a short
tag for the list/sidebar badge, instead of a bare running number, so
non-numbered entries read correctly.
New chapter: "Prologue - The Long Road to Brackenford", the session
outline formatted as a runnable document -- an at-a-glance metadata band
(levels, duration, locations, hook), the in-world courier notice as a
posted handout, numbered scenes, GM callouts for the "ask the players"
prompts, label/body rows for the skill-check clues and travel-day
prompts, a three-stage encounter block, dramatic beat lines, and a
before/after panel for the legend the party's own retelling becomes.
Cross-links the Hearthburrow to Enemies and the closing line to the
overview's "Five and the Five".
Tests: render every chapter partial headless (no HTTP/DB) so a broken
variable or path() fails loudly, check each registered chapter has its
template file, and assert the /storyline routes sit behind the login gate.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
27 lines
753 B
PHP
27 lines
753 B
PHP
<?php
|
|
|
|
namespace App\Tests\Controller;
|
|
|
|
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
|
|
|
class StorylineControllerTest extends WebTestCase
|
|
{
|
|
public function testStorylineRequiresLogin(): void
|
|
{
|
|
$client = static::createClient();
|
|
$client->request('GET', '/storyline');
|
|
|
|
self::assertResponseRedirects('/login');
|
|
}
|
|
|
|
public function testUnknownChapterAlsoGoesThroughTheLoginGate(): void
|
|
{
|
|
$client = static::createClient();
|
|
$client->request('GET', '/storyline/does-not-exist');
|
|
|
|
// Behind IS_AUTHENTICATED_FULLY, so an anonymous hit redirects rather
|
|
// than 404s; the 404 path itself is covered in the render test below.
|
|
self::assertResponseRedirects('/login');
|
|
}
|
|
}
|