userEvent is async now

This commit is contained in:
Min RK
2024-08-27 14:52:02 +02:00
parent 5616ade51d
commit e8b2bd82c8
7 changed files with 54 additions and 52 deletions

View File

@@ -67,7 +67,7 @@ test("Removes users when they fail Regex", async () => {
fireEvent.blur(textarea, { target: { value: "foo \n bar\na@b.co\n \n\n" } }); fireEvent.blur(textarea, { target: { value: "foo \n bar\na@b.co\n \n\n" } });
await act(async () => { await act(async () => {
fireEvent.click(submit); await fireEvent.click(submit);
}); });
expect(callbackSpy).toHaveBeenCalledWith(["foo", "bar", "a@b.co"], false); expect(callbackSpy).toHaveBeenCalledWith(["foo", "bar", "a@b.co"], false);
@@ -84,10 +84,10 @@ test("Correctly submits admin", async () => {
let submit = screen.getByTestId("submit"); let submit = screen.getByTestId("submit");
let check = screen.getByTestId("check"); let check = screen.getByTestId("check");
userEvent.click(check); await userEvent.click(check);
fireEvent.blur(textarea, { target: { value: "foo" } }); fireEvent.blur(textarea, { target: { value: "foo" } });
await act(async () => { await act(async () => {
fireEvent.click(submit); await fireEvent.click(submit);
}); });
expect(callbackSpy).toHaveBeenCalledWith(["foo"], true); expect(callbackSpy).toHaveBeenCalledWith(["foo"], true);
@@ -103,7 +103,7 @@ test("Shows a UI error dialogue when user creation fails", async () => {
let submit = screen.getByTestId("submit"); let submit = screen.getByTestId("submit");
await act(async () => { await act(async () => {
fireEvent.click(submit); await fireEvent.click(submit);
}); });
let errorDialog = screen.getByText("Failed to create user."); let errorDialog = screen.getByText("Failed to create user.");
@@ -122,7 +122,7 @@ test("Shows a more specific UI error dialogue when user creation returns an impr
let submit = screen.getByTestId("submit"); let submit = screen.getByTestId("submit");
await act(async () => { await act(async () => {
fireEvent.click(submit); await fireEvent.click(submit);
}); });
let errorDialog = screen.getByText( let errorDialog = screen.getByText(

View File

@@ -63,9 +63,10 @@ test("Calls createGroup on submit", async () => {
let input = screen.getByTestId("group-input"); let input = screen.getByTestId("group-input");
let submit = screen.getByTestId("submit"); let submit = screen.getByTestId("submit");
const user = userEvent.setup({ advanceTimers: jest.advanceTimersByTime });
userEvent.type(input, "groupname"); await user.type(input, "groupname");
await act(async () => fireEvent.click(submit)); await act(async () => await fireEvent.click(submit));
expect(callbackSpy).toHaveBeenNthCalledWith(1, "groupname"); expect(callbackSpy).toHaveBeenNthCalledWith(1, "groupname");
}); });
@@ -80,7 +81,7 @@ test("Shows a UI error dialogue when group creation fails", async () => {
let submit = screen.getByTestId("submit"); let submit = screen.getByTestId("submit");
await act(async () => { await act(async () => {
fireEvent.click(submit); await fireEvent.click(submit);
}); });
let errorDialog = screen.getByText("Failed to create group."); let errorDialog = screen.getByText("Failed to create group.");
@@ -99,7 +100,7 @@ test("Shows a more specific UI error dialogue when user creation returns an impr
let submit = screen.getByTestId("submit"); let submit = screen.getByTestId("submit");
await act(async () => { await act(async () => {
fireEvent.click(submit); await fireEvent.click(submit);
}); });
let errorDialog = screen.getByText( let errorDialog = screen.getByText(

View File

@@ -80,7 +80,7 @@ test("Calls the delete user function when the button is pressed", async () => {
let deleteUser = screen.getByTestId("delete-user"); let deleteUser = screen.getByTestId("delete-user");
await act(async () => { await act(async () => {
fireEvent.click(deleteUser); await fireEvent.click(deleteUser);
}); });
expect(callbackSpy).toHaveBeenCalled(); expect(callbackSpy).toHaveBeenCalled();
@@ -95,7 +95,7 @@ test("Submits the edits when the button is pressed", async () => {
let submit = screen.getByTestId("submit"); let submit = screen.getByTestId("submit");
await act(async () => { await act(async () => {
fireEvent.click(submit); await fireEvent.click(submit);
}); });
expect(callbackSpy).toHaveBeenCalled(); expect(callbackSpy).toHaveBeenCalled();
@@ -113,7 +113,7 @@ test("Shows a UI error dialogue when user edit fails", async () => {
fireEvent.blur(usernameInput, { target: { value: "whatever" } }); fireEvent.blur(usernameInput, { target: { value: "whatever" } });
await act(async () => { await act(async () => {
fireEvent.click(submit); await fireEvent.click(submit);
}); });
let errorDialog = screen.getByText("Failed to edit user."); let errorDialog = screen.getByText("Failed to edit user.");
@@ -134,7 +134,7 @@ test("Shows a UI error dialogue when user edit returns an improper status code",
fireEvent.blur(usernameInput, { target: { value: "whatever" } }); fireEvent.blur(usernameInput, { target: { value: "whatever" } });
await act(async () => { await act(async () => {
fireEvent.click(submit); await fireEvent.click(submit);
}); });
let errorDialog = screen.getByText("Failed to edit user."); let errorDialog = screen.getByText("Failed to edit user.");

View File

@@ -80,13 +80,13 @@ test("Adds user from input to user selectables on button click", async () => {
let input = screen.getByTestId("username-input"); let input = screen.getByTestId("username-input");
let validateUser = screen.getByTestId("validate-user"); let validateUser = screen.getByTestId("validate-user");
let submit = screen.getByTestId("submit"); let submit = screen.getByTestId("submit");
const user = userEvent.setup({ advanceTimers: jest.advanceTimersByTime });
userEvent.type(input, "bar"); await user.type(input, "bar");
fireEvent.click(validateUser); await fireEvent.click(validateUser);
await act(async () => okPacket); await act(async () => okPacket);
await act(async () => { await act(async () => {
fireEvent.click(submit); await fireEvent.click(submit);
}); });
expect(callbackSpy).toHaveBeenNthCalledWith(1, ["bar"], "group"); expect(callbackSpy).toHaveBeenNthCalledWith(1, ["bar"], "group");
@@ -100,7 +100,7 @@ test("Removes a user recently added from input from the selectables list", async
}); });
let selectedUser = screen.getByText("foo"); let selectedUser = screen.getByText("foo");
fireEvent.click(selectedUser); await await fireEvent.click(selectedUser);
let unselectedUser = screen.getByText("foo"); let unselectedUser = screen.getByText("foo");
@@ -117,14 +117,14 @@ test("Grays out a user, already in the group, when unselected and calls deleteUs
let submit = screen.getByTestId("submit"); let submit = screen.getByTestId("submit");
let groupUser = screen.getByText("foo"); let groupUser = screen.getByText("foo");
fireEvent.click(groupUser); await fireEvent.click(groupUser);
let unselectedUser = screen.getByText("foo"); let unselectedUser = screen.getByText("foo");
expect(unselectedUser.className).toBe("item unselected"); expect(unselectedUser.className).toBe("item unselected");
// test deleteUser call // test deleteUser call
await act(async () => { await act(async () => {
fireEvent.click(submit); await fireEvent.click(submit);
}); });
expect(callbackSpy).toHaveBeenNthCalledWith(1, ["foo"], "group"); expect(callbackSpy).toHaveBeenNthCalledWith(1, ["foo"], "group");
@@ -140,7 +140,7 @@ test("Calls deleteGroup on button click", async () => {
let deleteGroup = screen.getByTestId("delete-group"); let deleteGroup = screen.getByTestId("delete-group");
await act(async () => { await act(async () => {
fireEvent.click(deleteGroup); await fireEvent.click(deleteGroup);
}); });
expect(callbackSpy).toHaveBeenNthCalledWith(1, "group"); expect(callbackSpy).toHaveBeenNthCalledWith(1, "group");
@@ -154,12 +154,12 @@ test("Shows a UI error dialogue when group edit fails", async () => {
}); });
let groupUser = screen.getByText("foo"); let groupUser = screen.getByText("foo");
fireEvent.click(groupUser); await fireEvent.click(groupUser);
let submit = screen.getByTestId("submit"); let submit = screen.getByTestId("submit");
await act(async () => { await act(async () => {
fireEvent.click(submit); await fireEvent.click(submit);
}); });
let errorDialog = screen.getByText("Failed to edit group."); let errorDialog = screen.getByText("Failed to edit group.");
@@ -176,12 +176,12 @@ test("Shows a UI error dialogue when group edit returns an improper status code"
}); });
let groupUser = screen.getByText("foo"); let groupUser = screen.getByText("foo");
fireEvent.click(groupUser); await fireEvent.click(groupUser);
let submit = screen.getByTestId("submit"); let submit = screen.getByTestId("submit");
await act(async () => { await act(async () => {
fireEvent.click(submit); await fireEvent.click(submit);
}); });
let errorDialog = screen.getByText("Failed to edit group."); let errorDialog = screen.getByText("Failed to edit group.");
@@ -200,7 +200,7 @@ test("Shows a UI error dialogue when group delete fails", async () => {
let deleteGroup = screen.getByTestId("delete-group"); let deleteGroup = screen.getByTestId("delete-group");
await act(async () => { await act(async () => {
fireEvent.click(deleteGroup); await fireEvent.click(deleteGroup);
}); });
let errorDialog = screen.getByText("Failed to delete group."); let errorDialog = screen.getByText("Failed to delete group.");
@@ -219,7 +219,7 @@ test("Shows a UI error dialogue when group delete returns an improper status cod
let deleteGroup = screen.getByTestId("delete-group"); let deleteGroup = screen.getByTestId("delete-group");
await act(async () => { await act(async () => {
fireEvent.click(deleteGroup); await fireEvent.click(deleteGroup);
}); });
let errorDialog = screen.getByText("Failed to delete group."); let errorDialog = screen.getByText("Failed to delete group.");

View File

@@ -138,7 +138,7 @@ test("Interacting with PaginationFooter causes page refresh", async () => {
let next = screen.getByTestId("paginate-next"); let next = screen.getByTestId("paginate-next");
await act(async () => { await act(async () => {
fireEvent.click(next); await fireEvent.click(next);
}); });
expect(updateGroupsSpy).toBeCalledWith(2, 2); expect(updateGroupsSpy).toBeCalledWith(2, 2);
// mocked updateGroups means callback after load doesn't fire // mocked updateGroups means callback after load doesn't fire

View File

@@ -453,7 +453,7 @@ const ServerDashboard = (props) => {
setStateFilter(event.target.checked ? "active" : null); setStateFilter(event.target.checked ? "active" : null);
}} }}
/> />
<Form.Check.Label for="active-servers-filter"> <Form.Check.Label htmlFor="active-servers-filter">
{"only active servers"} {"only active servers"}
</Form.Check.Label> </Form.Check.Label>
</Form.Check> </Form.Check>

View File

@@ -291,7 +291,7 @@ test("Invokes the startServer event on button click", async () => {
expect(start_elems.length).toBe(Object.keys(bar_servers).length); expect(start_elems.length).toBe(Object.keys(bar_servers).length);
await act(async () => { await act(async () => {
fireEvent.click(start_elems[0]); await fireEvent.click(start_elems[0]);
}); });
expect(callbackSpy).toHaveBeenCalled(); expect(callbackSpy).toHaveBeenCalled();
@@ -307,7 +307,7 @@ test("Invokes the stopServer event on button click", async () => {
let stop = screen.getByText("Stop Server"); let stop = screen.getByText("Stop Server");
await act(async () => { await act(async () => {
fireEvent.click(stop); await fireEvent.click(stop);
}); });
expect(callbackSpy).toHaveBeenCalled(); expect(callbackSpy).toHaveBeenCalled();
@@ -323,7 +323,7 @@ test("Invokes the shutdownHub event on button click", async () => {
let shutdown = screen.getByText("Shutdown Hub"); let shutdown = screen.getByText("Shutdown Hub");
await act(async () => { await act(async () => {
fireEvent.click(shutdown); await fireEvent.click(shutdown);
}); });
expect(callbackSpy).toHaveBeenCalled(); expect(callbackSpy).toHaveBeenCalled();
@@ -338,7 +338,7 @@ test("Sorts according to username", async () => {
expect(searchParams.get("sort")).toEqual(null); expect(searchParams.get("sort")).toEqual(null);
let handler = screen.getByTestId(testId); let handler = screen.getByTestId(testId);
fireEvent.click(handler); await fireEvent.click(handler);
expect(searchParams.get("sort")).toEqual("name"); expect(searchParams.get("sort")).toEqual("name");
await act(async () => { await act(async () => {
@@ -346,7 +346,7 @@ test("Sorts according to username", async () => {
handler = screen.getByTestId(testId); handler = screen.getByTestId(testId);
}); });
fireEvent.click(handler); await fireEvent.click(handler);
expect(searchParams.get("sort")).toEqual("-name"); expect(searchParams.get("sort")).toEqual("-name");
await act(async () => { await act(async () => {
@@ -354,7 +354,7 @@ test("Sorts according to username", async () => {
handler = screen.getByTestId(testId); handler = screen.getByTestId(testId);
}); });
fireEvent.click(handler); await fireEvent.click(handler);
expect(searchParams.get("sort")).toEqual("name"); expect(searchParams.get("sort")).toEqual("name");
}); });
@@ -367,7 +367,7 @@ test("Sorts according to last activity", async () => {
expect(searchParams.get("sort")).toEqual(null); expect(searchParams.get("sort")).toEqual(null);
let handler = screen.getByTestId(testId); let handler = screen.getByTestId(testId);
fireEvent.click(handler); await fireEvent.click(handler);
expect(searchParams.get("sort")).toEqual("last_activity"); expect(searchParams.get("sort")).toEqual("last_activity");
await act(async () => { await act(async () => {
@@ -375,7 +375,7 @@ test("Sorts according to last activity", async () => {
handler = screen.getByTestId(testId); handler = screen.getByTestId(testId);
}); });
fireEvent.click(handler); await fireEvent.click(handler);
expect(searchParams.get("sort")).toEqual("-last_activity"); expect(searchParams.get("sort")).toEqual("-last_activity");
await act(async () => { await act(async () => {
@@ -383,7 +383,7 @@ test("Sorts according to last activity", async () => {
handler = screen.getByTestId(testId); handler = screen.getByTestId(testId);
}); });
fireEvent.click(handler); await fireEvent.click(handler);
expect(searchParams.get("sort")).toEqual("last_activity"); expect(searchParams.get("sort")).toEqual("last_activity");
}); });
@@ -397,7 +397,7 @@ test("Filter according to server status (running/not running)", async () => {
const label = "only active servers"; const label = "only active servers";
let handler = screen.getByLabelText(label); let handler = screen.getByLabelText(label);
expect(handler.checked).toEqual(false); expect(handler.checked).toEqual(false);
fireEvent.click(handler); await fireEvent.click(handler);
// FIXME: need to force a rerender to get updated checkbox // FIXME: need to force a rerender to get updated checkbox
// I don't think this should be required // I don't think this should be required
@@ -408,7 +408,7 @@ test("Filter according to server status (running/not running)", async () => {
expect(searchParams.get("state")).toEqual("active"); expect(searchParams.get("state")).toEqual("active");
expect(handler.checked).toEqual(true); expect(handler.checked).toEqual(true);
fireEvent.click(handler); await fireEvent.click(handler);
await act(async () => { await act(async () => {
rerender(serverDashboardJsx()); rerender(serverDashboardJsx());
@@ -433,7 +433,7 @@ test("Shows server details with button click", async () => {
expect(collapseBar).not.toHaveClass("show"); expect(collapseBar).not.toHaveClass("show");
await act(async () => { await act(async () => {
fireEvent.click(button); await fireEvent.click(button);
jest.runAllTimers(); jest.runAllTimers();
}); });
@@ -441,7 +441,7 @@ test("Shows server details with button click", async () => {
expect(collapseBar).not.toHaveClass("show"); expect(collapseBar).not.toHaveClass("show");
await act(async () => { await act(async () => {
fireEvent.click(button); await fireEvent.click(button);
jest.runAllTimers(); jest.runAllTimers();
}); });
@@ -450,7 +450,7 @@ test("Shows server details with button click", async () => {
expect(collapseBar).not.toHaveClass("show"); expect(collapseBar).not.toHaveClass("show");
await act(async () => { await act(async () => {
fireEvent.click(button); await fireEvent.click(button);
jest.runAllTimers(); jest.runAllTimers();
}); });
@@ -480,7 +480,7 @@ test("Shows a UI error dialogue when start all servers fails", async () => {
let startAll = screen.getByTestId("start-all"); let startAll = screen.getByTestId("start-all");
await act(async () => { await act(async () => {
fireEvent.click(startAll); await fireEvent.click(startAll);
}); });
let errorDialog = screen.getByText("Failed to start servers."); let errorDialog = screen.getByText("Failed to start servers.");
@@ -496,7 +496,7 @@ test("Shows a UI error dialogue when stop all servers fails", async () => {
let stopAll = screen.getByTestId("stop-all"); let stopAll = screen.getByTestId("stop-all");
await act(async () => { await act(async () => {
fireEvent.click(stopAll); await fireEvent.click(stopAll);
}); });
let errorDialog = screen.getByText("Failed to stop servers."); let errorDialog = screen.getByText("Failed to stop servers.");
@@ -513,7 +513,7 @@ test("Shows a UI error dialogue when start user server fails", async () => {
expect(start_elems.length).toBe(Object.keys(bar_servers).length); expect(start_elems.length).toBe(Object.keys(bar_servers).length);
await act(async () => { await act(async () => {
fireEvent.click(start_elems[0]); await fireEvent.click(start_elems[0]);
}); });
let errorDialog = screen.getByText("Failed to start server."); let errorDialog = screen.getByText("Failed to start server.");
@@ -531,7 +531,7 @@ test("Shows a UI error dialogue when start user server returns an improper statu
expect(start_elems.length).toBe(Object.keys(bar_servers).length); expect(start_elems.length).toBe(Object.keys(bar_servers).length);
await act(async () => { await act(async () => {
fireEvent.click(start_elems[0]); await fireEvent.click(start_elems[0]);
}); });
let errorDialog = screen.getByText("Failed to start server."); let errorDialog = screen.getByText("Failed to start server.");
@@ -550,7 +550,7 @@ test("Shows a UI error dialogue when stop user servers fails", async () => {
let stop = screen.getByText("Stop Server"); let stop = screen.getByText("Stop Server");
await act(async () => { await act(async () => {
fireEvent.click(stop); await fireEvent.click(stop);
}); });
let errorDialog = screen.getByText("Failed to stop server."); let errorDialog = screen.getByText("Failed to stop server.");
@@ -569,7 +569,7 @@ test("Shows a UI error dialogue when stop user server returns an improper status
let stop = screen.getByText("Stop Server"); let stop = screen.getByText("Stop Server");
await act(async () => { await act(async () => {
fireEvent.click(stop); await fireEvent.click(stop);
}); });
let errorDialog = screen.getByText("Failed to stop server."); let errorDialog = screen.getByText("Failed to stop server.");
@@ -584,12 +584,13 @@ test("Search for user calls updateUsers with name filter", async () => {
render(serverDashboardJsx()); render(serverDashboardJsx());
}); });
const user = userEvent.setup({ advanceTimers: jest.advanceTimersByTime });
let search = screen.getByLabelText("user-search"); let search = screen.getByLabelText("user-search");
expect(mockUpdateUsers.mock.calls).toHaveLength(1); expect(mockUpdateUsers.mock.calls).toHaveLength(1);
expect(searchParams.get("offset")).toEqual("2"); expect(searchParams.get("offset")).toEqual("2");
userEvent.type(search, "a"); await user.type(search, "a");
expect(search.value).toEqual("a"); expect(search.value).toEqual("a");
await act(async () => { await act(async () => {
jest.runAllTimers(); jest.runAllTimers();
@@ -599,7 +600,7 @@ test("Search for user calls updateUsers with name filter", async () => {
// FIXME: useSelector mocks prevent updateUsers from being called // FIXME: useSelector mocks prevent updateUsers from being called
// expect(mockUpdateUsers.mock.calls).toHaveLength(2); // expect(mockUpdateUsers.mock.calls).toHaveLength(2);
// expect(mockUpdateUsers).toBeCalledWith(0, 100, "a"); // expect(mockUpdateUsers).toBeCalledWith(0, 100, "a");
userEvent.type(search, "b"); await user.type(search, "b");
expect(search.value).toEqual("ab"); expect(search.value).toEqual("ab");
await act(async () => { await act(async () => {
jest.runAllTimers(); jest.runAllTimers();
@@ -672,7 +673,7 @@ test("Start server and confirm pending state", async () => {
expect(buttons[2].textContent).toBe("Edit User"); expect(buttons[2].textContent).toBe("Edit User");
await act(async () => { await act(async () => {
fireEvent.click(buttons[0]); await fireEvent.click(buttons[0]);
}); });
expect(mockUpdateUsers.mock.calls).toHaveLength(1); expect(mockUpdateUsers.mock.calls).toHaveLength(1);