feat(preview): expose availability and handle missing services

Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
2026-08-31 22:40:25 -04:00
parent a0093c9547
commit 9fcfe32ea7
5 changed files with 125 additions and 11 deletions
+45 -6
View File
@@ -154,12 +154,7 @@ final class PreviewManagerTest extends TestCase
$service = $this->createMock(SystemStoreServiceInterface::class);
$service->expects(self::once())->method('stat')->willReturn(null);
$logger = $this->createMock(LoggerInterface::class);
$logger->expects(self::once())->method('warning')->with(
'Preview unavailable',
self::callback(static fn(array $context): bool =>
($context['exception'] ?? null) instanceof PreviewGenerationException
),
);
$logger->expects(self::never())->method('warning');
self::assertNull($this->manager(
$provider,
@@ -169,6 +164,50 @@ final class PreviewManagerTest extends TestCase
)->fetch('tenant-a', $this->source()));
}
#[Test]
public function missingPreviewStorageIsUnavailableWithoutLoggingOrProviderLookup(): void
{
$provider = $this->provider();
$provider->expects(self::never())->method('generate');
$providerManager = $this->createMock(ProviderManager::class);
$providerManager->expects(self::never())->method('providers');
$service = $this->createMock(SystemStoreServiceInterface::class);
$service->expects(self::never())->method('stat');
$logger = $this->createMock(LoggerInterface::class);
$logger->expects(self::never())->method('warning');
self::assertNull($this->manager(
$provider,
$service,
new TenantConfiguration(),
$providerManager,
$logger,
)->fetch('tenant-a', $this->source()));
}
#[Test]
public function reportsStorageAndGenerationAvailabilitySeparately(): void
{
$provider = $this->provider();
$providerManager = $this->createMock(ProviderManager::class);
$providerManager->expects(self::once())->method('providers')->willReturn([]);
$logger = $this->createMock(LoggerInterface::class);
$logger->expects(self::once())->method('debug')->with(
'No preview generation provider is available',
['tenantId' => 'tenant-a'],
);
self::assertSame(
['enabled' => true, 'storage' => true, 'generation' => false],
$this->manager(
$provider,
$this->createStub(SystemStoreServiceInterface::class),
providerManager: $providerManager,
logger: $logger,
)->availability('tenant-a'),
);
}
#[Test]
public function cacheKeysAreDeterministicOpaqueAndChangeWithSourceIdentity(): void
{