test(auth): wrap component rendering in act()
This commit is contained in:
@@ -1,24 +1,26 @@
|
|||||||
import { selectAuthData, useAuthStore } from "../../model";
|
import { selectAuthData, useAuthStore } from "../../model";
|
||||||
import { render, screen } from "@testing-library/react";
|
import { act, render, screen } from "@testing-library/react";
|
||||||
import userEvent from "@testing-library/user-event";
|
import userEvent from "@testing-library/user-event";
|
||||||
import { LoginForm } from "./LoginForm";
|
import { LoginForm } from "./LoginForm";
|
||||||
import { MOCK_EMAIL, MOCK_PASSWORD } from "../../api";
|
import { MOCK_EMAIL, MOCK_PASSWORD } from "../../api";
|
||||||
|
import { useTokenStore } from "shared/api";
|
||||||
|
|
||||||
describe("LoginForm", () => {
|
describe("LoginForm", () => {
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
useAuthStore.getState().reset();
|
useAuthStore.getState().reset();
|
||||||
|
useTokenStore.getState().reset();
|
||||||
vi.restoreAllMocks();
|
vi.restoreAllMocks();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should render form", () => {
|
it("should render form", () => {
|
||||||
render(<LoginForm />);
|
act(() => render(<LoginForm />));
|
||||||
const form = screen.getByRole("form");
|
const form = screen.getByRole("form");
|
||||||
|
|
||||||
expect(form).toBeInTheDocument();
|
expect(form).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("disables submit button when form is invalid", () => {
|
it("disables submit button when form is invalid", () => {
|
||||||
render(<LoginForm />);
|
act(() => render(<LoginForm />));
|
||||||
const loginButton = screen.getByRole("button", { name: /login/i });
|
const loginButton = screen.getByRole("button", { name: /login/i });
|
||||||
|
|
||||||
expect(loginButton).toBeDisabled();
|
expect(loginButton).toBeDisabled();
|
||||||
@@ -27,7 +29,7 @@ describe("LoginForm", () => {
|
|||||||
it("disables submit button when auth store status equals loading", async () => {
|
it("disables submit button when auth store status equals loading", async () => {
|
||||||
useAuthStore.setState({ status: "loading" });
|
useAuthStore.setState({ status: "loading" });
|
||||||
|
|
||||||
render(<LoginForm />);
|
act(() => render(<LoginForm />));
|
||||||
|
|
||||||
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
||||||
const passwordInput = screen.getByLabelText(/password/i);
|
const passwordInput = screen.getByLabelText(/password/i);
|
||||||
@@ -41,7 +43,7 @@ describe("LoginForm", () => {
|
|||||||
it("enables submit button when form is valid and auth store status isn't equal to loading", async () => {
|
it("enables submit button when form is valid and auth store status isn't equal to loading", async () => {
|
||||||
useAuthStore.setState({ status: "idle" });
|
useAuthStore.setState({ status: "idle" });
|
||||||
|
|
||||||
render(<LoginForm />);
|
act(() => render(<LoginForm />));
|
||||||
|
|
||||||
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
||||||
const passwordInput = screen.getByLabelText(/password/i);
|
const passwordInput = screen.getByLabelText(/password/i);
|
||||||
@@ -53,7 +55,7 @@ describe("LoginForm", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("updates email value in auth store when user types", async () => {
|
it("updates email value in auth store when user types", async () => {
|
||||||
render(<LoginForm />);
|
act(() => render(<LoginForm />));
|
||||||
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
||||||
await userEvent.type(emailInput, MOCK_EMAIL);
|
await userEvent.type(emailInput, MOCK_EMAIL);
|
||||||
|
|
||||||
@@ -62,7 +64,7 @@ describe("LoginForm", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("updates password value in auth store when user types", async () => {
|
it("updates password value in auth store when user types", async () => {
|
||||||
render(<LoginForm />);
|
act(() => render(<LoginForm />));
|
||||||
const passwordInput = screen.getByLabelText(/password/i);
|
const passwordInput = screen.getByLabelText(/password/i);
|
||||||
await userEvent.type(passwordInput, MOCK_PASSWORD);
|
await userEvent.type(passwordInput, MOCK_PASSWORD);
|
||||||
|
|
||||||
@@ -74,7 +76,7 @@ describe("LoginForm", () => {
|
|||||||
const loginSpy = vi.spyOn(useAuthStore.getState(), "login");
|
const loginSpy = vi.spyOn(useAuthStore.getState(), "login");
|
||||||
useAuthStore.setState({ status: "idle" });
|
useAuthStore.setState({ status: "idle" });
|
||||||
|
|
||||||
render(<LoginForm />);
|
act(() => render(<LoginForm />));
|
||||||
|
|
||||||
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
||||||
const passwordInput = screen.getByLabelText(/password/i);
|
const passwordInput = screen.getByLabelText(/password/i);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { render, screen } from "@testing-library/react";
|
import { act, render, screen } from "@testing-library/react";
|
||||||
import { RegisterForm } from "./RegisterForm";
|
import { RegisterForm } from "./RegisterForm";
|
||||||
import { selectAuthData, useAuthStore } from "../../model";
|
import { selectAuthData, useAuthStore } from "../../model";
|
||||||
import { MOCK_NEW_EMAIL, MOCK_PASSWORD } from "../../api";
|
import { MOCK_NEW_EMAIL, MOCK_PASSWORD } from "../../api";
|
||||||
@@ -11,14 +11,14 @@ describe("RegisterForm", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should render form", () => {
|
it("should render form", () => {
|
||||||
render(<RegisterForm />);
|
act(() => render(<RegisterForm />));
|
||||||
|
|
||||||
const form = screen.getByRole("form");
|
const form = screen.getByRole("form");
|
||||||
expect(form).toBeInTheDocument();
|
expect(form).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should disable button when form is invalid", async () => {
|
it("should disable button when form is invalid", async () => {
|
||||||
render(<RegisterForm />);
|
act(() => render(<RegisterForm />));
|
||||||
|
|
||||||
const registerButton = screen.getByRole("button", { name: /register/i });
|
const registerButton = screen.getByRole("button", { name: /register/i });
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ describe("RegisterForm", () => {
|
|||||||
it("should disable button when auth store status equals loading", async () => {
|
it("should disable button when auth store status equals loading", async () => {
|
||||||
useAuthStore.setState({ status: "loading" });
|
useAuthStore.setState({ status: "loading" });
|
||||||
|
|
||||||
render(<RegisterForm />);
|
act(() => render(<RegisterForm />));
|
||||||
|
|
||||||
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
||||||
const passwordInput = screen.getByLabelText(/password/i);
|
const passwordInput = screen.getByLabelText(/password/i);
|
||||||
@@ -43,7 +43,7 @@ describe("RegisterForm", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should disable button when password and confirm password do not match", async () => {
|
it("should disable button when password and confirm password do not match", async () => {
|
||||||
render(<RegisterForm />);
|
act(() => render(<RegisterForm />));
|
||||||
|
|
||||||
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
||||||
const passwordInput = screen.getByLabelText(/password/i);
|
const passwordInput = screen.getByLabelText(/password/i);
|
||||||
@@ -60,7 +60,7 @@ describe("RegisterForm", () => {
|
|||||||
it("should enable button when password and confirm password match and auth store status isn't equal to loading", async () => {
|
it("should enable button when password and confirm password match and auth store status isn't equal to loading", async () => {
|
||||||
useAuthStore.setState({ status: "idle" });
|
useAuthStore.setState({ status: "idle" });
|
||||||
|
|
||||||
render(<RegisterForm />);
|
act(() => render(<RegisterForm />));
|
||||||
|
|
||||||
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
||||||
const passwordInput = screen.getByLabelText(/password/i);
|
const passwordInput = screen.getByLabelText(/password/i);
|
||||||
@@ -75,7 +75,7 @@ describe("RegisterForm", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should change email value in auth store when user types", async () => {
|
it("should change email value in auth store when user types", async () => {
|
||||||
render(<RegisterForm />);
|
act(() => render(<RegisterForm />));
|
||||||
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
||||||
await userEvent.type(emailInput, MOCK_NEW_EMAIL);
|
await userEvent.type(emailInput, MOCK_NEW_EMAIL);
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ describe("RegisterForm", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should change password value in auth store when user types", async () => {
|
it("should change password value in auth store when user types", async () => {
|
||||||
render(<RegisterForm />);
|
act(() => render(<RegisterForm />));
|
||||||
const passwordInput = screen.getByLabelText(/password/i);
|
const passwordInput = screen.getByLabelText(/password/i);
|
||||||
await userEvent.type(passwordInput, MOCK_PASSWORD);
|
await userEvent.type(passwordInput, MOCK_PASSWORD);
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ describe("RegisterForm", () => {
|
|||||||
const registerSpy = vi.spyOn(useAuthStore.getState(), "register");
|
const registerSpy = vi.spyOn(useAuthStore.getState(), "register");
|
||||||
useAuthStore.setState({ status: "idle" });
|
useAuthStore.setState({ status: "idle" });
|
||||||
|
|
||||||
render(<RegisterForm />);
|
act(() => render(<RegisterForm />));
|
||||||
|
|
||||||
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
const emailInput = screen.getByRole("textbox", { name: /email/i });
|
||||||
const passwordInput = screen.getByLabelText(/password/i);
|
const passwordInput = screen.getByLabelText(/password/i);
|
||||||
|
|||||||
Reference in New Issue
Block a user