Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions e2e/utils/event-test-utils.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { type Locator, type Page, expect } from "@playwright/test";
import { ONBOARDING_STATE } from "./test-constants";

type SomedaySection = "week" | "month";

Expand Down Expand Up @@ -101,10 +100,6 @@ export const updateEventTitle = (prefix: string) =>
`${prefix} Updated ${Date.now()}`;

export const prepareCalendarPage = async (page: Page) => {
await page.addInitScript((value) => {
localStorage.setItem("compass.onboarding", JSON.stringify(value));
}, ONBOARDING_STATE);

await page.goto("/week", { waitUntil: "networkidle" });

// Wait for React app to mount by checking for root element with content
Expand Down
9 changes: 3 additions & 6 deletions e2e/utils/oauth-test-utils.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
import { Page, expect } from "@playwright/test";
import { ONBOARDING_STATE } from "./test-constants";

/**
* Sets up the page for OAuth overlay testing.
* - Skips onboarding
* - Exposes test hooks for session state manipulation
* - Mocks API endpoints
*/
export const prepareOAuthTestPage = async (page: Page) => {
// Enable test mode and skip onboarding before app loads
await page.addInitScript((onboardingState) => {
// Enable test mode before app loads
await page.addInitScript(() => {
// Enable e2e test mode - this exposes test hooks in the app
(window as any).__COMPASS_E2E_TEST__ = true;
localStorage.setItem("compass.onboarding", JSON.stringify(onboardingState));
}, ONBOARDING_STATE);
});

// Mock API endpoints to prevent real network calls
await page.route("**/api/**", (route) => {
Expand Down
8 changes: 0 additions & 8 deletions e2e/utils/test-constants.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,3 @@
/**
* Shared constants for e2e tests.
*/

export const ONBOARDING_STATE = {
completedSteps: [],
isCompleted: true,
isSignupComplete: true,
isOnboardingSkipped: true,
isAuthPromptDismissed: true,
};
76 changes: 0 additions & 76 deletions packages/web/src/auth/hooks/oauth/useGoogleAuth.test.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import { renderHook, waitFor } from "@testing-library/react";
import { useGoogleAuth } from "@web/auth/hooks/oauth/useGoogleAuth";
import { useIsSignupComplete } from "@web/auth/hooks/onboarding/useIsSignupComplete";
import { useSkipOnboarding } from "@web/auth/hooks/onboarding/useSkipOnboarding";
import { useSession } from "@web/auth/hooks/session/useSession";
import {
authenticate,
fetchOnboardingStatus,
syncLocalEvents,
} from "@web/common/utils/auth/google-auth.util";
import { markUserAsAuthenticated } from "@web/common/utils/storage/auth-state.util";
Expand All @@ -15,8 +12,6 @@ import { SignInUpInput } from "@web/components/oauth/ouath.types";
// Mock dependencies
jest.mock("@web/common/utils/auth/google-auth.util");
jest.mock("@web/auth/hooks/session/useSession");
jest.mock("@web/auth/hooks/onboarding/useIsSignupComplete");
jest.mock("@web/auth/hooks/onboarding/useSkipOnboarding");
jest.mock("@web/components/oauth/google/useGoogleLogin");
jest.mock("@web/common/utils/storage/auth-state.util");
jest.mock("@web/store/store.hooks", () => ({
Expand All @@ -36,19 +31,10 @@ jest.mock("react-toastify", () => ({
const mockAuthenticate = authenticate as jest.MockedFunction<
typeof authenticate
>;
const mockFetchOnboardingStatus = fetchOnboardingStatus as jest.MockedFunction<
typeof fetchOnboardingStatus
>;
const mockSyncLocalEvents = syncLocalEvents as jest.MockedFunction<
typeof syncLocalEvents
>;
const mockUseSession = useSession as jest.MockedFunction<typeof useSession>;
const mockUseIsSignupComplete = useIsSignupComplete as jest.MockedFunction<
typeof useIsSignupComplete
>;
const mockUseSkipOnboarding = useSkipOnboarding as jest.MockedFunction<
typeof useSkipOnboarding
>;
const mockUseGoogleLogin = useGoogleLogin as jest.MockedFunction<
typeof useGoogleLogin
>;
Expand All @@ -61,8 +47,6 @@ const mockMarkUserAsAuthenticated =

describe("useGoogleAuth", () => {
const mockSetAuthenticated = jest.fn();
const mockMarkSignupCompleted = jest.fn();
const mockUpdateOnboardingStatus = jest.fn();
const mockLogin = jest.fn();
const originalConsoleError = console.error;
let mockDispatchFn: jest.Mock;
Expand All @@ -78,16 +62,7 @@ describe("useGoogleAuth", () => {
setAuthenticated: mockSetAuthenticated,
authenticated: false,
});
mockUseIsSignupComplete.mockReturnValue({
markSignupCompleted: mockMarkSignupCompleted,
isSignupComplete: false,
});
mockUseSkipOnboarding.mockReturnValue({
updateOnboardingStatus: mockUpdateOnboardingStatus,
skipOnboarding: false,
});
mockAuthenticate.mockResolvedValue({ success: true });
mockFetchOnboardingStatus.mockResolvedValue({ skipOnboarding: true });
mockSyncLocalEvents.mockResolvedValue({ syncedCount: 0, success: true });
});

Expand Down Expand Up @@ -332,56 +307,5 @@ describe("useGoogleAuth", () => {
expect(mockMarkUserAsAuthenticated).not.toHaveBeenCalled();
expect(mockSetAuthenticated).not.toHaveBeenCalled();
});

it("clears import flow when other operations throw errors after OAuth succeeds", async () => {
mockAuthenticate.mockResolvedValue({ success: true });
const fetchError = new Error("Failed to fetch onboarding status");
mockFetchOnboardingStatus.mockRejectedValue(fetchError);

let onSuccessCallback:
| ((data: SignInUpInput) => Promise<void>)
| undefined;

mockUseGoogleLogin.mockImplementation(({ onSuccess }) => {
onSuccessCallback = onSuccess;
return {
login: mockLogin,
loading: false,
data: null,
};
});

renderHook(() => useGoogleAuth());

if (onSuccessCallback) {
await onSuccessCallback({
clientType: "web",
thirdPartyId: "google",
redirectURIInfo: {
redirectURIOnProviderDashboard: "",
redirectURIQueryParams: {
code: "test-auth-code",
scope: "email profile",
state: undefined,
},
},
});
}

await waitFor(() => {
expect(mockAuthenticate).toHaveBeenCalled();
});

expect(mockDispatchFn).toHaveBeenCalledWith(
expect.objectContaining({
type: "async/importGCal/setAwaitingImportResults",
payload: false,
}),
);

// Authentication succeeded, so these should be called
expect(mockMarkUserAsAuthenticated).toHaveBeenCalled();
expect(mockSetAuthenticated).toHaveBeenCalled();
});
});
});
11 changes: 0 additions & 11 deletions packages/web/src/auth/hooks/oauth/useGoogleAuth.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import { batch } from "react-redux";
import { toast } from "react-toastify";
import { useGoogleAuthWithOverlay } from "@web/auth/hooks/oauth/useGoogleAuthWithOverlay";
import { useIsSignupComplete } from "@web/auth/hooks/onboarding/useIsSignupComplete";
import { useSkipOnboarding } from "@web/auth/hooks/onboarding/useSkipOnboarding";
import { useSession } from "@web/auth/hooks/session/useSession";
import { toastDefaultOptions } from "@web/common/constants/toast.constants";
import {
authenticate,
fetchOnboardingStatus,
syncLocalEvents,
} from "@web/common/utils/auth/google-auth.util";
import { markUserAsAuthenticated } from "@web/common/utils/storage/auth-state.util";
Expand All @@ -29,8 +26,6 @@ import { useAppDispatch } from "@web/store/store.hooks";
export function useGoogleAuth() {
const dispatch = useAppDispatch();
const { setAuthenticated } = useSession();
const { markSignupCompleted } = useIsSignupComplete();
const { updateOnboardingStatus } = useSkipOnboarding();

const googleLogin = useGoogleAuthWithOverlay({
onStart: () => {
Expand Down Expand Up @@ -67,12 +62,6 @@ export function useGoogleAuth() {
dispatch(importGCalSlice.actions.setAwaitingImportResults(true));
});

const { skipOnboarding } = await fetchOnboardingStatus();

updateOnboardingStatus(skipOnboarding);

markSignupCompleted();

const syncResult = await syncLocalEvents();

if (syncResult.success && syncResult.syncedCount > 0) {
Expand Down
69 changes: 0 additions & 69 deletions packages/web/src/auth/hooks/onboarding/useIsSignupComplete.test.ts

This file was deleted.

30 changes: 0 additions & 30 deletions packages/web/src/auth/hooks/onboarding/useIsSignupComplete.ts

This file was deleted.

32 changes: 0 additions & 32 deletions packages/web/src/auth/hooks/onboarding/useSkipOnboarding.ts

This file was deleted.

30 changes: 0 additions & 30 deletions packages/web/src/common/constants/onboarding.constants.ts

This file was deleted.

12 changes: 2 additions & 10 deletions packages/web/src/common/constants/storage.constants.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,10 @@
import { z } from "zod";

export const StorageKeySchema = z.enum([
"compass.reminder",
"compass.onboarding",
"compass.auth",
]);
export const StorageKeySchema = z.enum(["compass.reminder", "compass.auth"]);

export type StorageKey = z.infer<typeof StorageKeySchema>;

export const STORAGE_KEYS: Record<
"REMINDER" | "ONBOARDING_PROGRESS" | "AUTH",
StorageKey
> = {
export const STORAGE_KEYS: Record<"REMINDER" | "AUTH", StorageKey> = {
REMINDER: "compass.reminder",
ONBOARDING_PROGRESS: "compass.onboarding",
AUTH: "compass.auth",
} as const;
Loading