import React from "react"; import { vi } from "vitest"; import { type AxiosMockHandle, type SublayStore } from "../test-utils"; import { type SublayContextValues } from "./sublay-context"; import type { AuthUser } from "../interfaces/models/User"; export interface ProvidersWrapperOptions { projectId?: string; project?: SublayContextValues["project"]; user?: AuthUser | null; accessToken?: string | null; refreshToken?: string | null; beforeRender?: (handles: { axiosPrivate: AxiosMockHandle; axiosPublic: AxiosMockHandle; }) => void; } export interface ProvidersWrapperResult { Wrapper: React.FC<{ children: React.ReactNode; }>; store: SublayStore; axiosPrivate: AxiosMockHandle; axiosPublic: AxiosMockHandle; } /** * Builds the same Redux store + `SublayContext` wrapper `renderHookWithAxios` * uses, but as a standalone component instead of a `renderHook` wrapper — * for tests that need to nest a feature-specific context provider * (`EntityProvider`, `CommentSectionProvider`, `ChatProvider`, etc.) between * the Sublay context and the tree/hook under test, or that need to assert on * a provider's "renders nothing" branch via `render()` rather than * `renderHook()`. */ export declare function makeProvidersWrapper(options?: ProvidersWrapperOptions): ProvidersWrapperResult; export interface FakeSocket { connected: boolean; auth: Record; on: ReturnType; off: ReturnType; emit: ReturnType; connect: ReturnType; disconnect: ReturnType; removeAllListeners: ReturnType; /** Simulate the server firing an event by invoking every handler registered via `on`. */ trigger: (event: string, payload?: unknown) => void; } /** * A controllable fake socket.io-client `Socket` for tests that mock the * `socket.io-client` module (e.g. `ChatProvider`) — supports registering * handlers via `on`/`off` and firing them via `trigger`, mirroring the * chainable `connect()`/`disconnect()` API the real client exposes. */ export declare function createFakeSocket(): FakeSocket;