/** * Unit tests for buildDayDetailContent. * Verifies dutyList is sorted by start_at before display. */ import { describe, it, expect, beforeAll } from "vitest"; import { buildDayDetailContent } from "./dayDetail.js"; describe("buildDayDetailContent", () => { beforeAll(() => { document.body.innerHTML = '
' + '
' + '
' + ''; }); it("sorts duty list by start_at when input order is wrong", () => { const dateKey = "2025-02-25"; const duties = [ { event_type: "duty", full_name: "Петров", start_at: "2025-02-25T14:00:00", end_at: "2025-02-25T18:00:00", }, { event_type: "duty", full_name: "Иванов", start_at: "2025-02-25T09:00:00", end_at: "2025-02-25T14:00:00", }, ]; const html = buildDayDetailContent(dateKey, duties, []); expect(html).toContain("Иванов"); expect(html).toContain("Петров"); const ivanovPos = html.indexOf("Иванов"); const petrovPos = html.indexOf("Петров"); expect(ivanovPos).toBeLessThan(petrovPos); }); it("includes contact info (phone, username) for duty entries when present", () => { const dateKey = "2025-03-01"; const duties = [ { event_type: "duty", full_name: "Alice", start_at: "2025-03-01T09:00:00", end_at: "2025-03-01T17:00:00", phone: "+79991234567", username: "alice_dev", }, ]; const html = buildDayDetailContent(dateKey, duties, []); expect(html).toContain("Alice"); expect(html).toContain("day-detail-contact-row"); expect(html).toContain('href="tel:'); expect(html).toContain("+79991234567"); expect(html).toContain("https://t.me/"); expect(html).toContain("alice_dev"); }); });