/**
* Unit tests for main.js: applyLangToUi (locale-to-DOM) and lang re-evaluation behaviour.
*/
import { describe, it, expect, beforeAll } from "vitest";
beforeAll(() => {
document.body.innerHTML =
'
" +
'' +
'
' +
'';
});
import { applyLangToUi } from "./main.js";
import { state } from "./dom.js";
describe("applyLangToUi", () => {
it("state.lang is set from getLang() at startup (getLang reads window.__DT_LANG; default en)", () => {
expect(state.lang).toBe("en");
});
it("sets document title and loading text for en", () => {
state.lang = "en";
applyLangToUi();
expect(document.title).toBe("Duty Calendar");
const loadingText = document.querySelector(".loading__text");
expect(loadingText && loadingText.textContent).toBe("Loading…");
});
it("sets document title and loading text for ru", () => {
state.lang = "ru";
applyLangToUi();
expect(document.title).toBe("Календарь дежурств");
const loadingText = document.querySelector(".loading__text");
expect(loadingText && loadingText.textContent).toBe("Загрузка…");
});
it("sets documentElement.lang to state.lang", () => {
state.lang = "en";
applyLangToUi();
expect(document.documentElement.lang).toBe("en");
state.lang = "ru";
applyLangToUi();
expect(document.documentElement.lang).toBe("ru");
});
it("sets weekday labels and nav aria-labels for current lang", () => {
state.lang = "en";
applyLangToUi();
const weekdays = document.querySelectorAll(".weekdays span");
expect(weekdays.length).toBe(7);
expect(weekdays[0].textContent).toBe("Mon");
const prevBtn = document.getElementById("prevMonth");
const nextBtn = document.getElementById("nextMonth");
expect(prevBtn && prevBtn.getAttribute("aria-label")).toBe("Previous month");
expect(nextBtn && nextBtn.getAttribute("aria-label")).toBe("Next month");
state.lang = "ru";
applyLangToUi();
expect(weekdays[0].textContent).toBe("Пн");
expect(prevBtn && prevBtn.getAttribute("aria-label")).toContain("Пред");
expect(nextBtn && nextBtn.getAttribute("aria-label")).toContain("След");
});
});