import test from "node:test"; import assert from "node:assert/strict"; import { homeWeek, homeDeviceStatus } from "../src/components/home/home-model.ts"; const now = new Date("2026-09-20T12:00:00+08:00"); const call = (id, created_at, extras = {}) => ({ id, subject_id: "elder-a", status: "COMPLETED", duration_ms: 60000, created_at, ...extras }); test("empty days never become steady mood observations", () => { const week = homeWeek([], "elder-a", {}, now); assert.equal(week.count, 0); assert.equal(week.minutes, 0); assert.equal(week.days.length, 7); assert.equal(week.range, "9月14日—9月20日"); assert(week.days.every(day => day.moodLabel === undefined)); }); test("counts conversations, not days with activity", () => { const week = homeWeek([call("one", "2026-09-19T10:00:00+08:00"), call("two", "2026-09-19T11:00:00+08:00", { duration_ms: 120000 })], "elder-a", {}, now); assert.equal(week.count, 2); assert.equal(week.minutes, 3); assert.equal(week.days[5].count, 2); }); test("scopes to selected elder and completed calls within week; excludes future records", () => { const week = homeWeek([ call("other", "2026-09-19T10:00:00+08:00", { subject_id: "elder-b" }), call("failed", "2026-09-19T10:00:00+08:00", { status: "FAILED" }), call("previous", "2026-09-13T23:59:59+08:00"), call("future", "2026-09-20T13:00:00+08:00"), call("current", "2026-09-14T00:00:00+08:00") ], "elder-a", {}, now); assert.equal(week.count, 1); assert.equal(week.latest.id, "current"); }); test("uses Beijing at UTC date boundaries even with a historical profile timezone", () => { assert.equal(homeWeek([call("boundary", "2026-09-13T16:05:00Z")], "elder-a", {}, now, "Asia/Shanghai").days[0].count, 1); assert.equal(homeWeek([call("boundary", "2026-09-13T16:05:00Z")], "elder-a", {}, now, "America/Los_Angeles").days[0].count, 1); assert.equal(homeWeek([], "elder-a", {}, new Date("2026-10-04T16:00:00Z"), "America/Los_Angeles").range, "10月5日—10月11日"); }); test("mood needs both a record and supporting evidence", () => { const conversations = [call("one", "2026-09-19T11:00:00+08:00")]; assert.equal(homeWeek(conversations, "elder-a", { one: { moodLabel: "平稳" } }, now).days[5].moodLabel, undefined); assert.equal(homeWeek(conversations, "elder-a", { one: { moodLabel: "愉快", evidence: "聊天摘要中的原始表达" } }, now).days[5].moodLabel, "愉快"); }); test("missing presence is unknown; any online device counts as connected", () => { const devices = [{ id: "one", subject_id: "elder-a" }, { id: "two", subject_id: "elder-a" }]; assert.equal(homeDeviceStatus(devices, {}, "elder-a"), "unknown"); assert.equal(homeDeviceStatus(devices, { one: { online: false }, two: { online: false } }, "elder-a"), "offline"); assert.equal(homeDeviceStatus(devices, { one: { online: true } }, "elder-a"), "online"); assert.equal(homeDeviceStatus(devices, {}, "elder-b"), "unbound"); });