workspace_id; $rule = AlertRule::factory()->create(['workspace_id' => $workspaceId]); $destination = AlertDestination::factory()->create(['workspace_id' => $workspaceId]); AlertDelivery::factory()->create([ 'workspace_id' => $workspaceId, 'tenant_id' => (int) $tenant->getKey(), 'alert_rule_id' => (int) $rule->getKey(), 'alert_destination_id' => (int) $destination->getKey(), 'status' => AlertDelivery::STATUS_SENT, 'created_at' => now()->subHour(), ]); $otherTenant = Tenant::factory()->create(['workspace_id' => $workspaceId]); $user->tenants()->syncWithoutDetaching([ $otherTenant->getKey() => ['role' => 'owner'], ]); AlertDelivery::factory()->create([ 'workspace_id' => $workspaceId, 'tenant_id' => (int) $otherTenant->getKey(), 'alert_rule_id' => (int) $rule->getKey(), 'alert_destination_id' => (int) $destination->getKey(), 'status' => AlertDelivery::STATUS_SENT, 'created_at' => now()->subHour(), ]); $this->actingAs($user); Filament::setTenant(null, true); session()->put(WorkspaceContext::SESSION_KEY, $workspaceId); session()->put(WorkspaceContext::LAST_TENANT_IDS_SESSION_KEY, [ (string) $workspaceId => (int) $tenant->getKey(), ]); Livewire::test(AlertsKpiHeader::class) ->assertSee('Deliveries (24h)') ->assertSee('1'); })->group('ops-ux'); it('filters KPI deliveries by tenant when context is set via Filament setTenant', function (): void { [$user, $tenant] = createUserWithTenant(role: 'owner'); $workspaceId = (int) $tenant->workspace_id; $rule = AlertRule::factory()->create(['workspace_id' => $workspaceId]); $destination = AlertDestination::factory()->create(['workspace_id' => $workspaceId]); AlertDelivery::factory()->create([ 'workspace_id' => $workspaceId, 'tenant_id' => (int) $tenant->getKey(), 'alert_rule_id' => (int) $rule->getKey(), 'alert_destination_id' => (int) $destination->getKey(), 'status' => AlertDelivery::STATUS_SENT, 'created_at' => now()->subHour(), ]); $otherTenant = Tenant::factory()->create(['workspace_id' => $workspaceId]); $user->tenants()->syncWithoutDetaching([ $otherTenant->getKey() => ['role' => 'owner'], ]); AlertDelivery::factory()->create([ 'workspace_id' => $workspaceId, 'tenant_id' => (int) $otherTenant->getKey(), 'alert_rule_id' => (int) $rule->getKey(), 'alert_destination_id' => (int) $destination->getKey(), 'status' => AlertDelivery::STATUS_SENT, 'created_at' => now()->subHour(), ]); $this->actingAs($user); Filament::setTenant($tenant, true); session()->put(WorkspaceContext::SESSION_KEY, $workspaceId); Livewire::test(AlertsKpiHeader::class) ->assertSee('Deliveries (24h)') ->assertSee('1'); })->group('ops-ux'); it('shows workspace-wide KPI counts when no tenant context is active', function (): void { [$user, $tenant] = createUserWithTenant(role: 'owner'); $workspaceId = (int) $tenant->workspace_id; $rule = AlertRule::factory()->create(['workspace_id' => $workspaceId]); $destination = AlertDestination::factory()->create(['workspace_id' => $workspaceId]); AlertDelivery::factory()->create([ 'workspace_id' => $workspaceId, 'tenant_id' => (int) $tenant->getKey(), 'alert_rule_id' => (int) $rule->getKey(), 'alert_destination_id' => (int) $destination->getKey(), 'status' => AlertDelivery::STATUS_SENT, 'created_at' => now()->subHour(), ]); $otherTenant = Tenant::factory()->create(['workspace_id' => $workspaceId]); $user->tenants()->syncWithoutDetaching([ $otherTenant->getKey() => ['role' => 'owner'], ]); AlertDelivery::factory()->create([ 'workspace_id' => $workspaceId, 'tenant_id' => (int) $otherTenant->getKey(), 'alert_rule_id' => (int) $rule->getKey(), 'alert_destination_id' => (int) $destination->getKey(), 'status' => AlertDelivery::STATUS_SENT, 'created_at' => now()->subHour(), ]); $this->actingAs($user); Filament::setTenant(null, true); session()->put(WorkspaceContext::SESSION_KEY, $workspaceId); Livewire::test(AlertsKpiHeader::class) ->assertSee('Deliveries (24h)') ->assertSee('2'); })->group('ops-ux');