import { MantineProvider } from "@mantine/core"; import { fireEvent, render, screen, waitFor } from "@testing-library/react"; import { MemoryRouter } from "react-router"; import { describe, expect, it, vi } from "vitest"; import { AuthForm } from "./AuthForm"; describe("AuthForm", () => { it("does not submit registration when password confirmation differs", async () => { const onSubmit = vi.fn(); render( , ); fireEvent.change(screen.getByLabelText("Email"), { target: { value: "user@example.com" }, }); fireEvent.change(screen.getByLabelText("Пароль"), { target: { value: "a secure password" }, }); fireEvent.change(screen.getByLabelText("Подтвердите пароль"), { target: { value: "another secure password" }, }); fireEvent.click(screen.getByRole("button", { name: "Регистрация" })); await waitFor(() => expect(onSubmit).not.toHaveBeenCalled()); expect(await screen.findByText("Пароли не совпадают")).toBeInTheDocument(); }); it.each([ ["register", "Регистрация", "Уже есть аккаунт? Войти"], ["login", "Вход", "Нет аккаунта? Зарегистрироваться"], ])("blocks the switch-auth link while %s is submitting", async (_mode, submitLabel, linkLabel) => { const { promise, resolve } = Promise.withResolvers(); const onSubmit = vi.fn(() => promise); render( , ); fireEvent.change(screen.getByLabelText("Email"), { target: { value: "user@example.com" }, }); fireEvent.change(screen.getByLabelText("Пароль"), { target: { value: "a secure password" }, }); if (_mode === "register") { fireEvent.change(screen.getByLabelText("Подтвердите пароль"), { target: { value: "a secure password" }, }); } fireEvent.click(screen.getByRole("button", { name: submitLabel })); await waitFor(() => expect(onSubmit).toHaveBeenCalled()); expect(screen.queryByRole("link", { name: linkLabel })).not.toBeInTheDocument(); expect(screen.getByRole("button", { name: linkLabel })).toBeDisabled(); resolve(); await screen.findByRole("link", { name: linkLabel }); }); });