describe("RowLock", () => {
let fixture, row1, row2;
function makeRow(label) {
const li = document.createElement("li");
li.className = "applet-list-entry row-3col";
li.innerHTML = `
${label}
body
`;
return li;
}
beforeEach(() => {
RowLock._testReset();
fixture = document.createElement("ul");
fixture.className = "applet-list";
row1 = makeRow("Row 1");
row2 = makeRow("Row 2");
fixture.appendChild(row1);
fixture.appendChild(row2);
document.body.appendChild(fixture);
RowLock._init();
});
afterEach(() => {
RowLock._testReset();
fixture.remove();
});
it("clicking a row adds .row-locked", () => {
row1.click();
expect(row1.classList.contains("row-locked")).toBe(true);
});
it("clicking the same row again clears the lock", () => {
row1.click();
row1.click();
expect(row1.classList.contains("row-locked")).toBe(false);
});
it("clicking a different row moves the lock", () => {
row1.click();
row2.click();
expect(row1.classList.contains("row-locked")).toBe(false);
expect(row2.classList.contains("row-locked")).toBe(true);
});
it("clicking outside any row clears the lock", () => {
row1.click();
document.body.click();
expect(row1.classList.contains("row-locked")).toBe(false);
});
it("clicking a child element of the row still locks the row", () => {
const body = row1.querySelector(".row-body");
body.click();
expect(row1.classList.contains("row-locked")).toBe(true);
});
it("only one row carries .row-locked at a time", () => {
row1.click();
row2.click();
const locked = document.querySelectorAll(".applet-list-entry.row-3col.row-locked");
expect(locked.length).toBe(1);
});
});