feat: implement 3 variants

Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
2026-08-29 19:10:48 -04:00
parent f39ad1804d
commit a0093c9547
4 changed files with 26 additions and 20 deletions
@@ -62,8 +62,9 @@ final class TenantPreviewVariants extends JsonSerializableObject
private static function defaults(): array private static function defaults(): array
{ {
return [ return [
'popover' => new TenantPreviewVariant(640, 440, 'image/webp', 80), 'thumbnail' => new TenantPreviewVariant(128, 128, 'image/webp', 70),
'thumbnail' => new TenantPreviewVariant(256, 256, 'image/webp', 75), 'inline' => new TenantPreviewVariant(640, 640, 'image/webp', 80),
'fullscreen' => new TenantPreviewVariant(2560, 2560, 'image/webp', 90),
]; ];
} }
} }
+1 -1
View File
@@ -32,7 +32,7 @@ final readonly class PreviewManager
public function fetch( public function fetch(
string $tenantId, string $tenantId,
PreviewSource $source, PreviewSource $source,
string $variant = 'popover', string $variant = 'inline',
): ?Preview { ): ?Preview {
$tenant = $this->tenants->fetchById($tenantId); $tenant = $this->tenants->fetchById($tenantId);
if ($tenant === null) { if ($tenant === null) {
@@ -19,11 +19,16 @@ final class PreviewConfigurationTest extends TestCase
self::assertTrue($preview->enabled()); self::assertTrue($preview->enabled());
self::assertSame('previews', $preview->store()); self::assertSame('previews', $preview->store());
self::assertSame(26214400, $preview->maxSourceSize()); self::assertSame(26214400, $preview->maxSourceSize());
self::assertSame(640, $preview->variants()->variant('popover')?->width); self::assertSame(128, $preview->variants()->variant('thumbnail')?->width);
self::assertSame(440, $preview->variants()->variant('popover')?->height); self::assertSame(128, $preview->variants()->variant('thumbnail')?->height);
self::assertSame('image/webp', $preview->variants()->variant('popover')?->format); self::assertSame(70, $preview->variants()->variant('thumbnail')?->quality);
self::assertSame(80, $preview->variants()->variant('popover')?->quality); self::assertSame(640, $preview->variants()->variant('inline')?->width);
self::assertSame(256, $preview->variants()->variant('thumbnail')?->width); self::assertSame(640, $preview->variants()->variant('inline')?->height);
self::assertSame('image/webp', $preview->variants()->variant('inline')?->format);
self::assertSame(80, $preview->variants()->variant('inline')?->quality);
self::assertSame(2560, $preview->variants()->variant('fullscreen')?->width);
self::assertSame(2560, $preview->variants()->variant('fullscreen')?->height);
self::assertSame(90, $preview->variants()->variant('fullscreen')?->quality);
} }
#[Test] #[Test]
@@ -34,7 +39,7 @@ final class PreviewConfigurationTest extends TestCase
'store' => 'generated-content', 'store' => 'generated-content',
'maxSourceSize' => 1024, 'maxSourceSize' => 1024,
'variants' => [ 'variants' => [
'popover' => [ 'inline' => [
'width' => 800, 'width' => 800,
'height' => 600, 'height' => 600,
'format' => 'IMAGE/PNG', 'format' => 'IMAGE/PNG',
@@ -47,9 +52,9 @@ final class PreviewConfigurationTest extends TestCase
self::assertSame('generated-content', $configuration->preview()->store()); self::assertSame('generated-content', $configuration->preview()->store());
self::assertSame(1024, $configuration->preview()->maxSourceSize()); self::assertSame(1024, $configuration->preview()->maxSourceSize());
self::assertSame(['popover'], array_keys($configuration->preview()->variants()->all())); self::assertSame(['inline'], array_keys($configuration->preview()->variants()->all()));
self::assertSame('image/png', $configuration->preview()->variants()->variant('popover')?->format); self::assertSame('image/png', $configuration->preview()->variants()->variant('inline')?->format);
$data['variants']['popover']['format'] = 'image/png'; $data['variants']['inline']['format'] = 'image/png';
self::assertSame($data, $configuration->jsonSerialize()['preview']); self::assertSame($data, $configuration->jsonSerialize()['preview']);
} }
@@ -59,14 +64,14 @@ final class PreviewConfigurationTest extends TestCase
$configuration = (new TenantConfiguration())->jsonDeserialize([ $configuration = (new TenantConfiguration())->jsonDeserialize([
'preview' => [ 'preview' => [
'variants' => [ 'variants' => [
'popover' => ['width' => 900], 'inline' => ['width' => 900],
], ],
], ],
]); ]);
$variant = $configuration->preview()->variants()->variant('popover'); $variant = $configuration->preview()->variants()->variant('inline');
self::assertSame(900, $variant?->width); self::assertSame(900, $variant?->width);
self::assertSame(440, $variant?->height); self::assertSame(640, $variant?->height);
self::assertSame('image/webp', $variant?->format); self::assertSame('image/webp', $variant?->format);
self::assertSame(80, $variant?->quality); self::assertSame(80, $variant?->quality);
self::assertNull($configuration->preview()->variants()->variant('thumbnail')); self::assertNull($configuration->preview()->variants()->variant('thumbnail'));
@@ -88,10 +93,10 @@ final class PreviewConfigurationTest extends TestCase
{ {
yield 'invalid store' => [['store' => '../previews']]; yield 'invalid store' => [['store' => '../previews']];
yield 'zero source limit' => [['maxSourceSize' => 0]]; yield 'zero source limit' => [['maxSourceSize' => 0]];
yield 'invalid variant name' => [['variants' => ['../popover' => []]]]; yield 'invalid variant name' => [['variants' => ['../inline' => []]]];
yield 'invalid dimensions' => [['variants' => ['popover' => ['width' => 0]]]]; yield 'invalid dimensions' => [['variants' => ['inline' => ['width' => 0]]]];
yield 'invalid output MIME' => [['variants' => ['popover' => ['format' => 'webp']]]]; yield 'invalid output MIME' => [['variants' => ['inline' => ['format' => 'webp']]]];
yield 'invalid quality' => [['variants' => ['popover' => ['quality' => 101]]]]; yield 'invalid quality' => [['variants' => ['inline' => ['quality' => 101]]]];
yield 'enabled without variants' => [['enabled' => true, 'variants' => []]]; yield 'enabled without variants' => [['enabled' => true, 'variants' => []]];
} }
@@ -324,7 +324,7 @@ final class PreviewManagerTest extends TestCase
private function request(): PreviewRequest private function request(): PreviewRequest
{ {
return new PreviewRequest(640, 440, 'image/webp', 80); return new PreviewRequest(640, 640, 'image/webp', 80);
} }
private function resource(string $mimeType = 'image/webp'): BinaryResource private function resource(string $mimeType = 'image/webp'): BinaryResource