Skip to content
File

Blob: tests/sites/render-context.ts

typescript51 lines
1import type { SitesReactRenderContext } from "@/sites/react-render-context";
2 
3export type TestSitesPageRenderContext = Extract<SitesReactRenderContext, { kind: "page" }>;
4 
5type TestSitesPageRenderContextOverrides = Omit<Partial<TestSitesPageRenderContext>, "assets" | "kind" | "page"> & {
6 assets?: Partial<TestSitesPageRenderContext["assets"]>;
7 page?: Partial<TestSitesPageRenderContext["page"]>;
8};
9 
10export const TEST_SITE_DOCUMENT_ASSETS: TestSitesPageRenderContext["assets"] = {
11 stylesheetHref: "/site-assets/sites-test.css",
12 fontStylesheetHref: "/site-assets/fonts-test.css",
13 scriptSrc: "/site-assets/sites-entry-test.js",
14 modulePreloadHrefs: ["/site-assets/sites-import-test.js"],
15};
16 
17export function createTestSitesPageRenderContext(
18 overrides: TestSitesPageRenderContextOverrides = {},
19): TestSitesPageRenderContext {
20 const context: TestSitesPageRenderContext = {
21 kind: "page",
22 assets: TEST_SITE_DOCUMENT_ASSETS,
23 headingAnchorIds: [],
24 resolvePageMention: () => ({ label: "Restricted", href: null, kind: "restricted" }),
25 page: {
26 title: "Hello Sites",
27 icon: "๐Ÿ˜€",
28 coverUrl: null,
29 ogImage: null,
30 outline: [],
31 metrics: { words: 1, characters: 4 },
32 description: "Body excerpt for search snippets",
33 canonicalUrl: "https://acme.sites.test/",
34 site: {
35 workspaceName: "bland",
36 workspaceIcon: "๐Ÿš€",
37 currentIsHome: true,
38 homeHref: "/",
39 },
40 },
41 };
42 
43 return {
44 ...context,
45 ...overrides,
46 kind: "page",
47 assets: { ...context.assets, ...overrides.assets },
48 page: { ...context.page, ...overrides.page },
49 };
50}