Skip to content

Commit 9165d68

Browse files
authored
Add operation test, minor cleanup (#458)
1 parent 40e5bd8 commit 9165d68

File tree

4 files changed

+44
-11
lines changed

4 files changed

+44
-11
lines changed

src/transform/operation.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { OperationObject, ParameterObject, ReferenceObject } from "../types";
2-
import { comment, transformRef } from "../utils";
1+
import { OperationObject, ParameterObject } from "../types";
2+
import { comment, isRef, transformRef } from "../utils";
33
import { transformParametersArray } from "./parameters";
44
import { transformResponsesObj } from "./responses";
55
import { transformSchemaObj } from "./schema";
@@ -22,7 +22,7 @@ export function transformOperationObj(
2222
if (isRef(operation.requestBody)) {
2323
output += ` requestBody: ${transformRef(operation.requestBody.$ref)};\n`;
2424
} else {
25-
const {description, content} = operation.requestBody
25+
const { description, content } = operation.requestBody;
2626

2727
if (description) output += comment(description);
2828

@@ -36,13 +36,8 @@ export function transformOperationObj(
3636
} else {
3737
output += ` requestBody: unknown;\n`;
3838
}
39-
4039
}
4140
}
4241

4342
return output;
4443
}
45-
46-
export function isRef(obj: any): obj is ReferenceObject {
47-
return !!obj.$ref
48-
}

src/types/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ export interface OpenAPI3 {
1111
paths?: Record<string, PathItemObject>; // required
1212
components?: {
1313
schemas?: Record<string, ReferenceObject | SchemaObject>;
14-
requestBodies?: Record<string, ReferenceObject | RequestBody>;
1514
responses?: Record<string, ReferenceObject | ResponseObject>;
1615
parameters?: Record<string, ReferenceObject | ParameterObject>;
16+
requestBodies?: Record<string, ReferenceObject | RequestBody>;
1717
headers?: Record<string, ReferenceObject | HeaderObject>;
1818
links?: Record<string, ReferenceObject | LinkObject>;
1919
};
@@ -56,8 +56,8 @@ export interface OperationObject {
5656
summary?: string; // unused
5757
operationId?: string;
5858
parameters?: (ReferenceObject | ParameterObject)[];
59-
responses?: Record<string, ReferenceObject | ResponseObject>; // required
6059
requestBody?: ReferenceObject | RequestBody;
60+
responses?: Record<string, ReferenceObject | ResponseObject>; // required
6161
}
6262

6363
export interface ParameterObject {

src/utils.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { OpenAPI2, OpenAPI3 } from "./types";
1+
import { OpenAPI2, OpenAPI3, ReferenceObject } from "./types";
22

33
export function comment(text: string): string {
44
const commentText = text.trim();
@@ -19,6 +19,11 @@ export function fromEntries(entries: [string, any][]): Record<string, unknown> {
1919
return entries.reduce((obj, [key, val]) => ({ ...obj, [key]: val }), {});
2020
}
2121

22+
/** Is this a ReferenceObject? (note: this is just a TypeScript helper for nodeType() below) */
23+
export function isRef(obj: any): obj is ReferenceObject {
24+
return !!obj.$ref;
25+
}
26+
2227
/** Return type of node (works for v2 or v3, as there are no conflicting types) */
2328
type SchemaObjectType = "anyOf" | "array" | "boolean" | "enum" | "number" | "object" | "oneOf" | "ref" | "string";
2429
export function nodeType(obj: any): SchemaObjectType | undefined {

tests/operation.test.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { transformOperationObj } from "../src/transform/operation";
2+
3+
describe("requestBody", () => {
4+
it("basic", () => {
5+
expect(
6+
transformOperationObj({
7+
requestBody: {
8+
content: {
9+
"application/json": {
10+
schema: { $ref: "#/components/schemas/Pet" },
11+
},
12+
"application/xml": {
13+
schema: { $ref: "#/components/schemas/Pet" },
14+
},
15+
},
16+
},
17+
}).trim()
18+
).toBe(`requestBody: {
19+
content: {
20+
"application/json": components["schemas"]["Pet"];
21+
"application/xml": components["schemas"]["Pet"];
22+
}
23+
}`);
24+
});
25+
26+
it("ref", () => {
27+
expect(
28+
transformOperationObj({
29+
requestBody: { $ref: "#/components/requestBodies/Request" },
30+
}).trim()
31+
).toBe(`requestBody: components["requestBodies"]["Request"];`);
32+
});
33+
});

0 commit comments

Comments
 (0)