/home/techb158/trellopowerup.abdallabala.com/test
NameSizeModeActions
assessmentAnalytics.test.mjs51270644editdlrm
riskEngine.test.mjs16990644editdlrm
store.test.mjs30980644editdlrm
Edit: /home/techb158/trellopowerup.abdallabala.com/test/assessmentAnalytics.test.mjs (5127B)
import assert from 'node:assert/strict'; import test from 'node:test'; import { buildBoardCsv, buildBoardReviewQueueFromSummary, buildBoardSummaryFromAssessments, buildReviewQueueCsv, decorateAssessment } from '../src/assessmentAnalytics.js'; const now = new Date('2026-07-07T12:00:00.000Z'); function assessment({ id, cardId = 'card-1', score, deploymentReady = true, createdAt = '2026-07-07T10:00:00.000Z' }) { return { id, boardId: 'board-1', cardId, createdAt, input: { projectTypology: 'incremental', lifecyclePhase: 'testing_evaluation', measurementMaturity: 'measured', risks: [{ title: 'Model drift', dimension: 'technical' }] }, score: { score, status: score >= 70 ? 'high' : 'medium', interpretation: 'Risk interpretation', gate: { deploymentReady, blockingReasons: deploymentReady ? [] : ['Legal review incomplete'] } } }; } test('review signal flags blocked, worsened, and stale assessments', () => { const current = assessment({ id: 'current', score: 75, deploymentReady: false, createdAt: '2026-06-01T12:00:00.000Z' }); const previous = assessment({ id: 'previous', score: 40, createdAt: '2026-05-15T12:00:00.000Z' }); const decorated = decorateAssessment(current, previous, { now, reviewStaleDays: 30 }); assert.equal(decorated.trend, 'worse'); assert.equal(decorated.previousScore, 40); assert.equal(decorated.scoreDelta, 35); assert.equal(decorated.review.needed, true); assert.equal(decorated.review.stale, true); assert.equal(decorated.review.ageDays, 36); assert.deepEqual(decorated.review.reasons, [ 'Deployment gate blocked', 'Risk score worsened', 'Assessment older than 30 days' ]); }); test('board summary counts review-needed and stale latest assessments', () => { const assessments = [ assessment({ id: 'card-a-new', cardId: 'card-a', score: 75, deploymentReady: false, createdAt: '2026-06-01T12:00:00.000Z' }), assessment({ id: 'card-a-old', cardId: 'card-a', score: 40, createdAt: '2026-05-15T12:00:00.000Z' }), assessment({ id: 'card-b-new', cardId: 'card-b', score: 20, createdAt: '2026-07-07T10:00:00.000Z' }) ]; const summary = buildBoardSummaryFromAssessments('board-1', assessments, { now, reviewStaleDays: 30 }); assert.equal(summary.cardCount, 2); assert.equal(summary.reviewNeeded, 1); assert.equal(summary.staleAssessments, 1); assert.equal(summary.reviewStaleDays, 30); assert.equal(summary.latestAssessments[0].review.needed, true); }); test('board CSV export includes review signal columns and values', () => { const summary = buildBoardSummaryFromAssessments('board-1', [ assessment({ id: 'card-a-new', cardId: 'card-a', score: 75, deploymentReady: false, createdAt: '2026-06-01T12:00:00.000Z' }), assessment({ id: 'card-a-old', cardId: 'card-a', score: 40, createdAt: '2026-05-15T12:00:00.000Z' }) ], { now, reviewStaleDays: 30 }); const csv = buildBoardCsv(summary); assert.match(csv, /"review_needed","review_reasons","recommended_actions","assessment_age_days","stale_assessment"/); assert.match(csv, /"true","Deployment gate blocked; Risk score worsened; Assessment older than 30 days","Resolve deployment gate blockers before release.; Review changed assumptions and update the mitigation plan.; Refresh the assessment and confirm current controls.","36","true"/); }); test('board review queue returns only review-needed cards in urgency order', () => { const summary = buildBoardSummaryFromAssessments('board-1', [ assessment({ id: 'stale-only', cardId: 'card-stale', score: 90, createdAt: '2026-06-01T12:00:00.000Z' }), assessment({ id: 'blocked', cardId: 'card-blocked', score: 50, deploymentReady: false, createdAt: '2026-07-07T10:00:00.000Z' }), assessment({ id: 'clear', cardId: 'card-clear', score: 20, createdAt: '2026-07-07T10:00:00.000Z' }), assessment({ id: 'worse-new', cardId: 'card-worse', score: 70, createdAt: '2026-07-07T10:00:00.000Z' }), assessment({ id: 'worse-old', cardId: 'card-worse', score: 40, createdAt: '2026-07-06T10:00:00.000Z' }) ], { now, reviewStaleDays: 30 }); const queue = buildBoardReviewQueueFromSummary(summary); assert.equal(queue.count, 3); assert.deepEqual(queue.items.map((item) => item.cardId), ['card-blocked', 'card-worse', 'card-stale']); assert.equal(queue.items.every((item) => item.review.needed), true); }); test('review queue CSV export includes only queue items', () => { const summary = buildBoardSummaryFromAssessments('board-1', [ assessment({ id: 'blocked', cardId: 'card-blocked', score: 50, deploymentReady: false, createdAt: '2026-07-07T10:00:00.000Z' }), assessment({ id: 'clear', cardId: 'card-clear', score: 20, createdAt: '2026-07-07T10:00:00.000Z' }) ], { now, reviewStaleDays: 30 }); const queue = buildBoardReviewQueueFromSummary(summary); const csv = buildReviewQueueCsv(queue); assert.match(csv, /"board_id","card_id","assessment_id"/); assert.match(csv, /"board-1","card-blocked","blocked"/); assert.doesNotMatch(csv, /card-clear/); });