actingAs($user); Filament::setTenant($tenant, true); $newFinding = Finding::factory()->for($tenant)->create(['status' => Finding::STATUS_NEW]); $triagedFinding = Finding::factory()->for($tenant)->create(['status' => Finding::STATUS_TRIAGED]); $resolvedFinding = Finding::factory()->for($tenant)->create([ 'status' => Finding::STATUS_RESOLVED, 'resolved_at' => now(), 'resolved_reason' => 'fixed', ]); Livewire::test(ViewFinding::class, ['record' => $newFinding->getKey()]) ->assertActionVisible('triage') ->assertActionVisible('assign') ->assertActionVisible('resolve') ->assertActionVisible('close') ->assertActionVisible('risk_accept'); Livewire::test(ViewFinding::class, ['record' => $triagedFinding->getKey()]) ->assertActionVisible('start_progress'); Livewire::test(ViewFinding::class, ['record' => $resolvedFinding->getKey()]) ->assertActionVisible('reopen'); }); it('executes workflow actions from view header and supports assignment to tenant members only', function (): void { [$user, $tenant] = createUserWithTenant(role: 'owner'); $this->actingAs($user); Filament::setTenant($tenant, true); $assignee = User::factory()->create(); createUserWithTenant(tenant: $tenant, user: $assignee, role: 'operator'); $outsider = User::factory()->create(); $finding = Finding::factory()->for($tenant)->create(['status' => Finding::STATUS_NEW]); Livewire::test(ViewFinding::class, ['record' => $finding->getKey()]) ->callAction('triage') ->assertHasNoActionErrors() ->callAction('assign', [ 'assignee_user_id' => (int) $assignee->getKey(), 'owner_user_id' => (int) $user->getKey(), ]) ->assertHasNoActionErrors() ->callAction('resolve', [ 'resolved_reason' => 'handled in queue', ]) ->assertHasNoActionErrors(); $finding->refresh(); expect($finding->status)->toBe(Finding::STATUS_RESOLVED) ->and((int) $finding->assignee_user_id)->toBe((int) $assignee->getKey()) ->and((int) $finding->owner_user_id)->toBe((int) $user->getKey()); Livewire::test(ViewFinding::class, ['record' => $finding->getKey()]) ->callAction('reopen') ->assertHasNoActionErrors() ->callAction('assign', [ 'assignee_user_id' => (int) $outsider->getKey(), 'owner_user_id' => (int) $user->getKey(), ]); $finding->refresh(); expect((int) $finding->assignee_user_id)->toBe((int) $assignee->getKey()); });