/** * Shared test fixtures — return values of `src/context/*` and `src/hooks/*`. * * None of these hooks export their result interface (e.g. `useAnalytics`'s * `UseAnalyticsResult` is private to useAnalytics.ts), and this file * deliberately does not add exports to make that possible — `ReturnType` gets the same fully-typed result without touching source files. * `import type` erases at compile time, so this doesn't pull the hooks' * runtime code (or React) into the test bundle. */ import { vi } from 'vitest' import type { useWorkspace } from '@/context/WorkspaceContext' import type { useAuth } from '@/context/AuthContext' import type { useAnalytics } from '@/hooks/useAnalytics' import type { useParentalLeave } from '@/hooks/useParentalLeave' import type { usePlannedDays } from '@/hooks/usePlannedDays' import type { useScraperFetch } from '@/hooks/useScraperFetch' import type { useWorkspaceMembers } from '@/hooks/useWorkspaceMembers' import type { useOptimizationTips } from '@/hooks/useOptimizationTips' import type { useDayOverrides } from '@/hooks/useDayOverrides' import type { useLeaveWishes } from '@/hooks/useLeaveWishes' import type { usePlanProposal } from '@/hooks/usePlanProposal' import type { usePlanApply } from '@/hooks/usePlanApply' import type { useVacationDays } from '@/hooks/useVacationDays' import type { useChildSettings } from '@/hooks/useChildSettings' import type { useCalendarDays } from '@/hooks/useCalendarDays' import type { useShowWeekNumbers } from '@/hooks/useCalendarPreferences' import { MOCK_CHILD, MOCK_PARENT_A, MOCK_VACATION_DAYS, MOCK_WORKSPACE, makeParentalLeaveFetch } from './mockData' import { makeWorkspaceOverview } from './analytics' import { makeCalendarWindow } from './calendar' // --------------------------------------------------------------------------- // Contexts // --------------------------------------------------------------------------- export function makeWorkspaceContextValue( overrides: Partial> = {}, ): ReturnType { return { workspace: MOCK_WORKSPACE, isLoading: false, error: null, workspaceId: MOCK_WORKSPACE.id, setWorkspaceId: vi.fn(), refetch: vi.fn(), children: [{ id: MOCK_CHILD.id, name: MOCK_CHILD.name, birth_date: MOCK_CHILD.birthDate }], selectedChildId: MOCK_CHILD.id, selectChild: vi.fn(), personalDataUuid: MOCK_PARENT_A.uuid, parentName: MOCK_PARENT_A.name, refreshContext: vi.fn(), ...overrides, } } export function makeAuthContextValue( overrides: Partial> = {}, ): ReturnType { return { accessToken: 'token-123', isAuthenticated: true, isLoading: false, login: vi.fn(), register: vi.fn(), logout: vi.fn(), ...overrides, } } // --------------------------------------------------------------------------- // Data-fetching hooks // --------------------------------------------------------------------------- export function makeAnalyticsResult( overrides: Partial> = {}, ): ReturnType { return { data: makeWorkspaceOverview(), isLoading: false, error: null, refresh: vi.fn(), ...overrides, } } export function makeParentalLeaveResult( overrides: Partial> = {}, ): ReturnType { return { data: makeParentalLeaveFetch(), isLoading: false, error: null, refresh: vi.fn(), ...overrides, } } export function makePlannedDaysResult( overrides: Partial> = {}, ): ReturnType { return { data: [], isLoading: false, error: null, refresh: vi.fn(), add: vi.fn(), update: vi.fn(), remove: vi.fn(), ...overrides, } } export function makeScraperFetchResult( overrides: Partial> = {}, ): ReturnType { return { sessionId: null, pollData: null, resolvedIds: null, error: null, isUnauthorized: false, start: vi.fn(), cancel: vi.fn(), isRunning: false, isTerminal: false, ...overrides, } } export function makeWorkspaceMembersResult( overrides: Partial> = {}, ): ReturnType { return { data: [MOCK_PARENT_A], isLoading: false, error: null, refresh: vi.fn(), ...overrides, } } export function makeOptimizationTipsResult( overrides: Partial> = {}, ): ReturnType { return { data: [], isLoading: false, error: null, refresh: vi.fn(), dismiss: vi.fn(), ...overrides, } } export function makeDayOverridesResult( overrides: Partial> = {}, ): ReturnType { return { data: [], isLoading: false, error: null, upsert: vi.fn(), remove: vi.fn(), ...overrides, } } export function makeLeaveWishesResult( overrides: Partial> = {}, ): ReturnType { return { data: [], isLoading: false, isRefreshing: false, error: null, refresh: vi.fn(), add: vi.fn(), update: vi.fn(), remove: vi.fn(), ...overrides, } } export function makePlanProposalResult( overrides: Partial> = {}, ): ReturnType { return { data: null, isLoading: false, error: null, propose: vi.fn(), ...overrides, } } export function makePlanApplyResult( overrides: Partial> = {}, ): ReturnType { return { response: null, isLoading: false, error: null, apply: vi.fn(), ...overrides, } } export function makeVacationDaysResult( overrides: Partial> = {}, ): ReturnType { return { data: [MOCK_VACATION_DAYS], isLoading: false, error: null, upsert: vi.fn(), ...overrides, } } export function makeChildSettingsResult( overrides: Partial> = {}, ): ReturnType { return { data: MOCK_CHILD, isLoading: false, error: null, update: vi.fn(), ...overrides, } } export function makeCalendarDaysResult( overrides: Partial> = {}, ): ReturnType { return { data: makeCalendarWindow(), isLoading: false, error: null, refetch: vi.fn(), ...overrides, } } // --------------------------------------------------------------------------- // Local-storage-backed preference hook (a tuple, not an object) // --------------------------------------------------------------------------- export function makeShowWeekNumbersTuple( show = false, setShow: (show: boolean) => void = vi.fn(), ): ReturnType { return [show, setShow] }