inject.generator.test.ts

1.7 KB · raw

1// @vitest-environment jsdom23import { 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});