mirror of
https://github.com/usetrmnl/byos_laravel.git
synced 2026-01-14 15:37:53 +00:00
fix: restore plugin image cache for OG device model
Some checks are pending
tests / ci (push) Waiting to run
Some checks are pending
tests / ci (push) Waiting to run
This commit is contained in:
parent
2ed3fd5ca9
commit
51af95da2c
2 changed files with 63 additions and 3 deletions
|
|
@ -353,20 +353,27 @@ class ImageGenerationService
|
||||||
public static function resetIfNotCacheable(?Plugin $plugin): void
|
public static function resetIfNotCacheable(?Plugin $plugin): void
|
||||||
{
|
{
|
||||||
if ($plugin?->id) {
|
if ($plugin?->id) {
|
||||||
// Check if any devices have custom dimensions or use DeviceModels
|
// Check if any devices have custom dimensions or use non-standard DeviceModels
|
||||||
$hasCustomDimensions = Device::query()
|
$hasCustomDimensions = Device::query()
|
||||||
->where(function ($query) {
|
->where(function ($query) {
|
||||||
$query->where('width', '!=', 800)
|
$query->where('width', '!=', 800)
|
||||||
->orWhere('height', '!=', 480)
|
->orWhere('height', '!=', 480)
|
||||||
->orWhere('rotate', '!=', 0);
|
->orWhere('rotate', '!=', 0);
|
||||||
})
|
})
|
||||||
->orWhereNotNull('device_model_id')
|
->orWhereHas('deviceModel', function ($query) {
|
||||||
|
// Only allow caching if all device models have standard dimensions (800x480, rotation=0)
|
||||||
|
$query->where(function ($subQuery) {
|
||||||
|
$subQuery->where('width', '!=', 800)
|
||||||
|
->orWhere('height', '!=', 480)
|
||||||
|
->orWhere('rotation', '!=', 0);
|
||||||
|
});
|
||||||
|
})
|
||||||
->exists();
|
->exists();
|
||||||
|
|
||||||
if ($hasCustomDimensions) {
|
if ($hasCustomDimensions) {
|
||||||
// TODO cache image per device
|
// TODO cache image per device
|
||||||
$plugin->update(['current_image' => null]);
|
$plugin->update(['current_image' => null]);
|
||||||
Log::debug('Skip cache as devices with custom dimensions or DeviceModels exist');
|
Log::debug('Skip cache as devices with custom dimensions or non-standard DeviceModels exist');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -226,6 +226,59 @@ it('reset_if_not_cacheable preserves cache for standard devices', function (): v
|
||||||
expect($plugin->current_image)->toBe('test-uuid');
|
expect($plugin->current_image)->toBe('test-uuid');
|
||||||
})->skipOnGitHubActions();
|
})->skipOnGitHubActions();
|
||||||
|
|
||||||
|
it('reset_if_not_cacheable preserves cache for og_png and og_plus device models', function (): void {
|
||||||
|
// Create a plugin
|
||||||
|
$plugin = App\Models\Plugin::factory()->create(['current_image' => 'test-uuid']);
|
||||||
|
|
||||||
|
// Create og_png device model
|
||||||
|
$ogPngModel = DeviceModel::factory()->create([
|
||||||
|
'name' => 'test_og_png',
|
||||||
|
'width' => 800,
|
||||||
|
'height' => 480,
|
||||||
|
'rotation' => 0,
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Create og_plus device model
|
||||||
|
$ogPlusModel = DeviceModel::factory()->create([
|
||||||
|
'name' => 'test_og_plus',
|
||||||
|
'width' => 800,
|
||||||
|
'height' => 480,
|
||||||
|
'rotation' => 0,
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Create devices with og_png and og_plus device models
|
||||||
|
Device::factory()->create(['device_model_id' => $ogPngModel->id]);
|
||||||
|
Device::factory()->create(['device_model_id' => $ogPlusModel->id]);
|
||||||
|
|
||||||
|
// Test that the method preserves cache for standard device models
|
||||||
|
ImageGenerationService::resetIfNotCacheable($plugin);
|
||||||
|
|
||||||
|
$plugin->refresh();
|
||||||
|
expect($plugin->current_image)->toBe('test-uuid');
|
||||||
|
})->skipOnGitHubActions();
|
||||||
|
|
||||||
|
it('reset_if_not_cacheable resets cache for non-standard device models', function (): void {
|
||||||
|
// Create a plugin
|
||||||
|
$plugin = App\Models\Plugin::factory()->create(['current_image' => 'test-uuid']);
|
||||||
|
|
||||||
|
// Create a non-standard device model (e.g., kindle)
|
||||||
|
$kindleModel = DeviceModel::factory()->create([
|
||||||
|
'name' => 'test_amazon_kindle_2024',
|
||||||
|
'width' => 1400,
|
||||||
|
'height' => 840,
|
||||||
|
'rotation' => 90,
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Create a device with the non-standard device model
|
||||||
|
Device::factory()->create(['device_model_id' => $kindleModel->id]);
|
||||||
|
|
||||||
|
// Test that the method resets cache for non-standard device models
|
||||||
|
ImageGenerationService::resetIfNotCacheable($plugin);
|
||||||
|
|
||||||
|
$plugin->refresh();
|
||||||
|
expect($plugin->current_image)->toBeNull();
|
||||||
|
})->skipOnGitHubActions();
|
||||||
|
|
||||||
it('reset_if_not_cacheable handles null plugin', function (): void {
|
it('reset_if_not_cacheable handles null plugin', function (): void {
|
||||||
// Test that the method handles null plugin gracefully
|
// Test that the method handles null plugin gracefully
|
||||||
expect(fn () => ImageGenerationService::resetIfNotCacheable(null))->not->toThrow(Exception::class);
|
expect(fn () => ImageGenerationService::resetIfNotCacheable(null))->not->toThrow(Exception::class);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue