actingAs($user); $tenant->makeCurrent(); Filament::setTenant($tenant, true); $connection = ProviderConnection::factory()->platform()->consentGranted()->create([ 'tenant_id' => (int) $tenant->getKey(), 'provider' => 'microsoft', 'entra_tenant_id' => fake()->uuid(), 'consent_status' => 'granted', ]); $component = Livewire::test(ListProviderConnections::class); $component->callTableAction('inventory_sync', $connection); $component->callTableAction('compliance_snapshot', $connection); $inventoryRun = OperationRun::query() ->where('tenant_id', (int) $tenant->getKey()) ->where('type', 'inventory_sync') ->latest('id') ->first(); expect($inventoryRun)->not->toBeNull(); expect(OperationRun::query() ->where('tenant_id', (int) $tenant->getKey()) ->where('type', 'compliance.snapshot') ->count())->toBe(0); Queue::assertPushed(ProviderInventorySyncJob::class, 1); Queue::assertPushed(ProviderComplianceSnapshotJob::class, 0); $notifications = session('filament.notifications', []); expect($notifications)->not->toBeEmpty(); expect(collect($notifications)->last()['actions'][0]['url'] ?? null) ->toBe(OperationRunLinks::view($inventoryRun, $tenant)); }); it('blocks provider connection checks with shared guidance and does not enqueue work', function (): void { Queue::fake(); [$user, $tenant] = createUserWithTenant(role: 'operator', ensureDefaultMicrosoftProviderConnection: false); $this->actingAs($user); $tenant->makeCurrent(); Filament::setTenant($tenant, true); $connection = ProviderConnection::factory()->dedicated()->consentGranted()->create([ 'tenant_id' => (int) $tenant->getKey(), 'provider' => 'microsoft', 'consent_status' => 'granted', 'is_default' => true, ]); Livewire::test(ListProviderConnections::class) ->callTableAction('check_connection', $connection); $run = OperationRun::query() ->where('tenant_id', (int) $tenant->getKey()) ->where('type', 'provider.connection.check') ->latest('id') ->first(); expect($run)->not->toBeNull(); expect($run?->outcome)->toBe('blocked'); expect($run?->context['reason_code'] ?? null)->toBe(ProviderReasonCodes::DedicatedCredentialMissing); Queue::assertNothingPushed(); Queue::assertNotPushed(ProviderConnectionHealthCheckJob::class); });