create([ 'tenant_id' => $tenant->getKey(), 'finished_at' => now()->subDays(2), ]); InventorySyncRun::factory()->create([ 'tenant_id' => $tenant->getKey(), 'finished_at' => now()->subDay(), ]); $this->actingAs($user); $tenant->makeCurrent(); Filament::setTenant($tenant, true); Livewire::test(DriftLanding::class) ->assertSet('state', 'blocked') ->assertSet('message', 'You can view existing drift findings and run history, but you do not have permission to generate drift.'); Bus::assertNotDispatched(GenerateDriftFindingsJob::class); }); it('starts generation for owner members (tenant sync allowed)', function () { Bus::fake(); [$user, $tenant] = createUserWithTenant(role: 'owner'); InventorySyncRun::factory()->create([ 'tenant_id' => $tenant->getKey(), 'finished_at' => now()->subDays(2), ]); $latestRun = InventorySyncRun::factory()->create([ 'tenant_id' => $tenant->getKey(), 'finished_at' => now()->subDay(), ]); $this->actingAs($user); $tenant->makeCurrent(); Filament::setTenant($tenant, true); $component = Livewire::test(DriftLanding::class) ->assertSet('state', 'generating') ->assertSet('scopeKey', (string) $latestRun->selection_hash); $operationRunId = $component->get('operationRunId'); expect($operationRunId)->toBeInt()->toBeGreaterThan(0); Bus::assertDispatched(GenerateDriftFindingsJob::class); }); });