import { assert } from "chai"; import { describe, it } from "node:test"; import * as m from "../checklist-item-event-message"; import { NerisBenchmarkType } from "../constants"; describe("checklist-item-event-message", function() { describe("buildChecklistMessage", function() { it("formats Checked with name and NERIS suffix", function() { const message = m.buildChecklistMessage(true, { name: "Water On Fire", neris_benchmark: "time_water_on_fire", }); assert.equal(message, "Checked: Water On Fire (NERIS: Time Water On Fire)"); }); it("formats Unchecked with name and NERIS suffix", function() { const message = m.buildChecklistMessage(false, { name: "Water On Fire", neris_benchmark: "time_water_on_fire", }); assert.equal(message, "Unchecked: Water On Fire (NERIS: Time Water On Fire)"); }); it("title-cases every NerisBenchmarkType key", function() { assert.equal( m.buildChecklistMessage(true, { name: "Fire Under Control", neris_benchmark: "time_fire_under_control" }), "Checked: Fire Under Control (NERIS: Time Fire Under Control)" ); assert.equal( m.buildChecklistMessage(true, { name: "360", neris_benchmark: "time_360_completed" }), "Checked: 360 (NERIS: Time 360 Completed)" ); }); it("omits the NERIS suffix when neris_benchmark is absent or empty", function() { assert.equal(m.buildChecklistMessage(true, { name: "Basic Item" }), "Checked: Basic Item"); assert.equal(m.buildChecklistMessage(true, { name: "Basic Item", neris_benchmark: "" }), "Checked: Basic Item"); }); it("degrades to the bare prefix without a name", function() { assert.equal(m.buildChecklistMessage(true, {}), "Checked"); assert.equal(m.buildChecklistMessage(false, {}), "Unchecked"); assert.equal(m.buildChecklistMessage(true, { name: "", neris_benchmark: "time_water_on_fire" }), "Checked"); }); it("tolerates missing or malformed events", function() { assert.equal(m.buildChecklistMessage(true), "Checked"); assert.equal(m.buildChecklistMessage(false, null), "Unchecked"); assert.equal(m.buildChecklistMessage(true, { name: 42, neris_benchmark: true }), "Checked"); }); }); describe("nerisBenchmarkLabel", function() { it("maps every NerisBenchmarkType value to a title-case label", function() { const expected: Record = { [NerisBenchmarkType.TimeCommandEstablished]: "Time Command Established", [NerisBenchmarkType.Time360Completed]: "Time 360 Completed", [NerisBenchmarkType.TimeWaterOnFire]: "Time Water On Fire", [NerisBenchmarkType.TimeFireUnderControl]: "Time Fire Under Control", [NerisBenchmarkType.TimeFireKnockedDown]: "Time Fire Knocked Down", [NerisBenchmarkType.TimeSuppressionComplete]: "Time Suppression Complete", [NerisBenchmarkType.TimePrimarySearchBegin]: "Time Primary Search Begin", [NerisBenchmarkType.TimePrimarySearchComplete]: "Time Primary Search Complete", }; for (const key of Object.values(NerisBenchmarkType)) { assert.equal(m.nerisBenchmarkLabel(key), expected[key]); } }); it("normalizes uppercase and mixed-case input to title case", function() { assert.equal(m.nerisBenchmarkLabel("TIME_WATER_ON_FIRE"), "Time Water On Fire"); assert.equal(m.nerisBenchmarkLabel("Time_fIRE_Under_CONTROL"), "Time Fire Under Control"); }); it("passes through values that are not snake_case keys", function() { assert.equal(m.nerisBenchmarkLabel("100"), "100"); assert.equal(m.nerisBenchmarkLabel("Already Titled"), "Already Titled"); assert.equal(m.nerisBenchmarkLabel("__leading_and_trailing__"), "Leading And Trailing"); assert.equal(m.nerisBenchmarkLabel(""), ""); }); }); describe("buildIncidentChecklistMessage", function() { it("formats Added/Removed with the checklist name", function() { assert.equal(m.buildIncidentChecklistMessage(true, { name: "Truck Pre-Trip" }), "Added checklist: Truck Pre-Trip"); assert.equal(m.buildIncidentChecklistMessage(false, { name: "Truck Pre-Trip" }), "Removed checklist: Truck Pre-Trip"); }); it("degrades to the bare prefix without a name", function() { assert.equal(m.buildIncidentChecklistMessage(true, {}), "Added checklist"); assert.equal(m.buildIncidentChecklistMessage(false, { name: "" }), "Removed checklist"); }); it("tolerates missing or malformed events", function() { assert.equal(m.buildIncidentChecklistMessage(true), "Added checklist"); assert.equal(m.buildIncidentChecklistMessage(false, null), "Removed checklist"); assert.equal(m.buildIncidentChecklistMessage(true, { name: 42 }), "Added checklist"); }); }); });