microsoft/typespec

Public

mirrored from https://github.com/microsoft/typespecAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
e966efd30e552f4e84d5ae7224515199738ddd8e

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

packages/openapi3/test/test-host.ts

74lines · modecode

1import { createTestHost, createTestWrapper, resolveVirtualPath } from "@cadl-lang/compiler/testing";
2import { OpenAPITestLibrary } from "@cadl-lang/openapi/testing";
3import { RestTestLibrary } from "@cadl-lang/rest/testing";
4import { VersioningTestLibrary } from "@cadl-lang/versioning/testing";
5import { OpenAPI3TestLibrary } from "../src/testing/index.js";
6
7export async function createOpenAPITestHost() {
8 return createTestHost({
9 libraries: [RestTestLibrary, VersioningTestLibrary, OpenAPITestLibrary, OpenAPI3TestLibrary],
10 });
11}
12
13export async function createOpenAPITestRunner() {
14 const host = await createOpenAPITestHost();
15 return createTestWrapper(
16 host,
17 (code) =>
18 `import "@cadl-lang/rest"; import "@cadl-lang/openapi"; import "@cadl-lang/openapi3"; using Cadl.Rest; using Cadl.Http; using OpenAPI; ${code}`,
19 { emitters: ["@cadl-lang/openapi3"] }
20 );
21}
22
23function versionedOutput(path: string, version: string) {
24 return path.replace(".json", "." + version + ".json");
25}
26
27export async function openApiFor(code: string, versions?: string[]) {
28 const host = await createOpenAPITestHost();
29 const outPath = resolveVirtualPath("openapi.json");
30 host.addCadlFile(
31 "./main.cadl",
32 `import "@cadl-lang/rest"; import "@cadl-lang/openapi"; import "@cadl-lang/openapi3"; ${
33 versions ? `import "@cadl-lang/versioning"; ` : ""
34 }using Cadl.Rest;using Cadl.Http;using OpenAPI;${code}`
35 );
36 await host.compile("./main.cadl", {
37 noEmit: false,
38 swaggerOutputFile: outPath,
39 emitters: ["@cadl-lang/openapi3"],
40 });
41
42 if (!versions) {
43 return JSON.parse(host.fs.get(outPath)!);
44 } else {
45 const output: any = {};
46 for (const version of versions) {
47 output[version] = JSON.parse(host.fs.get(versionedOutput(outPath, version))!);
48 }
49 return output;
50 }
51}
52
53export async function checkFor(code: string) {
54 const host = await createOpenAPITestRunner();
55 return await host.diagnose(code);
56}
57
58export async function oapiForModel(name: string, modelDef: string) {
59 const oapi = await openApiFor(`
60 ${modelDef};
61 @route("/")
62 namespace root {
63 op read(): { @body body: ${name} };
64 }
65 `);
66
67 const useSchema = oapi.paths["/"].get.responses[200].content["application/json"].schema;
68
69 return {
70 isRef: !!useSchema.$ref,
71 useSchema,
72 schemas: oapi.components.schemas || {},
73 };
74}
75