workspace_id; session()->put(WorkspaceContext::SESSION_KEY, $workspaceId); $destination = AlertDestination::factory()->create([ 'workspace_id' => $workspaceId, 'type' => AlertDestination::TYPE_TEAMS_WEBHOOK, 'config' => ['webhook_url' => 'https://example.invalid/hook'], ]); $rule = AlertRule::factory()->create([ 'workspace_id' => $workspaceId, 'event_type' => AlertRule::EVENT_HIGH_DRIFT, 'minimum_severity' => 'high', 'cooldown_seconds' => 3600, ]); $rule->destinations()->syncWithPivotValues([(int) $destination->getKey()], ['workspace_id' => $workspaceId]); /** @var AlertDispatchService $dispatch */ $dispatch = app(AlertDispatchService::class); $event = [ 'event_type' => AlertRule::EVENT_HIGH_DRIFT, 'tenant_id' => (int) $tenant->getKey(), 'severity' => 'critical', 'fingerprint_key' => 'finding:123', 'title' => 'High drift detected', 'body' => 'Test drift', ]; $dispatch->dispatchEvent($rule->workspace, $event); $dispatch->dispatchEvent($rule->workspace, $event); $deliveries = AlertDelivery::query() ->where('workspace_id', $workspaceId) ->orderBy('id') ->get(); expect($deliveries)->toHaveCount(2); expect($deliveries[0]->status)->toBe(AlertDelivery::STATUS_QUEUED); expect($deliveries[1]->status)->toBe(AlertDelivery::STATUS_SUPPRESSED); });