Skip to content

Commit 8488d34

Browse files
committed
Added test, added test CI
1 parent 0fc34e5 commit 8488d34

File tree

4 files changed

+110
-6
lines changed

4 files changed

+110
-6
lines changed

.github/workflows/run-tests.yml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
name: run-tests
2+
3+
on:
4+
push:
5+
pull_request:
6+
7+
jobs:
8+
test:
9+
runs-on: ${{ matrix.os }}
10+
strategy:
11+
fail-fast: true
12+
matrix:
13+
os: [ubuntu-latest]
14+
php: [8.3, 8.4]
15+
laravel: [11.*, 12.*]
16+
stability: [prefer-lowest, prefer-stable]
17+
include:
18+
- laravel: 11.*
19+
testbench: ^9.9
20+
carbon: ^2.63
21+
- laravel: 12.*
22+
testbench: 10.*
23+
carbon: ^2.63|^3.0
24+
25+
name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.stability }} - ${{ matrix.os }}
26+
27+
steps:
28+
- name: Checkout code
29+
uses: actions/checkout@v4
30+
31+
- name: Setup PHP
32+
uses: shivammathur/setup-php@v2
33+
with:
34+
php-version: ${{ matrix.php }}
35+
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, imagick, fileinfo, swoole, openssl
36+
coverage: pcov
37+
38+
- name: Setup problem matchers
39+
run: |
40+
echo "::add-matcher::${{ runner.tool_cache }}/php.json"
41+
echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
42+
43+
- name: Install dependencies
44+
run: |
45+
composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" "nesbot/carbon:${{ matrix.carbon }}" --no-interaction --no-update
46+
composer update --${{ matrix.stability }} --prefer-dist --no-interaction
47+
48+
- name: List Installed Dependencies
49+
run: composer show -D
50+
51+
- name: Execute tests
52+
run: vendor/bin/pest --ci --bail --compact --memory --coverage --parallel

src/DescribeFilamentResourceTool.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -288,14 +288,12 @@ public function mapTableFilter(BaseFilter $filter): array
288288
if ($filter instanceof TernaryFilter) {
289289
// Condition is implicit (true/false/all)
290290
} elseif ($filter instanceof SelectFilter) {
291-
$baseInfo['optionsSource'] = 'Dynamic/Callable'; // Getting exact source is complex
291+
$baseInfo['options'] = 'Dynamic';
292292

293-
// Try to get options if they are simple array
294293
if (method_exists($filter, 'getOptions') && is_array($options = $filter->getOptions())) {
295-
$baseInfo['optionsSource'] = $options;
294+
$baseInfo['options'] = $options;
296295
}
297296
}
298-
// Add more specific filter type mappings here if needed
299297

300298
return $baseInfo;
301299
}

tests/Feature/DescribeFilamentResourceToolTest.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,34 @@
4545
->and($emailColumn['sortable'])->toBeTrue();
4646
});
4747

48+
it('can extract filters through the tool', function () {
49+
$tool = new DescribeFilamentResourceTool;
50+
$resource = app(TestUserResource::class);
51+
52+
$tableSchema = $tool->extractTableSchema($resource);
53+
$filters = $tableSchema['filters'];
54+
55+
$nameFilter = collect($filters)->firstWhere('name', 'name');
56+
expect($nameFilter)->toBeArray()
57+
->and($nameFilter['type'])->toBe('select')
58+
->and($nameFilter['options'])->toBeArray();
59+
60+
$emailFilter = collect($filters)->firstWhere('name', 'email');
61+
expect($emailFilter)->toBeArray()
62+
->and($emailFilter['type'])->toBe('searchable_column');
63+
64+
$createdAtFilter = collect($filters)->firstWhere('name', 'created_at');
65+
expect($createdAtFilter)->toBeArray()
66+
->and($createdAtFilter['type'])->toBe('form')
67+
->and($createdAtFilter['form'])->toBeArray()
68+
->and($createdAtFilter['form'][0])->toBeArray()
69+
->and($createdAtFilter['form'][0]['name'])->toBe('created_at_after')
70+
->and($createdAtFilter['form'][0]['type'])->toBe('datetime')
71+
->and($createdAtFilter['form'][1])->toBeArray()
72+
->and($createdAtFilter['form'][1]['name'])->toBe('created_at_before')
73+
->and($createdAtFilter['form'][1]['type'])->toBe('datetime');
74+
});
75+
4876
it('can extract bulk actions through the tool', function () {
4977
$tool = new DescribeFilamentResourceTool;
5078
$resource = app(TestUserResource::class);

tests/Feature/TestUserResource.php

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22

33
namespace Tests\Feature;
44

5+
use Carbon\Carbon;
56
use Filament\Forms;
6-
use Filament\Resources\Resource;
77
use Filament\Tables;
88
use Filament\Tables\Table;
9+
use Filament\Resources\Resource;
10+
use Filament\Tables\Filters\Filter;
11+
use Illuminate\Database\Eloquent\Builder;
912

1013
class TestUserResource extends Resource
1114
{
@@ -42,7 +45,30 @@ public static function table(Table $table): Table
4245
->sortable(),
4346
])
4447
->filters([
45-
//
48+
Tables\Filters\SelectFilter::make('name')
49+
->options([
50+
'John' => 'John',
51+
'Jane' => 'Jane',
52+
]),
53+
Filter::make('created_at')
54+
->form([
55+
Forms\Components\DatePicker::make('created_at_after')
56+
->label('Created After')
57+
->default(Carbon::now()->subMonths(6)),
58+
Forms\Components\DatePicker::make('created_at_before')
59+
->label('Created Before'),
60+
])
61+
->query(function (Builder $query, array $data): Builder {
62+
return $query
63+
->when(
64+
$data['created_at_after'],
65+
fn (Builder $query, $date): Builder => $query->whereDate('date', '>=', $date),
66+
)
67+
->when(
68+
$data['created_at_before'],
69+
fn (Builder $query, $date): Builder => $query->whereDate('date', '<=', $date),
70+
);
71+
})
4672
])
4773
->actions([
4874
Tables\Actions\EditAction::make(),

0 commit comments

Comments
 (0)