-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathtest-utils.ts
53 lines (50 loc) · 1.69 KB
/
test-utils.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { DocsV2Read } from "@fern-api/fdr-sdk";
import * as ApiDefinition from "@fern-api/fdr-sdk/api-definition";
import * as FernNavigation from "@fern-api/fdr-sdk/navigation";
import { mapValues } from "es-toolkit/object";
import fs from "fs";
import path from "path";
const fixturesDir = path.join(
__dirname,
"../../../../../fdr-sdk/src/__test__/fixtures"
);
export function readFixture(
fixture: string
): [DocsV2Read.LoadDocsForUrlResponse, snapshotFilepath: string] {
const fixturePath = path.join(fixturesDir, `${fixture}.json`);
const content = fs.readFileSync(fixturePath, "utf-8");
return [
JSON.parse(content) as DocsV2Read.LoadDocsForUrlResponse,
path.join(__dirname, `__snapshots__/${fixture}.json`),
];
}
export function readFixtureToRootNode(
fixture: DocsV2Read.LoadDocsForUrlResponse
): {
root: FernNavigation.RootNode;
apis: Record<string, ApiDefinition.ApiDefinition>;
pages: Record<string, string>;
} {
const root = FernNavigation.utils.toRootNode(fixture);
const apis = {
...Object.fromEntries(
Object.values(fixture.definition.apis).map((api) => {
return [
api.id,
ApiDefinition.ApiDefinitionV1ToLatest.from(api, {
useJavaScriptAsTypeScript: false,
alwaysEnableJavaScriptFetch: false,
usesApplicationJsonInFormDataValue: false,
}).migrate(),
];
})
),
...(Object.fromEntries(
Object.entries(fixture.definition.apisV2 ?? {}).filter(
([_, api]) => typeof api !== "string"
)
) as Record<string, ApiDefinition.ApiDefinition>),
};
const pages = mapValues(fixture.definition.pages, (page) => page.markdown);
return { root, apis, pages };
}