import type { SolidContainerUri, SolidLeafUri } from "@ldo/connected-solid"; import type { ResourceInfo } from "@ldo/test-solid-server"; import fetch from "cross-fetch"; import type { MockedFunction } from "vitest"; import { beforeAll, beforeEach, afterEach, vi } from "vitest"; export const SERVER_DOMAIN = process.env.SERVER || "http://localhost:3002/"; export const ROOT_ROUTE = process.env.ROOT_CONTAINER || "example/"; export const ROOT_CONTAINER = `${SERVER_DOMAIN}${ROOT_ROUTE}`; export const WEB_ID = `${SERVER_DOMAIN}${ROOT_ROUTE}profile/card#me`; export const TEST_CONTAINER_SLUG = "test_ldo/"; export const TEST_CONTAINER_URI = `${ROOT_CONTAINER}${TEST_CONTAINER_SLUG}` as SolidContainerUri; export const SAMPLE_DATA_URI = `${TEST_CONTAINER_URI}sample.ttl` as SolidLeafUri; export const SAMPLE2_DATA_SLUG = "sample2.ttl"; export const SAMPLE2_DATA_URI = `${TEST_CONTAINER_URI}${SAMPLE2_DATA_SLUG}` as SolidLeafUri; export const SAMPLE_BINARY_URI = `${TEST_CONTAINER_URI}sample.txt` as SolidLeafUri; export const SAMPLE2_BINARY_SLUG = `sample2.txt`; export const SAMPLE2_BINARY_URI = `${TEST_CONTAINER_URI}${SAMPLE2_BINARY_SLUG}` as SolidLeafUri; export const SAMPLE_CONTAINER_URI = `${TEST_CONTAINER_URI}sample_container/` as SolidContainerUri; export const LINK_QUERY_CONTAINER = `${ROOT_CONTAINER}link-query/`; export const MAIN_PROFILE_URI = `${LINK_QUERY_CONTAINER}main-profile.ttl` as SolidContainerUri; export const MAIN_PROFILE_SUBJECT = `${MAIN_PROFILE_URI}#me` as SolidContainerUri; export const OTHER_PROFILE_URI = `${LINK_QUERY_CONTAINER}other-profile.ttl` as SolidContainerUri; export const OTHER_PROFILE_SUBJECT = `${OTHER_PROFILE_URI}#me` as SolidContainerUri; export const THIRD_PROFILE_URI = `${LINK_QUERY_CONTAINER}third-profile.ttl` as SolidContainerUri; export const THIRD_PROFILE_SUBJECT = `${THIRD_PROFILE_URI}#me` as SolidContainerUri; export const EXAMPLE_POST_TTL = `@prefix schema: . <#Post1> a schema:CreativeWork, schema:Thing, schema:SocialMediaPosting ; schema:image ; schema:articleBody "test" ; schema:publisher , . <#Post2> a schema:CreativeWork, schema:Thing, schema:SocialMediaPosting .`; export const TEST_CONTAINER_TTL = `@prefix dc: . @prefix ldp: . @prefix posix: . @prefix xsd: . <> "sample.txt"; a ldp:Container, ldp:BasicContainer, ldp:Resource; dc:modified "2023-10-20T13:57:14.000Z"^^xsd:dateTime. a ldp:Resource, ; dc:modified "2023-10-20T13:57:14.000Z"^^xsd:dateTime. a ldp:Resource, ; dc:modified "2023-10-20T13:57:14.000Z"^^xsd:dateTime. <> posix:mtime 1697810234; ldp:contains , . posix:mtime 1697810234; posix:size 522. posix:mtime 1697810234; posix:size 10.`; export interface SetUpServerReturn { authFetch: typeof fetch; fetchMock: MockedFunction< ( input: RequestInfo | URL, init?: RequestInit | undefined, ) => Promise >; } export const fileData: ResourceInfo = { slug: TEST_CONTAINER_SLUG, isContainer: true, contains: [ { slug: "sample.ttl", isContainer: false, mimeType: "text/turtle", data: EXAMPLE_POST_TTL, }, { slug: "sample.txt", isContainer: false, mimeType: "text/plain", data: `some text.`, }, { slug: "sample2.ttl", isContainer: false, mimeType: "text/turtle", shouldNotInit: true, data: "", }, { slug: "sample2.txt", isContainer: false, mimeType: "text/plain", shouldNotInit: true, data: "", }, { slug: "sampleContainer/", isContainer: true, shouldNotInit: true, contains: [], }, ], }; export function setUpServerFiles(): SetUpServerReturn { // Ignore to build s // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const s: SetUpServerReturn = {}; beforeAll(async () => { // s.authFetch = await getAuthenticatedFetch(); s.authFetch = fetch; }); beforeEach(async () => { s.fetchMock = vi.fn(s.authFetch); // Create a new document called sample.ttl await s.authFetch(ROOT_CONTAINER, { method: "POST", headers: { link: '; rel="type"', slug: TEST_CONTAINER_SLUG, }, }); await Promise.all([ s.authFetch(TEST_CONTAINER_URI, { method: "POST", headers: { "content-type": "text/turtle", slug: "sample.ttl" }, body: EXAMPLE_POST_TTL, }), s.authFetch(TEST_CONTAINER_URI, { method: "POST", headers: { "content-type": "text/plain", slug: "sample.txt" }, body: "some text.", }), ]); }); afterEach(async () => { await Promise.all([ s.authFetch(SAMPLE_DATA_URI, { method: "DELETE", }), s.authFetch(SAMPLE2_DATA_URI, { method: "DELETE", }), s.authFetch(SAMPLE_BINARY_URI, { method: "DELETE", }), s.authFetch(SAMPLE2_BINARY_URI, { method: "DELETE", }), s.authFetch(SAMPLE_CONTAINER_URI, { method: "DELETE", }), ]); }); return s; }