createLibraryImage(12, 'Hero shot'); $post = Post::query()->create([ 'user_id' => User::factory()->create()->id, 'title' => 'Media embed post', 'slug' => 'media-embed-post', 'content' => "Intro\n\n![Hero shot](media:{$media->id})\n", 'content_format' => 'markdown', 'status' => 'published', 'published_at' => now()->subMinute(), ]); $html = app(PostContentRenderer::class)->render($post); $this->assertStringContainsString((string) $media->url, $html); $this->assertStringContainsString('assertStringNotContainsString('media:'.$media->id, $html); $this->assertStringContainsString("![Hero shot](media:{$media->id})", (string) $post->fresh()->content); } public function test_html_body_hydrates_media_shortcode(): void { $media = $this->createLibraryImage(21, 'Inline'); $post = Post::query()->create([ 'title' => 'HTML media post', 'content' => '

see [media='.$media->id.']

', 'content_format' => 'html', 'status' => 'published', 'published_at' => now()->subMinute(), ]); $html = app(PostContentRenderer::class)->render($post); $this->assertStringContainsString((string) $media->url, $html); $this->assertStringNotContainsString('[media='.$media->id.']', $html); } public function test_published_post_page_shows_library_image(): void { $media = $this->createLibraryImage(33, 'Cover art'); $post = Post::query()->create([ 'title' => 'Visible media post', 'slug' => 'visible-media-post', 'content' => "![Cover art](media:{$media->id})", 'content_format' => 'markdown', 'status' => 'published', 'published_at' => now()->subMinute(), 'cover_media_id' => $media->id, ]); $this->get('/posts/'.$post->slug.'.shtml') ->assertOk() ->assertSee((string) $media->url, false) ->assertDontSee('media:'.$media->id, false); $this->assertSame((string) $media->url, $post->fresh()->coverImageUrl()); } public function test_missing_media_reference_does_not_crash_render(): void { $post = Post::query()->create([ 'title' => 'Broken media post', 'content' => '![gone](media:99999)', 'content_format' => 'markdown', 'status' => 'published', 'published_at' => now()->subMinute(), ]); $html = app(PostContentRenderer::class)->render($post); $this->assertIsString($html); $this->assertStringContainsString('media:99999', $html); } private function createLibraryImage(int $id, string $alt): MediaLibrary { $media = new MediaLibrary; $media->forceFill([ 'id' => $id, 'disk' => 'public', 'path' => 'media/library/articles/image/test-'.$id.'.jpg', 'original_name' => 'test-'.$id.'.jpg', 'extension' => 'jpg', 'mime_type' => 'image/jpeg', 'size' => 128, 'type' => MediaLibrary::TYPE_IMAGE, 'source' => MediaLibrary::SOURCE_ADMIN, 'folder' => 'articles', 'alt_text' => $alt, ]); $media->save(); return $media->fresh(); } }