Skip to content

Commit 47e32e4

Browse files
simonhampclaude
andcommitted
Filter out null labels in plugin sales SelectFilter options
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 864d848 commit 47e32e4

2 files changed

Lines changed: 52 additions & 3 deletions

File tree

app/Filament/Resources/PluginSalesResource.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Filament\Resources\Resource;
1010
use Filament\Tables;
1111
use Filament\Tables\Table;
12+
use Illuminate\Database\Eloquent\Builder;
1213

1314
class PluginSalesResource extends Resource
1415
{
@@ -71,19 +72,19 @@ public static function table(Table $table): Table
7172
->filters([
7273
Tables\Filters\SelectFilter::make('user_id')
7374
->label('User')
74-
->relationship('user', 'email')
75+
->relationship('user', 'email', fn (Builder $query) => $query->whereNotNull('email'))
7576
->searchable()
7677
->preload(),
7778

7879
Tables\Filters\SelectFilter::make('plugin_id')
7980
->label('Plugin')
80-
->relationship('plugin', 'name')
81+
->relationship('plugin', 'name', fn (Builder $query) => $query->whereNotNull('name'))
8182
->searchable()
8283
->preload(),
8384

8485
Tables\Filters\SelectFilter::make('plugin_bundle_id')
8586
->label('Bundle')
86-
->relationship('pluginBundle', 'name')
87+
->relationship('pluginBundle', 'name', fn (Builder $query) => $query->whereNotNull('name'))
8788
->searchable()
8889
->preload(),
8990

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace Tests\Feature\Filament;
4+
5+
use App\Filament\Resources\PluginSalesResource\Pages\ListPluginSales;
6+
use App\Models\Plugin;
7+
use App\Models\PluginLicense;
8+
use App\Models\User;
9+
use Illuminate\Foundation\Testing\RefreshDatabase;
10+
use Livewire\Livewire;
11+
use Tests\TestCase;
12+
13+
class PluginSalesResourceTest extends TestCase
14+
{
15+
use RefreshDatabase;
16+
17+
private User $admin;
18+
19+
protected function setUp(): void
20+
{
21+
parent::setUp();
22+
23+
$this->admin = User::factory()->create(['email' => 'admin@test.com']);
24+
config(['filament.users' => ['admin@test.com']]);
25+
}
26+
27+
public function test_plugin_sales_page_renders_when_plugin_has_null_name(): void
28+
{
29+
$pluginWithName = Plugin::factory()->approved()->create(['name' => 'acme/camera-123']);
30+
$pluginWithoutName = Plugin::factory()->approved()->create(['name' => null]);
31+
32+
PluginLicense::factory()->create(['plugin_id' => $pluginWithName->id]);
33+
PluginLicense::factory()->create(['plugin_id' => $pluginWithoutName->id]);
34+
35+
Livewire::actingAs($this->admin)
36+
->test(ListPluginSales::class)
37+
->assertSuccessful();
38+
}
39+
40+
public function test_plugin_sales_page_renders_successfully(): void
41+
{
42+
PluginLicense::factory()->count(3)->create();
43+
44+
Livewire::actingAs($this->admin)
45+
->test(ListPluginSales::class)
46+
->assertSuccessful();
47+
}
48+
}

0 commit comments

Comments
 (0)