Skip to content

Commit

Permalink
add form autosubmit test
Browse files Browse the repository at this point in the history
  • Loading branch information
bseber committed Jul 5, 2024
1 parent 30ce337 commit d4e7d05
Showing 1 changed file with 81 additions and 0 deletions.
81 changes: 81 additions & 0 deletions src/main/javascript/components/form/autosubmit.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import {
afterEach,
beforeAll,
beforeEach,
describe,
expect,
test,
} from "vitest";
import { initAutosubmit } from "./autosubmit";

describe("autosubmit", () => {
beforeAll(() => {
initAutosubmit();
});

beforeEach(() => {
// prevent HTMLFormElement.prototype.requestSubmit is not implemented log.
//
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
window._virtualConsole.emit = () => {};
});

afterEach(() => {
while (document.body.firstChild) {
document.body.firstChild.remove();
}
});

test("auto-submits text input", async () => {
document.body.innerHTML = `
<form action="#">
<input type="text" data-auto-submit="submitter" />
<button type="submit" id="submitter">Submit</button>
</form>
`;

let submitter;

document.querySelector("form").addEventListener("submit", function (event) {
submitter = event.submitter;
});

const inputElement = document.querySelector("input");
inputElement.value = "awesome text";
inputElement.dispatchEvent(new InputEvent("input", { bubbles: true }));

await wait();

expect(submitter).toBe(document.querySelector("button"));
});

test("auto-submits text input with custom delay", async () => {
document.body.innerHTML = `
<form action="#">
<input type="text" data-auto-submit="submitter" data-auto-submit-delay="100" />
<button type="submit" id="submitter">Submit</button>
</form>
`;

let submitter;

document.querySelector("form").addEventListener("submit", function (event) {
submitter = event.submitter;
});

const inputElement = document.querySelector("input");
inputElement.value = "awesome text";
inputElement.dispatchEvent(new InputEvent("input", { bubbles: true }));

await wait();
expect(submitter).toBeUndefined();

await wait(100);
expect(submitter).toBe(document.querySelector("button"));
});
});

function wait(delay = 0) {
return new Promise((resolve) => setTimeout(resolve, delay));
}

0 comments on commit d4e7d05

Please sign in to comment.