Skip to content

Commit 9a2a289

Browse files
committed
test(react): SignUpAuthScreen tests
1 parent db7be28 commit 9a2a289

File tree

1 file changed

+121
-59
lines changed

1 file changed

+121
-59
lines changed

packages/react/src/auth/screens/sign-up-auth-screen.test.tsx

Lines changed: 121 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
66
* You may obtain a copy of the License at
7-
*
87
* http://www.apache.org/licenses/LICENSE-2.0
98
*
109
* Unless required by applicable law or agreed to in writing, software
@@ -14,88 +13,151 @@
1413
* limitations under the License.
1514
*/
1615

17-
import { describe, expect, it, vi } from "vitest";
18-
import { render, screen } from "@testing-library/react";
16+
import { describe, it, expect, vi, afterEach, beforeEach } from "vitest";
17+
import { render, screen, fireEvent, cleanup } from "@testing-library/react";
1918
import { SignUpAuthScreen } from "~/auth/screens/sign-up-auth-screen";
19+
import { CreateFirebaseUIProvider, createMockUI } from "~/tests/utils";
20+
import { registerLocale } from "@firebase-ui/translations";
2021

21-
// Mock hooks
22-
vi.mock("~/hooks", () => ({
23-
useUI: () => ({
24-
locale: "en-US",
25-
translations: {
26-
"en-US": {
27-
labels: {
28-
register: "Create Account",
29-
dividerOr: "OR",
30-
},
31-
prompts: {
32-
enterDetailsToCreate: "Enter your details to create an account",
33-
},
34-
},
35-
},
36-
}),
37-
}));
38-
39-
// Mock translations
40-
// vi.mock("@firebase-ui/core", () => ({
41-
// getTranslation: vi.fn((category, key) => {
42-
// if (category === "labels" && key === "register") return "Create Account";
43-
// if (category === "prompts" && key === "enterDetailsToCreate")
44-
// return "Enter your details to create an account";
45-
// if (category === "messages" && key === "dividerOr") return "OR";
46-
// return `${category}.${key}`;
47-
// }),
48-
// }));
49-
50-
// Mock RegisterForm component
51-
vi.mock("~/auth/forms/register-form", () => ({
52-
RegisterForm: ({ onBackToSignInClick }: { onBackToSignInClick?: () => void }) => (
53-
<div data-testid="register-form">
22+
vi.mock("~/auth/forms/sign-up-auth-form", () => ({
23+
SignUpAuthForm: ({ onBackToSignInClick }: { onBackToSignInClick?: () => void }) => (
24+
<div data-testid="sign-up-auth-form">
5425
<button data-testid="back-to-sign-in-button" onClick={onBackToSignInClick}>
5526
Back to Sign In
5627
</button>
5728
</div>
5829
),
5930
}));
6031

61-
describe("SignUpAuthScreen", () => {
62-
it("renders the correct title and subtitle", () => {
63-
render(<SignUpAuthScreen />);
32+
vi.mock("~/components/divider", async (originalModule) => {
33+
const module = await originalModule();
34+
return {
35+
...(module as object),
36+
Divider: ({ children }: { children: React.ReactNode }) => (
37+
<div data-testid="divider">{children}</div>
38+
),
39+
};
40+
});
41+
42+
describe("<SignUpAuthScreen />", () => {
43+
beforeEach(() => {
44+
vi.clearAllMocks();
45+
});
46+
47+
afterEach(() => {
48+
cleanup();
49+
});
50+
51+
it("renders with correct title and subtitle", () => {
52+
const ui = createMockUI({
53+
locale: registerLocale("test", {
54+
labels: {
55+
register: "register",
56+
},
57+
prompts: {
58+
enterDetailsToCreate: "enterDetailsToCreate",
59+
},
60+
}),
61+
});
62+
63+
render(
64+
<CreateFirebaseUIProvider ui={ui}>
65+
<SignUpAuthScreen />
66+
</CreateFirebaseUIProvider>
67+
);
68+
69+
const title = screen.getByText("register");
70+
expect(title).toBeDefined();
71+
expect(title.className).toContain("fui-card__title");
6472

65-
expect(screen.getByText("Create Account")).toBeInTheDocument();
66-
expect(screen.getByText("Enter your details to create an account")).toBeInTheDocument();
73+
const subtitle = screen.getByText("enterDetailsToCreate");
74+
expect(subtitle).toBeDefined();
75+
expect(subtitle.className).toContain("fui-card__subtitle");
6776
});
6877

69-
it("includes the RegisterForm component", () => {
70-
render(<SignUpAuthScreen />);
78+
it("renders the <SignUpAuthForm /> component", () => {
79+
const ui = createMockUI();
7180

72-
expect(screen.getByTestId("register-form")).toBeInTheDocument();
81+
render(
82+
<CreateFirebaseUIProvider ui={ui}>
83+
<SignUpAuthScreen />
84+
</CreateFirebaseUIProvider>
85+
);
86+
87+
// Mocked so only has as test id
88+
expect(screen.getByTestId("sign-up-auth-form")).toBeDefined();
7389
});
7490

75-
it("passes the onBackToSignInClick prop to the RegisterForm", async () => {
76-
const onBackToSignInClick = vi.fn();
77-
render(<SignUpAuthScreen onBackToSignInClick={onBackToSignInClick} />);
91+
it("passes onBackToSignInClick to SignUpAuthForm", () => {
92+
const mockOnBackToSignInClick = vi.fn();
93+
const ui = createMockUI();
94+
95+
render(
96+
<CreateFirebaseUIProvider ui={ui}>
97+
<SignUpAuthScreen onBackToSignInClick={mockOnBackToSignInClick} />
98+
</CreateFirebaseUIProvider>
99+
);
78100

79101
const backButton = screen.getByTestId("back-to-sign-in-button");
80-
backButton.click();
102+
fireEvent.click(backButton);
103+
104+
expect(mockOnBackToSignInClick).toHaveBeenCalledTimes(1);
105+
});
106+
107+
it("renders a divider with children when present", () => {
108+
const ui = createMockUI({
109+
locale: registerLocale("test", {
110+
messages: {
111+
dividerOr: "dividerOr",
112+
},
113+
}),
114+
});
81115

82-
expect(onBackToSignInClick).toHaveBeenCalled();
116+
render(
117+
<CreateFirebaseUIProvider ui={ui}>
118+
<SignUpAuthScreen>
119+
<div data-testid="test-child">Test Child</div>
120+
</SignUpAuthScreen>
121+
</CreateFirebaseUIProvider>
122+
);
123+
124+
expect(screen.getByTestId("divider")).toBeDefined();
125+
expect(screen.getByText("dividerOr")).toBeDefined();
126+
expect(screen.getByTestId("test-child")).toBeDefined();
83127
});
84128

85-
it("renders children when provided", () => {
129+
it("does not render divider and children when no children are provided", () => {
130+
const ui = createMockUI();
131+
86132
render(
87-
<SignUpAuthScreen>
88-
<div data-testid="test-child">Child element</div>
89-
</SignUpAuthScreen>
133+
<CreateFirebaseUIProvider ui={ui}>
134+
<SignUpAuthScreen />
135+
</CreateFirebaseUIProvider>
90136
);
91137

92-
expect(screen.getByTestId("test-child")).toBeInTheDocument();
93-
expect(screen.getByText("or")).toBeInTheDocument();
138+
expect(screen.queryByTestId("divider")).toBeNull();
94139
});
95140

96-
it("does not render divider or children container when no children are provided", () => {
97-
render(<SignUpAuthScreen />);
141+
it("renders multiple children when provided", () => {
142+
const ui = createMockUI({
143+
locale: registerLocale("test", {
144+
messages: {
145+
dividerOr: "dividerOr",
146+
},
147+
}),
148+
});
98149

99-
expect(screen.queryByText("or")).not.toBeInTheDocument();
150+
render(
151+
<CreateFirebaseUIProvider ui={ui}>
152+
<SignUpAuthScreen>
153+
<div data-testid="child-1">Child 1</div>
154+
<div data-testid="child-2">Child 2</div>
155+
</SignUpAuthScreen>
156+
</CreateFirebaseUIProvider>
157+
);
158+
159+
expect(screen.getByTestId("divider")).toBeDefined();
160+
expect(screen.getByTestId("child-1")).toBeDefined();
161+
expect(screen.getByTestId("child-2")).toBeDefined();
100162
});
101-
});
163+
});

0 commit comments

Comments
 (0)