123import { beforeEach, describe, expect, it } from "vitest";4import "./_setup";5import { resetChromeMock } from "./_setup";6import { createSmartGenerator } from "./inject";78describe("inline password and passphrase generator", () => {9 beforeEach(() => {10 resetChromeMock();11 document.body.innerHTML = "";12 });1314 it("uses a 256-character password range and a five-word passphrase default", () => {15 const generator = createSmartGenerator({ policy: {} });16 document.body.appendChild(generator.root);1718 const slider = generator.root.querySelector<HTMLInputElement>('input[type="range"]')!;19 expect(slider.max).toBe("256");2021 const passphrase = Array.from(generator.root.querySelectorAll("button"))22 .find((button) => button.textContent === "passphrase")!;23 passphrase.click();2425 expect(slider.min).toBe("4");26 expect(slider.max).toBe("12");27 expect(slider.value).toBe("5");28 expect(slider.getAttribute("aria-label")).toBe("Word count");29 expect(generator.getPassword().split("-")).toHaveLength(5);30 });3132 it("generates twelve words with the selected separator", () => {33 const generator = createSmartGenerator({ policy: {} });34 document.body.appendChild(generator.root);35 const buttons = Array.from(generator.root.querySelectorAll("button"));36 buttons.find((button) => button.textContent === "passphrase")!.click();37 buttons.find((button) => button.textContent === ".")!.click();3839 const slider = generator.root.querySelector<HTMLInputElement>('input[type="range"]')!;40 slider.value = "12";41 slider.dispatchEvent(new Event("input"));4243 expect(generator.getPassword().split(".")).toHaveLength(12);44 });45});