64 lines
1.9 KiB
TypeScript
64 lines
1.9 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
import { act, renderHook } from "@testing-library/react";
|
|
import { useOnboardingState } from "@/features/onboarding/useOnboardingState";
|
|
|
|
describe("useOnboardingState", () => {
|
|
afterEach(() => {
|
|
// Clean up localStorage between tests
|
|
try {
|
|
window.localStorage.removeItem("claw3d:onboarding:completed");
|
|
} catch {
|
|
// noop
|
|
}
|
|
});
|
|
|
|
it("shows onboarding by default when localStorage is empty", () => {
|
|
const { result } = renderHook(() => useOnboardingState());
|
|
expect(result.current.showOnboarding).toBe(true);
|
|
});
|
|
|
|
it("hides onboarding after completeOnboarding is called", () => {
|
|
const { result } = renderHook(() => useOnboardingState());
|
|
expect(result.current.showOnboarding).toBe(true);
|
|
|
|
act(() => {
|
|
result.current.completeOnboarding();
|
|
});
|
|
|
|
expect(result.current.showOnboarding).toBe(false);
|
|
});
|
|
|
|
it("persists completion to localStorage", () => {
|
|
const { result } = renderHook(() => useOnboardingState());
|
|
|
|
act(() => {
|
|
result.current.completeOnboarding();
|
|
});
|
|
|
|
expect(window.localStorage.getItem("claw3d:onboarding:completed")).toBe(
|
|
"true",
|
|
);
|
|
});
|
|
|
|
it("reads completion state from localStorage on mount", () => {
|
|
window.localStorage.setItem("claw3d:onboarding:completed", "true");
|
|
const { result } = renderHook(() => useOnboardingState());
|
|
expect(result.current.showOnboarding).toBe(false);
|
|
});
|
|
|
|
it("resets onboarding when resetOnboarding is called", () => {
|
|
const { result } = renderHook(() => useOnboardingState());
|
|
|
|
act(() => {
|
|
result.current.completeOnboarding();
|
|
});
|
|
expect(result.current.showOnboarding).toBe(false);
|
|
|
|
act(() => {
|
|
result.current.resetOnboarding();
|
|
});
|
|
expect(result.current.showOnboarding).toBe(true);
|
|
expect(window.localStorage.getItem("claw3d:onboarding:completed")).toBeNull();
|
|
});
|
|
});
|