fix: pass userId to EmailVerificationModal in login page (#12573)

Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
This commit is contained in:
Graham Neubig
2026-01-23 11:24:25 -05:00
committed by GitHub
parent 373ade8554
commit 6c5ef256fd
2 changed files with 63 additions and 8 deletions

View File

@@ -7,14 +7,19 @@ import LoginPage from "#/routes/login";
import OptionService from "#/api/option-service/option-service.api";
import AuthService from "#/api/auth-service/auth-service.api";
const { useEmailVerificationMock } = vi.hoisted(() => ({
useEmailVerificationMock: vi.fn(() => ({
emailVerified: false,
hasDuplicatedEmail: false,
emailVerificationModalOpen: false,
setEmailVerificationModalOpen: vi.fn(),
})),
}));
const { useEmailVerificationMock, resendEmailVerificationMock } = vi.hoisted(
() => ({
useEmailVerificationMock: vi.fn(() => ({
emailVerified: false,
hasDuplicatedEmail: false,
emailVerificationModalOpen: false,
setEmailVerificationModalOpen: vi.fn(),
userId: null as string | null,
resendEmailVerification: vi.fn(),
})),
resendEmailVerificationMock: vi.fn(),
}),
);
vi.mock("#/hooks/use-github-auth-url", () => ({
useGitHubAuthUrl: () => "https://github.com/login/oauth/authorize",
@@ -348,6 +353,8 @@ describe("LoginPage", () => {
hasDuplicatedEmail: false,
emailVerificationModalOpen: false,
setEmailVerificationModalOpen: vi.fn(),
userId: null,
resendEmailVerification: resendEmailVerificationMock,
});
render(<RouterStub initialEntries={["/login"]} />, {
@@ -367,6 +374,8 @@ describe("LoginPage", () => {
hasDuplicatedEmail: true,
emailVerificationModalOpen: false,
setEmailVerificationModalOpen: vi.fn(),
userId: null,
resendEmailVerification: resendEmailVerificationMock,
});
render(<RouterStub initialEntries={["/login"]} />, {
@@ -379,6 +388,41 @@ describe("LoginPage", () => {
).toBeInTheDocument();
});
});
it("should pass userId to EmailVerificationModal when userId is provided", async () => {
const user = userEvent.setup();
const testUserId = "test-user-id-123";
const setEmailVerificationModalOpen = vi.fn();
useEmailVerificationMock.mockReturnValue({
emailVerified: false,
hasDuplicatedEmail: false,
emailVerificationModalOpen: true,
setEmailVerificationModalOpen,
userId: testUserId,
resendEmailVerification: resendEmailVerificationMock,
});
render(<RouterStub initialEntries={["/login"]} />, {
wrapper: createWrapper(),
});
await waitFor(() => {
expect(
screen.getByText("AUTH$PLEASE_CHECK_EMAIL_TO_VERIFY"),
).toBeInTheDocument();
});
const resendButton = screen.getByRole("button", {
name: /SETTINGS\$RESEND_VERIFICATION/i,
});
await user.click(resendButton);
expect(resendEmailVerificationMock).toHaveBeenCalledWith({
userId: testUserId,
isAuthFlow: true,
});
});
});
describe("Loading States", () => {
@@ -415,6 +459,15 @@ describe("LoginPage", () => {
describe("Terms and Privacy", () => {
it("should display Terms and Privacy notice", async () => {
useEmailVerificationMock.mockReturnValue({
emailVerified: false,
hasDuplicatedEmail: false,
emailVerificationModalOpen: false,
setEmailVerificationModalOpen: vi.fn(),
userId: null as string | null,
resendEmailVerification: resendEmailVerificationMock,
});
render(<RouterStub initialEntries={["/login"]} />, {
wrapper: createWrapper(),
});

View File

@@ -20,6 +20,7 @@ export default function LoginPage() {
recaptchaBlocked,
emailVerificationModalOpen,
setEmailVerificationModalOpen,
userId,
} = useEmailVerification();
const gitHubAuthUrl = useGitHubAuthUrl({
@@ -77,6 +78,7 @@ export default function LoginPage() {
onClose={() => {
setEmailVerificationModalOpen(false);
}}
userId={userId}
/>
)}
</>