actingAs($user); Filament::setTenant($tenant, true); $findings = Finding::factory() ->count(2) ->for($tenant) ->create([ 'finding_type' => Finding::FINDING_TYPE_DRIFT, 'status' => Finding::STATUS_NEW, ]); $component = Livewire::test(ListFindings::class) ->assertTableBulkActionVisible('acknowledge_selected') ->assertTableBulkActionDisabled('acknowledge_selected'); try { $component->callTableBulkAction('acknowledge_selected', $findings); } catch (Throwable) { // Filament actions may abort/throw when forced to execute. } $findings->each(fn (Finding $finding) => expect($finding->refresh()->status)->toBe(Finding::STATUS_NEW)); }); test('readonly users cannot acknowledge all matching findings', function () { [$user, $tenant] = createUserWithTenant(role: 'readonly'); $this->actingAs($user); Filament::setTenant($tenant, true); $findings = Finding::factory() ->count(2) ->for($tenant) ->create([ 'finding_type' => Finding::FINDING_TYPE_DRIFT, 'status' => Finding::STATUS_NEW, ]); $component = Livewire::test(ListFindings::class) ->assertActionVisible('acknowledge_all_matching') ->assertActionDisabled('acknowledge_all_matching'); try { $component->callAction('acknowledge_all_matching'); } catch (Throwable) { // Filament actions may abort/throw when forced to execute. } $findings->each(fn (Finding $finding) => expect($finding->refresh()->status)->toBe(Finding::STATUS_NEW)); });