|
5 | 5 | use Filament\GlobalSearch\GlobalSearchResults; |
6 | 6 | use Filament\GlobalSearch\Providers\Contracts\GlobalSearchProvider; |
7 | 7 | use Filament\Livewire\GlobalSearch; |
| 8 | +use Filament\Resources\Resource; |
8 | 9 | use Filament\Tests\Fixtures\Models\Post; |
9 | 10 | use Filament\Tests\Fixtures\Models\User; |
| 11 | +use Filament\Tests\Fixtures\Resources\Posts\PostResource; |
| 12 | +use Filament\Tests\Fixtures\Resources\Users\UserResource; |
10 | 13 | use Filament\Tests\Panels\GlobalSearch\TestCase; |
11 | 14 | use Illuminate\Database\Eloquent\Factories\Sequence; |
12 | 15 | use Illuminate\Support\Str; |
|
78 | 81 | expect($categories[1])->toBe('posts'); |
79 | 82 | }); |
80 | 83 |
|
| 84 | +it('excludes resources without explicit `$isGloballySearchable` when `globalSearchResourceOptIn()` is enabled', function (): void { |
| 85 | + Filament::getCurrentOrDefaultPanel()->globalSearchResourceOptIn(); |
| 86 | + |
| 87 | + expect(PostResource::canGloballySearch())->toBeFalse(); |
| 88 | + expect(UserResource::canGloballySearch())->toBeFalse(); |
| 89 | +}); |
| 90 | + |
| 91 | +it('includes resources with explicit `$isGloballySearchable` when `globalSearchResourceOptIn()` is enabled', function (): void { |
| 92 | + Filament::getCurrentOrDefaultPanel()->globalSearchResourceOptIn(); |
| 93 | + |
| 94 | + expect(OptedInGlobalSearchResource::canGloballySearch())->toBeTrue(); |
| 95 | +}); |
| 96 | + |
| 97 | +it('includes all resources by default without `globalSearchResourceOptIn()`', function (): void { |
| 98 | + expect(PostResource::canGloballySearch())->toBeTrue(); |
| 99 | + expect(UserResource::canGloballySearch())->toBeTrue(); |
| 100 | + expect(OptedInGlobalSearchResource::canGloballySearch())->toBeTrue(); |
| 101 | +}); |
| 102 | + |
| 103 | +it('does not return search results for resources without explicit `$isGloballySearchable` when `globalSearchResourceOptIn()` is enabled', function (): void { |
| 104 | + Filament::getCurrentOrDefaultPanel()->globalSearchResourceOptIn(); |
| 105 | + |
| 106 | + $post = Post::factory()->create(); |
| 107 | + |
| 108 | + livewire(GlobalSearch::class) |
| 109 | + ->set('search', $post->title) |
| 110 | + ->assertDontSee($post->title); |
| 111 | +}); |
| 112 | + |
| 113 | +class OptedInGlobalSearchResource extends Resource |
| 114 | +{ |
| 115 | + protected static ?string $model = Post::class; |
| 116 | + |
| 117 | + protected static ?string $recordTitleAttribute = 'title'; |
| 118 | + |
| 119 | + protected static bool $isGloballySearchable = true; |
| 120 | + |
| 121 | + protected static ?string $slug = 'opted-in-global-search-posts'; |
| 122 | + |
| 123 | + /** |
| 124 | + * @return array<string> |
| 125 | + */ |
| 126 | + public static function getGloballySearchableAttributes(): array |
| 127 | + { |
| 128 | + return ['title']; |
| 129 | + } |
| 130 | +} |
| 131 | + |
81 | 132 | class CustomSearchProvider implements GlobalSearchProvider |
82 | 133 | { |
83 | 134 | public function getResults(string $query): ?GlobalSearchResults |
|
0 commit comments