feat: use xpier media library for uploads and markdown embeds

Store media:ID in post bodies instead of CDN URLs, and keep sablog attach tokens as a fallback.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
gouki
2026-09-16 19:03:52 +00:00
co-authored by Cursor
parent f6a9a8ea50
commit f81397a289
38 changed files with 5390 additions and 2059 deletions
+57
View File
@@ -0,0 +1,57 @@
<?php
declare(strict_types=1);
namespace Tests\Unit;
use App\Blog\Support\MarkdownMediaEmbed;
use Tests\TestCase;
use Xpier\FilamentMediaLibrary\Models\MediaLibrary;
class MarkdownMediaEmbedTest extends TestCase
{
public function test_markdown_image_snippet_uses_media_protocol_not_url(): void
{
$media = new MediaLibrary([
'alt_text' => 'Hero shot',
'type' => MediaLibrary::TYPE_IMAGE,
'mime_type' => 'image/jpeg',
'original_name' => 'hero.jpg',
'path' => 'media/library/articles/hero.jpg',
]);
$media->id = 12;
$snippet = app(MarkdownMediaEmbed::class)->snippet($media, 'markdown');
$this->assertSame('![Hero shot](media:12)', $snippet);
$this->assertStringNotContainsString('http', $snippet);
$this->assertStringNotContainsString('/storage/', $snippet);
}
public function test_markdown_file_snippet_is_a_link_reference(): void
{
$media = new MediaLibrary([
'alt_text' => '',
'type' => MediaLibrary::TYPE_FILE,
'mime_type' => 'application/pdf',
'original_name' => 'notes.pdf',
'path' => 'media/library/articles/notes.pdf',
]);
$media->id = 8;
$this->assertSame('[notes.pdf](media:8)', app(MarkdownMediaEmbed::class)->snippet($media, 'markdown'));
}
public function test_html_snippet_uses_shortcode(): void
{
$media = new MediaLibrary([
'type' => MediaLibrary::TYPE_IMAGE,
'mime_type' => 'image/png',
'original_name' => 'pic.png',
'path' => 'pic.png',
]);
$media->id = 3;
$this->assertSame('[media=3]', app(MarkdownMediaEmbed::class)->snippet($media, 'html'));
}
}