From 47e32e4aa1a5fce3384a97ef79b107b113569189 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Tue, 17 Mar 2026 15:21:49 +0000 Subject: [PATCH] Filter out null labels in plugin sales SelectFilter options Co-Authored-By: Claude Opus 4.6 --- .../Resources/PluginSalesResource.php | 7 +-- .../Filament/PluginSalesResourceTest.php | 48 +++++++++++++++++++ 2 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 tests/Feature/Filament/PluginSalesResourceTest.php diff --git a/app/Filament/Resources/PluginSalesResource.php b/app/Filament/Resources/PluginSalesResource.php index 98ae6c7e..8aee034b 100644 --- a/app/Filament/Resources/PluginSalesResource.php +++ b/app/Filament/Resources/PluginSalesResource.php @@ -9,6 +9,7 @@ use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; +use Illuminate\Database\Eloquent\Builder; class PluginSalesResource extends Resource { @@ -71,19 +72,19 @@ public static function table(Table $table): Table ->filters([ Tables\Filters\SelectFilter::make('user_id') ->label('User') - ->relationship('user', 'email') + ->relationship('user', 'email', fn (Builder $query) => $query->whereNotNull('email')) ->searchable() ->preload(), Tables\Filters\SelectFilter::make('plugin_id') ->label('Plugin') - ->relationship('plugin', 'name') + ->relationship('plugin', 'name', fn (Builder $query) => $query->whereNotNull('name')) ->searchable() ->preload(), Tables\Filters\SelectFilter::make('plugin_bundle_id') ->label('Bundle') - ->relationship('pluginBundle', 'name') + ->relationship('pluginBundle', 'name', fn (Builder $query) => $query->whereNotNull('name')) ->searchable() ->preload(), diff --git a/tests/Feature/Filament/PluginSalesResourceTest.php b/tests/Feature/Filament/PluginSalesResourceTest.php new file mode 100644 index 00000000..4bbd2951 --- /dev/null +++ b/tests/Feature/Filament/PluginSalesResourceTest.php @@ -0,0 +1,48 @@ +admin = User::factory()->create(['email' => 'admin@test.com']); + config(['filament.users' => ['admin@test.com']]); + } + + public function test_plugin_sales_page_renders_when_plugin_has_null_name(): void + { + $pluginWithName = Plugin::factory()->approved()->create(['name' => 'acme/camera-123']); + $pluginWithoutName = Plugin::factory()->approved()->create(['name' => null]); + + PluginLicense::factory()->create(['plugin_id' => $pluginWithName->id]); + PluginLicense::factory()->create(['plugin_id' => $pluginWithoutName->id]); + + Livewire::actingAs($this->admin) + ->test(ListPluginSales::class) + ->assertSuccessful(); + } + + public function test_plugin_sales_page_renders_successfully(): void + { + PluginLicense::factory()->count(3)->create(); + + Livewire::actingAs($this->admin) + ->test(ListPluginSales::class) + ->assertSuccessful(); + } +}