/home/techb158/cosmic.abdallabala.com/tests
Edit: /home/techb158/cosmic.abdallabala.com/tests/mitigation-workflow.test.js (3345B)
const assert = require("assert");
const fs = require("fs");
const path = require("path");
const os = require("os");
const { JsonDatabase } = require("../src/storage/jsonDatabase.js");
const { DashboardService } = require("../src/services/dashboardService.js");
const { RiskRepository } = require("../src/repositories/riskRepository.js");
const source = path.join(__dirname, "..", "data", "database.json");
const temp = path.join(os.tmpdir(), `cosmic-mitigation-db-${Date.now()}.json`);
fs.copyFileSync(source, temp);
const database = new JsonDatabase(temp);
const risks = new RiskRepository(database);
const dashboard = new DashboardService(database);
const projectId = "cosmic-ai-risk-001";
const risk = risks.createRisk(projectId, {
title: "Mitigation workflow test risk",
dimension: "Technical",
domain: "Technical risks",
lifecyclePhase: "Testing and performance evaluation",
probability: 4,
impact: 5,
detectability: 4,
owner: "Mitigation Test Owner",
evidence: "Initial mitigation workflow evidence"
});
const before = dashboard.getDashboard(projectId).dashboard.scoredRisks.find(item => item.id === risk.id);
assert.ok(before.residualScore >= 50, "Seeded test risk should have material residual risk");
const mitigation = risks.createMitigation(risk.id, {
title: "Document mitigation workflow control",
description: "Attach evidence and complete the control before deployment.",
status: "In progress",
progress_percent: 40,
effectiveness_percent: 50,
owner: "Mitigation Test Owner",
dueDate: "2026-07-15",
evidenceTitle: "Control design review created",
evidenceUri: "https://example.invalid/evidence/control-design",
evidenceType: "Review"
});
assert.ok(mitigation.id, "Mitigation should be created");
assert.ok(mitigation.evidenceArtifacts.length >= 1, "Mitigation should expose linked evidence");
const updated = risks.updateMitigation(mitigation.id, {
title: mitigation.title,
status: "Done",
progress_percent: 100,
effectiveness_percent: 85,
evidenceTitle: "Control effectiveness validated",
evidenceType: "Test"
});
assert.strictEqual(updated.status, "Done", "Mitigation status should update to Done");
assert.strictEqual(updated.progress_percent, 100, "Mitigation progress should update to 100");
assert.ok(updated.evidenceArtifacts.length >= 2, "Updated mitigation should retain and add evidence");
const after = dashboard.getDashboard(projectId).dashboard.scoredRisks.find(item => item.id === risk.id);
assert.ok(after.residualScore < before.residualScore, "Completed mitigation should reduce residual risk");
const listed = risks.listMitigations(projectId).find(item => item.id === mitigation.id);
assert.ok(listed, "Mitigation should appear in project mitigation list");
assert.strictEqual(listed.riskId, risk.id, "Mitigation list item should include linked risk id");
assert.ok(Number.isFinite(listed.riskResidualScore) || listed.riskResidualScore === undefined, "List item should be compatible with dashboard enrichment");
const deleted = risks.deleteMitigation(mitigation.id);
assert.strictEqual(deleted, true, "Mitigation should delete");
assert.strictEqual(risks.getMitigation(mitigation.id), null, "Deleted mitigation should not be readable");
risks.deleteRisk(risk.id);
fs.unlinkSync(temp);
console.log("All COSMIC AI-Risk mitigation workflow tests passed.");