import assert from "node:assert"; import { describe, it } from "node:test"; import { constants } from "../../../constants"; import { FormValidation } from "./index"; describe("FormValidation plugin", () => { it("validates email format", () => { const input = document.createElement("input"); input.value = "test@example.com"; assert.equal(FormValidation.isValidEmail(input), true); input.value = "invalid-email"; assert.equal(FormValidation.isValidEmail(input), false); }); it("keeps phone validation behavior", () => { const input = document.createElement("input"); input.value = "+7 (999) 123-45-67"; assert.equal(FormValidation.isValidPhone(input), true); input.value = "123"; assert.equal(FormValidation.isValidPhone(input), false); }); it("keeps text/select empty-state validation behavior", () => { const textInput = document.createElement("input"); textInput.value = " "; assert.equal(FormValidation.isValidText(textInput), false); textInput.value = "value"; assert.equal(FormValidation.isValidText(textInput), true); const select = document.createElement("select"); select.value = " "; assert.equal(FormValidation.isValidSelect(select), false); }); it("keeps checkbox validation behavior", () => { const checkbox = document.createElement("input"); checkbox.type = "checkbox"; checkbox.checked = false; assert.equal(FormValidation.isValidCheckbox(checkbox), false); checkbox.checked = true; assert.equal(FormValidation.isValidCheckbox(checkbox), true); }); it("does not throw when radio name contains spaces and quotes", () => { document.body.innerHTML = ""; const radio = document.createElement("input"); radio.type = "radio"; radio.name = "group name \"with quotes\""; document.body.appendChild(radio); assert.doesNotThrow(() => { FormValidation.setInputValidState(radio, true); }); }); it("ignores change event for checkbox outside formInput selector", () => { document.body.innerHTML = `
`; new FormValidation(); const form = document.querySelector("form"); assert.ok(form instanceof HTMLFormElement); const checkbox = document.createElement("input"); checkbox.type = "checkbox"; checkbox.required = true; form.appendChild(checkbox); checkbox.dispatchEvent(new window.Event("change", { bubbles: true })); assert.equal(checkbox.classList.contains(constants.stateClasses.invalid), false); assert.equal(checkbox.classList.contains(constants.stateClasses.valid), false); }); });