TenantAtlas/tests/Feature/Filament/BackupSetPolicyPickerTableTest.php
Ahmed Darrazi 5f1f3b0bfd feat: improve backup policy picker UX
- Replace Add Policies picker with a modal table (filters + multi-select + select-all filtered)

- Add has-versions filter and external id short display

- Group row actions and add bulk remove for backup items

- Add/adjust tests for picker and bulk remove
2026-01-02 14:58:10 +01:00

98 lines
3.1 KiB
PHP

<?php
use App\Livewire\BackupSetPolicyPickerTable;
use App\Models\BackupSet;
use App\Models\Policy;
use App\Models\PolicyVersion;
use App\Models\Tenant;
use App\Models\User;
use App\Services\Intune\BackupService;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Livewire\Livewire;
use Mockery\MockInterface;
uses(RefreshDatabase::class);
test('policy picker table bulk adds selected policies to backup set', function () {
$tenant = Tenant::factory()->create();
$tenant->makeCurrent();
$user = User::factory()->create();
$backupSet = BackupSet::factory()->create([
'tenant_id' => $tenant->id,
'name' => 'Test backup',
]);
$policies = Policy::factory()->count(2)->create([
'tenant_id' => $tenant->id,
'ignored_at' => null,
'last_synced_at' => now(),
]);
$this->mock(BackupService::class, function (MockInterface $mock) use ($tenant, $backupSet, $policies, $user) {
$mock->shouldReceive('addPoliciesToSet')
->once()
->withArgs(function ($tenantArg, $backupSetArg, $policyIds, $actorEmail, $actorName, $includeAssignments, $includeScopeTags, $includeFoundations) use ($tenant, $backupSet, $policies, $user) {
expect($tenantArg->id)->toBe($tenant->id);
expect($backupSetArg->id)->toBe($backupSet->id);
expect($policyIds)->toBe($policies->pluck('id')->all());
expect($actorEmail)->toBe($user->email);
expect($actorName)->toBe($user->name);
expect($includeAssignments)->toBeTrue();
expect($includeScopeTags)->toBeTrue();
expect($includeFoundations)->toBeTrue();
return true;
});
});
Livewire::actingAs($user)
->test(BackupSetPolicyPickerTable::class, [
'backupSetId' => $backupSet->id,
])
->callTableBulkAction('add_selected_to_backup_set', $policies)
->assertHasNoTableBulkActionErrors();
});
test('policy picker table can filter by has versions', function () {
$tenant = Tenant::factory()->create();
$tenant->makeCurrent();
$user = User::factory()->create();
$backupSet = BackupSet::factory()->create([
'tenant_id' => $tenant->id,
'name' => 'Test backup',
]);
$withVersions = Policy::factory()->create([
'tenant_id' => $tenant->id,
'display_name' => 'With Versions',
'ignored_at' => null,
'last_synced_at' => now(),
]);
PolicyVersion::factory()->create([
'tenant_id' => $tenant->id,
'policy_id' => $withVersions->id,
'policy_type' => $withVersions->policy_type,
'platform' => $withVersions->platform,
]);
$withoutVersions = Policy::factory()->create([
'tenant_id' => $tenant->id,
'display_name' => 'Without Versions',
'ignored_at' => null,
'last_synced_at' => now(),
]);
Livewire::actingAs($user)
->test(BackupSetPolicyPickerTable::class, [
'backupSetId' => $backupSet->id,
])
->filterTable('has_versions', '1')
->assertSee('With Versions')
->assertDontSee('Without Versions');
});