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..b3cf6da236 --- /dev/null +++ b/tests/admin/Unit/LunarPanelProviderTest.php @@ -0,0 +1,41 @@ +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(); + } +}); + +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); + } +});