Some checks failed
PR Fast Feedback / fast-feedback (pull_request) Failing after 3m58s
Applied diagnostic surface contract rules to Audit Log inspect modal and Support Diagnostics action context, consolidating raw diagnostic data into safe modals according to Spec 374.
102 lines
3.7 KiB
PHP
102 lines
3.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Filament\Pages\Monitoring\AuditLog as AuditLogPage;
|
|
use App\Models\AuditLog as AuditLogModel;
|
|
use App\Models\BackupSet;
|
|
use App\Models\ManagedEnvironment;
|
|
use App\Models\User;
|
|
use Filament\Facades\Filament;
|
|
use Livewire\Features\SupportTesting\Testable;
|
|
use Livewire\Livewire;
|
|
|
|
function auditLogDetailTestComponent(User $user, ?ManagedEnvironment $tenant = null, ?int $selectedAuditLogId = null): Testable
|
|
{
|
|
test()->actingAs($user);
|
|
Filament::setTenant($tenant, true);
|
|
|
|
if ($selectedAuditLogId !== null) {
|
|
return Livewire::withQueryParams(['event' => $selectedAuditLogId])
|
|
->actingAs($user)
|
|
->test(AuditLogPage::class);
|
|
}
|
|
|
|
return Livewire::actingAs($user)->test(AuditLogPage::class);
|
|
}
|
|
|
|
function auditLogDetailTestRecord(ManagedEnvironment $tenant, array $attributes = []): AuditLogModel
|
|
{
|
|
return AuditLogModel::query()->create(array_merge([
|
|
'workspace_id' => (int) $tenant->workspace_id,
|
|
'managed_environment_id' => (int) $tenant->getKey(),
|
|
'actor_email' => 'auditor@example.com',
|
|
'actor_name' => 'Audit Operator',
|
|
'action' => 'backup.created',
|
|
'status' => 'success',
|
|
'resource_type' => 'backup_set',
|
|
'resource_id' => '1',
|
|
'summary' => 'Backup set created',
|
|
'metadata' => [
|
|
'item_count' => 12,
|
|
],
|
|
'recorded_at' => now(),
|
|
], $attributes));
|
|
}
|
|
|
|
it('shows readable detail sections and a related link for an accessible target', function (): void {
|
|
[$user, $tenant] = createUserWithTenant(role: 'owner');
|
|
|
|
$backupSet = BackupSet::factory()->create([
|
|
'managed_environment_id' => (int) $tenant->getKey(),
|
|
'name' => 'Nightly iOS backup',
|
|
]);
|
|
|
|
$audit = auditLogDetailTestRecord($tenant, [
|
|
'actor_email' => 'audit-operator-with-an-unusually-long-enterprise-identifier+proof@example.test',
|
|
'resource_id' => (string) $backupSet->getKey(),
|
|
'target_label' => $backupSet->name,
|
|
'summary' => 'Backup set created for Nightly iOS backup',
|
|
]);
|
|
|
|
auditLogDetailTestComponent($user, selectedAuditLogId: (int) $audit->getKey())
|
|
->assertCanSeeTableRecords([$audit])
|
|
->assertSet('selectedAuditLogId', (int) $audit->getKey())
|
|
->assertSee('Readable context')
|
|
->assertSee('Diagnostics - Collapsed')
|
|
->assertSee('Technical metadata')
|
|
->assertSee('Nightly iOS backup')
|
|
->assertSee('audit-operator-with-an-unusually-long-enterprise-identifier+proof@example.test')
|
|
->assertSeeHtml('data-testid="audit-selected-proof-cards"')
|
|
->assertSeeHtml('sm:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-5')
|
|
->assertSeeHtml('break-words')
|
|
->assertSeeHtml('max-w-full')
|
|
->assertSee('Open backup set');
|
|
});
|
|
|
|
it('keeps deleted targets readable while suppressing their drill-down link', function (): void {
|
|
[$user, $tenant] = createUserWithTenant(role: 'owner');
|
|
|
|
$backupSet = BackupSet::factory()->create([
|
|
'managed_environment_id' => (int) $tenant->getKey(),
|
|
'name' => 'Archived backup',
|
|
]);
|
|
|
|
$backupSet->delete();
|
|
|
|
$audit = auditLogDetailTestRecord($tenant, [
|
|
'action' => 'backup.archived',
|
|
'resource_id' => (string) $backupSet->getKey(),
|
|
'target_label' => 'Archived backup',
|
|
'summary' => 'Backup set archived for Archived backup',
|
|
]);
|
|
|
|
auditLogDetailTestComponent($user, selectedAuditLogId: (int) $audit->getKey())
|
|
->assertCanSeeTableRecords([$audit])
|
|
->assertSet('selectedAuditLogId', (int) $audit->getKey())
|
|
->assertSee('Archived backup')
|
|
->assertSee('Diagnostics - Collapsed')
|
|
->assertSee('Technical metadata')
|
|
->assertDontSee('Open backup set');
|
|
});
|