import { createMemoryRouter, RouterProvider } from "react-router";
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
describe("App Navigation", () => {
it("navigates through the app flow", async () => {
const router = createMemoryRouter(
[
{
path: "/",
element: <Layout />,
children: [
{
index: true,
element: <Home />,
},
{
path: "login",
element: <Login />,
action: loginAction,
},
{
path: "dashboard",
element: <Dashboard />,
loader: dashboardLoader,
},
],
},
],
{
initialEntries: ["/"],
}
);
render(<RouterProvider router={router} />);
// Start at home
expect(screen.getByText("Welcome")).toBeInTheDocument();
// Navigate to login
await userEvent.click(screen.getByText("Login"));
expect(screen.getByLabelText("Username")).toBeInTheDocument();
// Submit login form
await userEvent.type(screen.getByLabelText("Username"), "john");
await userEvent.type(screen.getByLabelText("Password"), "secret");
await userEvent.click(screen.getByText("Submit"));
// Should navigate to dashboard
await waitFor(() => {
expect(screen.getByText("Dashboard")).toBeInTheDocument();
});
});
});