Updated CreateGroup, EditUser to testing-library. Added tests

This commit is contained in:
Nathan Barber
2021-11-30 23:23:52 -05:00
parent 9e245379e8
commit c048ad4aac
5 changed files with 274 additions and 161 deletions

View File

@@ -1,16 +1,16 @@
import React from "react";
import "@testing-library/jest-dom";
import { act } from "react-dom/test-utils";
import { render, screen, fireEvent } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import { render, screen, fireEvent } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { Provider, useDispatch, useSelector } from "react-redux";
import { createStore } from "redux";
import { HashRouter } from "react-router-dom";
import AddUser from "./AddUser";
// eslint-disable-next-line
import regeneratorRuntime from 'regenerator-runtime'
import AddUser from "./AddUser";
jest.mock("react-redux", () => ({
...jest.requireActual("react-redux"),
useDispatch: jest.fn(),
@@ -18,11 +18,7 @@ jest.mock("react-redux", () => ({
}));
var mockAsync = (result) =>
jest
.fn()
.mockImplementation(() =>
Promise.resolve(result)
);
jest.fn().mockImplementation(() => Promise.resolve(result));
var mockAsyncRejection = () =>
jest.fn().mockImplementation(() => Promise.reject());
@@ -59,25 +55,25 @@ afterEach(() => {
test("Renders", async () => {
await act(async () => {
render(addUserJsx())
})
expect(screen.getByTestId("container")).toBeVisible()
render(addUserJsx());
});
expect(screen.getByTestId("container")).toBeVisible();
});
test("Removes users when they fail Regex", async () => {
let callbackSpy = mockAsync();
await act(async () => {
render(addUserJsx(callbackSpy))
})
render(addUserJsx(callbackSpy));
});
let textarea = screen.getByTestId("user-textarea")
let submit = screen.getByTestId("submit")
let textarea = screen.getByTestId("user-textarea");
let submit = screen.getByTestId("submit");
fireEvent.blur(textarea, { target: { value: "foo\nbar\n!!*&*" }})
fireEvent.blur(textarea, { target: { value: "foo\nbar\n!!*&*" } });
await act(async () => {
fireEvent.click(submit)
})
fireEvent.click(submit);
});
expect(callbackSpy).toHaveBeenCalledWith(["foo", "bar"], false);
});
@@ -86,18 +82,18 @@ test("Correctly submits admin", async () => {
let callbackSpy = mockAsync();
await act(async () => {
render(addUserJsx(callbackSpy))
})
render(addUserJsx(callbackSpy));
});
let textarea = screen.getByTestId("user-textarea")
let submit = screen.getByTestId("submit")
let check = screen.getByTestId("check")
let textarea = screen.getByTestId("user-textarea");
let submit = screen.getByTestId("submit");
let check = screen.getByTestId("check");
userEvent.click(check)
fireEvent.blur(textarea, { target: { value: "foo" }})
userEvent.click(check);
fireEvent.blur(textarea, { target: { value: "foo" } });
await act(async () => {
fireEvent.click(submit)
})
fireEvent.click(submit);
});
expect(callbackSpy).toHaveBeenCalledWith(["foo"], true);
});
@@ -106,36 +102,38 @@ test("Shows a UI error dialogue when user creation fails", async () => {
let callbackSpy = mockAsyncRejection();
await act(async () => {
render(addUserJsx(callbackSpy))
})
render(addUserJsx(callbackSpy));
});
let submit = screen.getByTestId("submit")
let submit = screen.getByTestId("submit");
await act(async () => {
fireEvent.click(submit)
})
fireEvent.click(submit);
});
let errorDialog = screen.getByText("Failed to create user.")
let errorDialog = screen.getByText("Failed to create user.");
expect(errorDialog).toBeVisible()
expect(errorDialog).toBeVisible();
expect(callbackSpy).toHaveBeenCalled();
});
test("Shows a more specific UI error dialogue when user creation returns an improper status code", async () => {
let callbackSpy = mockAsync({status: 409});
let callbackSpy = mockAsync({ status: 409 });
await act(async () => {
render(addUserJsx(callbackSpy))
})
render(addUserJsx(callbackSpy));
});
let submit = screen.getByTestId("submit")
let submit = screen.getByTestId("submit");
await act(async () => {
fireEvent.click(submit)
})
fireEvent.click(submit);
});
let errorDialog = screen.getByText("Failed to create user. User already exists.")
let errorDialog = screen.getByText(
"Failed to create user. User already exists."
);
expect(errorDialog).toBeVisible()
expect(errorDialog).toBeVisible();
expect(callbackSpy).toHaveBeenCalled();
});