55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
|
|
import { calculateBuildReviewProgress } from "../src/features/campaigns/review/reviewProgress.ts";
|
|
|
|
test("separates blocking, individual, and group review work", () => {
|
|
assert.deepEqual(calculateBuildReviewProgress({
|
|
blocking: 2,
|
|
individualRequired: 3,
|
|
individualReviewed: 1,
|
|
groupRequired: 4,
|
|
reviewComplete: false
|
|
}), {
|
|
blocking: 2,
|
|
individualRequired: 3,
|
|
individualReviewed: 1,
|
|
individualRemaining: 2,
|
|
groupRequired: 4,
|
|
groupReviewed: 0,
|
|
groupRemaining: 4,
|
|
required: 7,
|
|
reviewed: 1,
|
|
remaining: 6
|
|
});
|
|
});
|
|
|
|
test("a recorded review completion acknowledges every review decision", () => {
|
|
const progress = calculateBuildReviewProgress({
|
|
blocking: 0,
|
|
individualRequired: 3,
|
|
individualReviewed: 3,
|
|
groupRequired: 4,
|
|
reviewComplete: true
|
|
});
|
|
assert.equal(progress.reviewed, 7);
|
|
assert.equal(progress.remaining, 0);
|
|
assert.equal(progress.individualRemaining, 0);
|
|
assert.equal(progress.groupRemaining, 0);
|
|
});
|
|
|
|
test("normalizes malformed counters without overstating progress", () => {
|
|
const progress = calculateBuildReviewProgress({
|
|
blocking: -2,
|
|
individualRequired: 2.9,
|
|
individualReviewed: 99,
|
|
groupRequired: Number.NaN,
|
|
reviewComplete: false
|
|
});
|
|
assert.equal(progress.blocking, 0);
|
|
assert.equal(progress.individualRequired, 2);
|
|
assert.equal(progress.individualReviewed, 2);
|
|
assert.equal(progress.required, 2);
|
|
assert.equal(progress.remaining, 0);
|
|
});
|