release: WRNexusJS 0.5.10
This commit is contained in:
@@ -305,3 +305,46 @@ test("schema-backed forms validate on input, change, and blur and synchronize fi
|
||||
delete (globalThis as Record<string, unknown>).document;
|
||||
}
|
||||
});
|
||||
|
||||
test("submit guards run only after schema fields are valid", () => {
|
||||
const win = new Window() as unknown as Window & Record<string, unknown>;
|
||||
win.document.body.innerHTML = `
|
||||
<form data-schema="guarded">
|
||||
<input name="email">
|
||||
<span data-error="email"></span>
|
||||
</form>`;
|
||||
win.__wireSchemas = {
|
||||
guarded: v.object({ email: v.string().required("Enter an email") }).describe(),
|
||||
};
|
||||
(globalThis as Record<string, unknown>).window = win;
|
||||
(globalThis as Record<string, unknown>).document = win.document;
|
||||
|
||||
try {
|
||||
(0, eval)(VALIDATE_RUNTIME);
|
||||
const form = win.document.querySelector("form")! as unknown as HTMLFormElement & {
|
||||
__wireSubmitGuards?: Array<() => boolean>;
|
||||
};
|
||||
let guardCalls = 0;
|
||||
form.__wireSubmitGuards = [
|
||||
() => {
|
||||
guardCalls += 1;
|
||||
return false;
|
||||
},
|
||||
];
|
||||
|
||||
form.dispatchEvent(
|
||||
new win.Event("submit", { bubbles: true, cancelable: true }) as unknown as Event,
|
||||
);
|
||||
expect(guardCalls).toBe(0);
|
||||
expect(win.document.querySelector("[data-error=email]")!.textContent).toBe("Enter an email");
|
||||
|
||||
(form.elements.namedItem("email") as HTMLInputElement).value = "person@example.com";
|
||||
form.dispatchEvent(
|
||||
new win.Event("submit", { bubbles: true, cancelable: true }) as unknown as Event,
|
||||
);
|
||||
expect(guardCalls).toBe(1);
|
||||
} finally {
|
||||
delete (globalThis as Record<string, unknown>).window;
|
||||
delete (globalThis as Record<string, unknown>).document;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user