import { describe, it } from "@std/testing/bdd"; import { runPatternScenario } from "../pattern-harness.ts"; import type { PatternIntegrationScenario } from "../pattern-harness.ts"; export const securityVulnerabilityTrackerScenario: PatternIntegrationScenario< { vulnerabilities?: Array< { id?: string; system?: string; severity?: string; status?: string; score?: number; } >; } > = { name: "security vulnerability tracker aggregates risk rollups", module: new URL( "./security-vulnerability-tracker.pattern.ts", import.meta.url, ), exportName: "securityVulnerabilityTracker", steps: [ { expect: [ { path: "vulnerabilitiesView", value: [] }, { path: "activeVulnerabilities", value: [] }, { path: "totals.severity", value: { critical: 0, high: 0, medium: 0, low: 0 }, }, { path: "totals.system", value: [] }, { path: "totals.total", value: 0 }, { path: "severityList", value: [ { severity: "critical", risk: 0 }, { severity: "high", risk: 0 }, { severity: "medium", risk: 0 }, { severity: "low", risk: 0 }, ], }, { path: "snapshot.total", value: 0 }, { path: "snapshot.bySystem", value: [] }, { path: "summaryLabel", value: "Risk total 0 across 0 systems" }, { path: "audit.action", value: "init" }, ], }, { events: [ { stream: "handlers.register", payload: { id: "V-001", system: "auth", severity: "critical", }, }, ], expect: [ { path: "vulnerabilitiesView.0.id", value: "V-001" }, { path: "vulnerabilitiesView.0.status", value: "open" }, { path: "totals.total", value: 5 }, { path: "totals.severity", value: { critical: 5, high: 0, medium: 0, low: 0 }, }, { path: "totals.system", value: [{ system: "auth", risk: 5 }], }, { path: "summaryLabel", value: "Risk total 5 across 1 system" }, { path: "snapshot.bySeverity.critical", value: 5 }, { path: "snapshot.bySystem.0.system", value: "auth" }, { path: "snapshot.bySystem.0.risk", value: 5 }, { path: "audit.action", value: "registered" }, ], }, { events: [ { stream: "handlers.register", payload: { id: "V-002", system: "payments", severity: "high", }, }, ], expect: [ { path: "totals.total", value: 8 }, { path: "totals.severity", value: { critical: 5, high: 3, medium: 0, low: 0 }, }, { path: "totals.system", value: [ { system: "auth", risk: 5 }, { system: "payments", risk: 3 }, ], }, { path: "summaryLabel", value: "Risk total 8 across 2 systems" }, { path: "snapshot.total", value: 8 }, { path: "snapshot.bySeverity.high", value: 3 }, ], }, { events: [ { stream: "handlers.register", payload: { id: "V-003", system: "auth", severity: "medium", }, }, ], expect: [ { path: "totals.total", value: 10 }, { path: "totals.severity", value: { critical: 5, high: 3, medium: 2, low: 0 }, }, { path: "totals.system", value: [ { system: "auth", risk: 7 }, { system: "payments", risk: 3 }, ], }, { path: "activeVulnerabilities.2.id", value: "V-003" }, { path: "snapshot.bySystem.0.system", value: "auth" }, { path: "summaryLabel", value: "Risk total 10 across 2 systems" }, ], }, { events: [ { stream: "handlers.resolve", payload: { id: "V-001" }, }, ], expect: [ { path: "vulnerabilitiesView.0.status", value: "resolved" }, { path: "totals.total", value: 5 }, { path: "totals.severity", value: { critical: 0, high: 3, medium: 2, low: 0 }, }, { path: "totals.system", value: [ { system: "payments", risk: 3 }, { system: "auth", risk: 2 }, ], }, { path: "summaryLabel", value: "Risk total 5 across 2 systems" }, { path: "snapshot.bySystem.0.system", value: "payments" }, { path: "snapshot.bySeverity.critical", value: 0 }, { path: "audit.action", value: "resolved" }, ], }, { events: [ { stream: "handlers.update", payload: { id: "V-003", severity: "high" }, }, ], expect: [ { path: "totals.total", value: 6 }, { path: "totals.severity", value: { critical: 0, high: 6, medium: 0, low: 0 }, }, { path: "totals.system", value: [ { system: "auth", risk: 3 }, { system: "payments", risk: 3 }, ], }, { path: "summaryLabel", value: "Risk total 6 across 2 systems" }, { path: "snapshot.bySystem.0.system", value: "auth" }, { path: "snapshot.bySystem.1.system", value: "payments" }, { path: "snapshot.bySeverity.high", value: 6 }, { path: "audit.action", value: "updated" }, ], }, ], }; export const scenarios = [securityVulnerabilityTrackerScenario]; describe("security-vulnerability-tracker", () => { for (const scenario of scenarios) { it(scenario.name, async () => { await runPatternScenario(scenario); }); } });