current()->create([ 'title' => 'Fantasy Realms', 'slug' => 'fantasy-realms-world', ]); $story = WorldWebStory::factory()->visible()->for($world)->create([ 'slug' => 'fantasy-realms', 'title' => 'Fantasy Realms', 'excerpt' => 'A cinematic journey through magical wallpapers, enchanted landscapes, and dreamlike digital art.', 'poster_portrait_path' => 'https://files.skinbase.org/web-stories/worlds/fantasy-realms/poster-portrait.webp', 'publisher_logo_path' => 'https://cdn.skinbase.org/images/skinbase_logo_96.webp', ]); foreach (range(1, 5) as $position) { WorldWebStoryPage::factory()->for($story, 'story')->create([ 'position' => $position, 'headline' => 'Page ' . $position, 'background_path' => 'https://files.skinbase.org/web-stories/worlds/fantasy-realms/pages/page-0' . $position . '.webp', 'background_mobile_path' => 'https://files.skinbase.org/web-stories/worlds/fantasy-realms/pages/page-0' . $position . '.webp', 'alt_text' => 'Page ' . $position, ]); } $response = $this->get(route('web-stories.show', ['slug' => $story->slug])); $response->assertOk(); $response->assertSee('assertSee('assertSee('publisher-logo-src="https://cdn.skinbase.org/images/skinbase_logo_96.webp"', false); $response->assertSee('poster-portrait-src="https://files.skinbase.org/web-stories/worlds/fantasy-realms/poster-portrait.webp"', false); $response->assertSee('', false); $response->assertDontSee('noindex,follow', false); expect(substr_count((string) $response->getContent(), 'toBeGreaterThanOrEqual(5); }); it('does not expose draft world web stories publicly', function (): void { $world = World::factory()->current()->create(); $story = WorldWebStory::factory()->for($world)->create([ 'slug' => 'draft-world-story', 'status' => WorldWebStory::STATUS_DRAFT, ]); $this->get(route('web-stories.show', ['slug' => $story->slug]))->assertNotFound(); }); it('renders the web stories index with published stories only', function (): void { $world = World::factory()->current()->create([ 'title' => 'Spring Vibes', 'slug' => 'spring-vibes-world', ]); $visible = WorldWebStory::factory()->visible()->for($world)->create([ 'slug' => 'spring-vibes', 'title' => 'Spring Vibes', ]); $draft = WorldWebStory::factory()->for($world)->create([ 'slug' => 'hidden-story', 'title' => 'Hidden Story', ]); $response = $this->get(route('web-stories.index')); $response->assertOk(); $response->assertSee($visible->title); $response->assertDontSee($draft->title); }); it('includes visible web stories in the dedicated sitemap only', function (): void { $world = World::factory()->current()->create(); $visible = WorldWebStory::factory()->visible()->for($world)->create([ 'slug' => 'hello-again', ]); WorldWebStory::factory()->published()->for($world)->create([ 'slug' => 'noindex-story', 'noindex' => true, ]); WorldWebStory::factory()->for($world)->create([ 'slug' => 'draft-story', ]); $built = app(SitemapBuildService::class)->buildNamed('web-stories', force: true, persist: false); expect($built)->not->toBeNull(); $path = public_path('sitemaps/web-stories.xml'); if (! is_dir(dirname($path))) { mkdir(dirname($path), 0777, true); } file_put_contents($path, $built['content']); $this->get('/sitemaps/web-stories.xml')->assertOk(); $xml = file_get_contents($path); expect(str_contains($xml, route('web-stories.show', ['slug' => $visible->slug])))->toBeTrue(); expect(str_contains($xml, 'noindex-story'))->toBeFalse(); expect(str_contains($xml, 'draft-story'))->toBeFalse(); });