From 7d3cd7913f09d746eee6c36499e711788270a461 Mon Sep 17 00:00:00 2001 From: RaBic Date: Fri, 17 Jul 2026 17:34:22 +0200 Subject: [PATCH 1/2] fix: make record URL resolvers config-cache safe --- packages/admin/src/LunarPanelProvider.php | 18 +++---------- .../admin/src/Support/RecordUrlResolvers.php | 25 +++++++++++++++++++ tests/admin/Unit/LunarPanelProviderTest.php | 21 ++++++++++++++++ 3 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 packages/admin/src/Support/RecordUrlResolvers.php create mode 100644 tests/admin/Unit/LunarPanelProviderTest.php diff --git a/packages/admin/src/LunarPanelProvider.php b/packages/admin/src/LunarPanelProvider.php index f3a620a367..c8bf80afa1 100644 --- a/packages/admin/src/LunarPanelProvider.php +++ b/packages/admin/src/LunarPanelProvider.php @@ -9,11 +9,9 @@ use Lunar\Admin\Console\Commands\MakeLunarAdminCommand; use Lunar\Admin\Console\Commands\PublishAdminResourcesCommand; use Lunar\Admin\Events\CustomerUserEdited; -use Lunar\Admin\Filament\Resources\CollectionResource; -use Lunar\Admin\Filament\Resources\OrderResource\Pages\ManageOrder; -use Lunar\Admin\Filament\Resources\ProductVariantResource; use Lunar\Admin\Listeners\FilamentUpgradedListener; use Lunar\Admin\Support\ActivityLog\Manifest as ActivityLogManifest; +use Lunar\Admin\Support\RecordUrlResolvers; class LunarPanelProvider extends ServiceProvider { @@ -98,17 +96,9 @@ public function boot(): void */ protected function registerBridgeRecordUrls(): void { - $this->app['config']->set('lunar.filament.record_urls.order', - fn ($record, array $context = []) => ManageOrder::getUrl([...$context, 'record' => $record]), - ); - - $this->app['config']->set('lunar.filament.record_urls.product_variant', - fn ($record, array $context = []) => ProductVariantResource::getUrl('edit', [...$context, 'record' => $record]), - ); - - $this->app['config']->set('lunar.filament.record_urls.collection_edit', - fn ($record, array $context = []) => CollectionResource::getUrl('edit', [...$context, 'record' => $record]), - ); + $this->app['config']->set('lunar.filament.record_urls.order', [RecordUrlResolvers::class, 'order']); + $this->app['config']->set('lunar.filament.record_urls.product_variant', [RecordUrlResolvers::class, 'productVariant']); + $this->app['config']->set('lunar.filament.record_urls.collection_edit', [RecordUrlResolvers::class, 'collectionEdit']); } /** diff --git a/packages/admin/src/Support/RecordUrlResolvers.php b/packages/admin/src/Support/RecordUrlResolvers.php new file mode 100644 index 0000000000..41f2ea61f0 --- /dev/null +++ b/packages/admin/src/Support/RecordUrlResolvers.php @@ -0,0 +1,25 @@ + $record]); + } + + public static function productVariant(mixed $record, array $context = []): string + { + return ProductVariantResource::getUrl('edit', [...$context, 'record' => $record]); + } + + public static function collectionEdit(mixed $record, array $context = []): string + { + return CollectionResource::getUrl('edit', [...$context, 'record' => $record]); + } +} diff --git a/tests/admin/Unit/LunarPanelProviderTest.php b/tests/admin/Unit/LunarPanelProviderTest.php new file mode 100644 index 0000000000..740b3df4f6 --- /dev/null +++ b/tests/admin/Unit/LunarPanelProviderTest.php @@ -0,0 +1,21 @@ +group('lunar.admin'); + +it('registers serializable record URL resolvers', function (): void { + $resolvers = [ + 'lunar.filament.record_urls.order' => [RecordUrlResolvers::class, 'order'], + 'lunar.filament.record_urls.product_variant' => [RecordUrlResolvers::class, 'productVariant'], + 'lunar.filament.record_urls.collection_edit' => [RecordUrlResolvers::class, 'collectionEdit'], + ]; + + foreach ($resolvers as $key => $resolver) { + expect(config($key)) + ->toBe($resolver) + ->and(is_callable($resolver))->toBeTrue(); + } +}); From 083636d7e8e1a358364270ec7ecc35db0b945038 Mon Sep 17 00:00:00 2001 From: RaBic Date: Fri, 17 Jul 2026 17:51:58 +0200 Subject: [PATCH 2/2] test: cover record URL config serialization --- tests/admin/Unit/LunarPanelProviderTest.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/admin/Unit/LunarPanelProviderTest.php b/tests/admin/Unit/LunarPanelProviderTest.php index 740b3df4f6..b3cf6da236 100644 --- a/tests/admin/Unit/LunarPanelProviderTest.php +++ b/tests/admin/Unit/LunarPanelProviderTest.php @@ -19,3 +19,23 @@ ->and(is_callable($resolver))->toBeTrue(); } }); + +it('can reload record URL resolver configuration after export', function (): void { + $cachedConfigurationPath = tempnam(sys_get_temp_dir(), 'lunar-config-'); + + if ($cachedConfigurationPath === false) { + throw new RuntimeException('Unable to create a cached configuration file.'); + } + + try { + file_put_contents( + $cachedConfigurationPath, + 'toBe(config('lunar.filament.record_urls')); + } finally { + unlink($cachedConfigurationPath); + } +});