Skip to content

Commit 567246c

Browse files
authored
Merge pull request #190 from codeableorg/kelly/signup
Signup Loader Test
2 parents 7643698 + 2024d2f commit 567246c

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

src/routes/signup/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ export async function action({ request }: Route.ActionArgs) {
8787
}
8888

8989
export async function loader({ request }: Route.LoaderArgs) {
90-
redirectIfAuthenticated(request);
90+
await redirectIfAuthenticated(request);
9191
}
9292

9393
export default function Signup({ actionData }: Route.ComponentProps) {
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import { redirect } from "react-router";
2+
import { describe, expect, it, vi, afterEach } from "vitest";
3+
4+
import { createTestRequest } from "@/lib/utils.tests";
5+
import * as AuthService from "@/services/auth.service";
6+
7+
import { loader } from ".";
8+
9+
import type { Route } from "./+types";
10+
11+
vi.mock("@/services/auth.service", () => ({
12+
redirectIfAuthenticated: vi.fn(),
13+
}));
14+
15+
describe("signup.loader", () => {
16+
afterEach(() => {
17+
vi.clearAllMocks();
18+
});
19+
20+
it("should call redirectIfAuthenticated with request", async () => {
21+
// Step 1: Setup/Arrange
22+
const request = createTestRequest();
23+
const loaderArgs: Route.LoaderArgs = { request, params: {}, context: {} };
24+
25+
// Step 2: Mock
26+
vi.mocked(AuthService.redirectIfAuthenticated).mockResolvedValueOnce(null);
27+
28+
// Step 3: Call/Act
29+
await loader(loaderArgs);
30+
31+
// Step 4: Verify/Assert
32+
expect(AuthService.redirectIfAuthenticated).toHaveBeenCalledTimes(1);
33+
expect(AuthService.redirectIfAuthenticated).toHaveBeenCalledWith(request);
34+
});
35+
36+
it("should return undefined when user is not authenticated", async () => {
37+
// Step 1: Setup/Arrange
38+
const request = createTestRequest();
39+
const loaderArgs: Route.LoaderArgs = { request, params: {}, context: {} };
40+
41+
// Step 2: Mock
42+
vi.mocked(AuthService.redirectIfAuthenticated).mockResolvedValueOnce(null);
43+
44+
// Step 3: Call/Act
45+
const result = await loader(loaderArgs);
46+
47+
// Step 4: Verify/Assert
48+
expect(result).toBeUndefined();
49+
});
50+
51+
it("should throw redirect when user is authenticated", async () => {
52+
// Step 1: Setup/Arrange
53+
const request = createTestRequest();
54+
const loaderArgs: Route.LoaderArgs = { request, params: {}, context: {} };
55+
const redirectResponse = redirect("/");
56+
57+
// Step 2: Mock
58+
vi.mocked(AuthService.redirectIfAuthenticated).mockImplementationOnce(
59+
() => {
60+
throw redirectResponse;
61+
}
62+
);
63+
64+
// Step 3 & 4: Call and Verify
65+
await expect(loader(loaderArgs)).rejects.toBe(redirectResponse);
66+
});
67+
});

0 commit comments

Comments
 (0)