Something went wrong. Try again.
Starship Simulator Controls thoriumsim.com
Something went wrong. Try again.
3.3 kB · 122 lines
TSX
at develop
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123import { render as rtlRender, type RenderOptions } from "@testing-library/react";import type { AppRouter } from "@thorium/.server/init/router";import type { inferRouterOutputs } from "@thorium/utils/live-query/.server/types";import { LiveQueryProvider } from "@thorium/utils/live-query/client/liveQueryContext";import { MockNetRequestContext } from "@thorium/utils/live-query/client/mockContext";import React, { type ReactNode, Suspense } from "react";import { MemoryRouter as Router } from "react-router";import { vi } from "vitest";
// @ts-expect-errorglobal.IS_REACT_ACT_ENVIRONMENT = true;
let netSendResponse: { response: any } = { response: "" };
const netSendSpy = vi.fn((_, __) => _ && __ && netSendResponse);function setNetSendResponse(response: any) { netSendResponse = { response };}global.fetch = vi.fn((url: URL, { body }: { body: FormData }) => { if (url.pathname.toLowerCase() === "/netsend") { const bodyObj: any = {};
body.forEach((value, key) => { bodyObj[key] = value; }); const params = JSON.parse(bodyObj.params); netSendSpy(bodyObj.input, { ...params }); return Promise.resolve({ json: () => Promise.resolve(netSendResponse.response), text: () => Promise.resolve(netSendResponse.response), ok: true, }); } return Promise.resolve({ json: () => Promise.resolve({}), text: () => Promise.resolve({}), });}) as any;
type DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]>; } : T;
interface OptionsInterface { initialRoutes?: string[]; netRequestData?: DeepPartial<inferRouterOutputs<AppRouter>>;}
async function render( ui: Parameters<typeof rtlRender>[0], options?: Omit<RenderOptions, "queries"> & OptionsInterface,) { const { initialRoutes = ["/"] } = options || {}; const Wrapper = ({ children }: { children: ReactNode }) => { return ( <Suspense fallback={<p>Suspended in test</p>}> <LiveQueryProvider getRequestContext={() => ({ id: "test" })}> <MockNetRequestContext.Provider value={{ client: { get: { id: "Test", name: "Test Client", connected: true, loginName: "Test User", }, } as any, flight: null, ship: { get: { id: 0, components: { isPlayerShip: { value: true }, identity: { name: "Test Ship" }, isShip: { assets: { logo: "", }, category: "Cruiser", registry: "NCC-2016-A", shipClass: "Astra Cruiser", }, }, alertLevel: 5, }, } as any, station: { get: { name: "Test Station", logo: "", cards: [ { icon: "", name: "Test Card", component: "Login", }, ], }, } as any, theme: null, ...options?.netRequestData, }} > <Router initialEntries={initialRoutes}>{children}</Router> </MockNetRequestContext.Provider> </LiveQueryProvider> </Suspense> ); };
const renderOutput = rtlRender(ui, { wrapper: Wrapper, ...options }); return { netSendSpy, setNetSendResponse, ...renderOutput, };}
export * from "@testing-library/react";export { render };