## Summary - standardize Filament table defaults across resources, relation managers, widgets, custom pages, and picker tables - add shared pagination profiles, calm default column visibility, explicit empty states, and session persistence on designated critical resource lists - complete Spec 125 artifacts, regression tests, and dashboard widget follow-up for lazy loading, sortable columns, and toggleable detail columns ## Verification - `docker exec tenantatlas-laravel.test-1 php artisan test --compact --filter=BaselineCompareNow` - `docker exec tenantatlas-laravel.test-1 php artisan test --compact --filter=TableStandardsBaseline` - `docker exec tenantatlas-laravel.test-1 php artisan test --compact --filter=TableDetailVisibility` - `docker exec tenantatlas-laravel.test-1 php artisan test --compact --filter=FilamentTableRiskExceptions` - full suite run completed: `2017 passed, 10 failed, 8 skipped` - manual browser QA completed on the tenant dashboard for lazy loading, sortable widget columns, toggleable hidden status columns, badges, and pagination ## Known Failures The full suite still has 10 pre-existing failures unrelated to this branch: - `Tests\\Unit\\OpsUx\\SummaryCountsNormalizerTest` - `Tests\\Feature\\BackupWithAssignmentsConsistencyTest` (2 tests) - `Tests\\Feature\\BaselineDriftEngine\\CaptureBaselineContentTest` - `Tests\\Feature\\BaselineDriftEngine\\CompareContentEvidenceTest` - `Tests\\Feature\\BaselineDriftEngine\\ResolverTest` - `Tests\\Feature\\Filament\\TenantDashboardDbOnlyTest` - `Tests\\Feature\\Operations\\ReconcileAdapterRunsJobTrackingTest` - `Tests\\Feature\\ReviewPack\\ReviewPackRbacTest` - `Tests\\Feature\\Verification\\VerificationReportRedactionTest` Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #152
79 lines
2.8 KiB
PHP
79 lines
2.8 KiB
PHP
<?php
|
|
|
|
use App\Filament\Resources\PolicyResource\Pages\ListPolicies;
|
|
use App\Models\Policy;
|
|
use App\Models\Tenant;
|
|
use App\Models\User;
|
|
use Filament\Facades\Filament;
|
|
use Livewire\Livewire;
|
|
|
|
uses(\Illuminate\Foundation\Testing\RefreshDatabase::class);
|
|
|
|
test('policies are listed for the active tenant', function () {
|
|
$tenant = Tenant::factory()->create();
|
|
|
|
Policy::create([
|
|
'tenant_id' => $tenant->id,
|
|
'external_id' => 'policy-1',
|
|
'policy_type' => 'deviceConfiguration',
|
|
'display_name' => 'Policy A',
|
|
'platform' => 'windows',
|
|
'last_synced_at' => now(),
|
|
]);
|
|
|
|
$otherTenant = Tenant::factory()->create();
|
|
|
|
Policy::create([
|
|
'tenant_id' => $otherTenant->id,
|
|
'external_id' => 'policy-2',
|
|
'policy_type' => 'deviceConfiguration',
|
|
'display_name' => 'Policy B',
|
|
'platform' => 'windows',
|
|
'last_synced_at' => now(),
|
|
]);
|
|
|
|
$user = User::factory()->create();
|
|
[$user, $tenant] = createUserWithTenant(tenant: $tenant, user: $user, role: 'owner');
|
|
$user->tenants()->syncWithoutDetaching([
|
|
$otherTenant->getKey() => ['role' => 'owner'],
|
|
]);
|
|
|
|
$this->actingAs($user)
|
|
->get(route('filament.tenant.resources.policies.index', filamentTenantRouteParams($tenant)))
|
|
->assertOk()
|
|
->assertSee('Policy A')
|
|
->assertDontSee('Policy B');
|
|
});
|
|
|
|
test('policy list keeps the standard table defaults and persists state in-session', function () {
|
|
[$user, $tenant] = createUserWithTenant(role: 'owner');
|
|
|
|
$this->actingAs($user);
|
|
$tenant->makeCurrent();
|
|
Filament::setTenant($tenant, true);
|
|
|
|
$component = Livewire::actingAs($user)
|
|
->test(ListPolicies::class)
|
|
->assertTableEmptyStateActionsExistInOrder(['sync'])
|
|
->searchTable('Policy')
|
|
->call('sortTable', 'display_name', 'desc')
|
|
->set('tableFilters.visibility.value', 'active');
|
|
|
|
$table = $component->instance()->getTable();
|
|
|
|
expect($table->getPaginationPageOptions())->toBe(\App\Support\Filament\TablePaginationProfiles::resource());
|
|
expect($table->getEmptyStateHeading())->toBe('No policies synced yet');
|
|
expect($table->getColumn('display_name')?->isSearchable())->toBeTrue();
|
|
expect($table->getColumn('display_name')?->isSortable())->toBeTrue();
|
|
expect($table->getColumn('external_id')?->isToggledHiddenByDefault())->toBeTrue();
|
|
expect(count($table->getVisibleColumns()))->toBeLessThanOrEqual(7);
|
|
expect(session()->get($component->instance()->getTableSearchSessionKey()))->toBe('Policy');
|
|
expect(session()->get($component->instance()->getTableSortSessionKey()))->toBe('display_name:desc');
|
|
|
|
Livewire::actingAs($user)
|
|
->test(ListPolicies::class)
|
|
->assertSet('tableSearch', 'Policy')
|
|
->assertSet('tableSort', 'display_name:desc')
|
|
->assertSet('tableFilters.visibility.value', 'active');
|
|
});
|