import { cleanup, render, screen } from "@testing-library/react";
import { afterEach, describe, expect, test } from "vitest";
import { PasswordComplexity } from "./password-complexity";
import { NextIntlClientProvider } from "next-intl";
describe("", () => {
const messages = {
password: {
complexity: {
length: "Must be at least {minLength} characters long.",
hasSymbol: "Must include a symbol.",
hasNumber: "Must include a number.",
hasUppercase: "Must include an uppercase letter.",
hasLowercase: "Must include a lowercase letter.",
equals: "Password confirmation matched.",
matches: "Matches",
doesNotMatch: "Doesn't match",
},
},
};
afterEach(cleanup);
test("should render length check when minLength is defined", () => {
render(
,
);
const lengthCheck = screen.getByTestId("length-check");
expect(lengthCheck).toBeInTheDocument();
expect(lengthCheck.querySelector("svg")).toBeInTheDocument();
});
test("should not render length check when minLength is undefined", () => {
render(
,
);
expect(screen.queryByTestId("length-check")).toBeInTheDocument();
});
test("should render check icon when password meets length requirement", () => {
render(
,
);
const lengthCheck = screen.getByTestId("length-check");
const svg = lengthCheck.querySelector("svg");
expect(svg).toHaveClass("text-green-500");
});
test("should render cross icon when password does not meet length requirement", () => {
render(
,
);
const lengthCheck = screen.getByTestId("length-check");
const svg = lengthCheck.querySelector("svg");
expect(svg).toHaveClass("text-warn-light-500");
});
test("should render all complexity checks", () => {
render(
,
);
expect(screen.getByTestId("length-check")).toBeInTheDocument();
expect(screen.getByTestId("symbol-check")).toBeInTheDocument();
expect(screen.getByTestId("number-check")).toBeInTheDocument();
expect(screen.getByTestId("uppercase-check")).toBeInTheDocument();
expect(screen.getByTestId("lowercase-check")).toBeInTheDocument();
});
});