create([ 'tenant_id' => (int) $tenant->getKey(), 'name' => $name, 'is_enabled' => true, 'timezone' => 'UTC', 'frequency' => 'daily', 'time_of_day' => '01:00:00', 'days_of_week' => null, 'policy_types' => ['deviceConfiguration'], 'include_foundations' => true, 'retention_keep_last' => 30, ]); } it('shows only operation runs belonging to the owner backup schedule', function (): void { [$user, $tenant] = createUserWithTenant(role: 'owner'); $this->actingAs($user); $tenant->makeCurrent(); Filament::setTenant($tenant, true); $scheduleA = makeBackupScheduleForTenant($tenant, 'Schedule A'); $scheduleB = makeBackupScheduleForTenant($tenant, 'Schedule B'); $runA = OperationRun::factory()->forTenant($tenant)->create([ 'type' => 'backup_schedule_run', 'context' => ['backup_schedule_id' => (int) $scheduleA->getKey()], ]); $runB = OperationRun::factory()->forTenant($tenant)->create([ 'type' => 'backup_schedule_run', 'context' => ['backup_schedule_id' => (int) $scheduleB->getKey()], ]); Livewire::test(BackupScheduleOperationRunsRelationManager::class, [ 'ownerRecord' => $scheduleA, 'pageClass' => EditBackupSchedule::class, ]) ->assertCanSeeTableRecords([$runA]) ->assertCanNotSeeTableRecords([$runB]); }); it('returns 404 when a forged same-tenant run key is mounted on the wrong schedule relation manager', function (): void { [$user, $tenant] = createUserWithTenant(role: 'owner'); $this->actingAs($user); $tenant->makeCurrent(); Filament::setTenant($tenant, true); $scheduleA = makeBackupScheduleForTenant($tenant, 'Schedule A'); $scheduleB = makeBackupScheduleForTenant($tenant, 'Schedule B'); $foreignRun = OperationRun::factory()->forTenant($tenant)->create([ 'type' => 'backup_schedule_run', 'context' => ['backup_schedule_id' => (int) $scheduleB->getKey()], ]); $component = Livewire::test(BackupScheduleOperationRunsRelationManager::class, [ 'ownerRecord' => $scheduleA, 'pageClass' => EditBackupSchedule::class, ]); expect(fn () => $component->instance()->mountTableAction('view', (string) $foreignRun->getKey())) ->toThrow(NotFoundHttpException::class); });