Skip to content

Commit 0244e42

Browse files
committed
refactor: bundleResponses with example strategy
1 parent 2200b67 commit 0244e42

File tree

5 files changed

+14
-10
lines changed

5 files changed

+14
-10
lines changed

src/core/content.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import type { RequestBodyObject } from "@omer-x/openapi-types/request-body";
55

66
describe("resolveContent", () => {
77
it("should return undefined if source is not provided", () => {
8-
const result = resolveContent(undefined);
8+
const result = resolveContent("none", undefined);
99
expect(result).toBeUndefined();
1010
});
1111

1212
it("should create content for a string schema reference", () => {
13-
const result = resolveContent("User", false);
13+
const result = resolveContent("none", "User", false);
1414

1515
const expectedContent = {
1616
"application/json": {
@@ -29,7 +29,7 @@ describe("resolveContent", () => {
2929
age: z.number(),
3030
});
3131

32-
const result = resolveContent(zodSchema, false);
32+
const result = resolveContent("none", zodSchema, false);
3333

3434
const expectedContent = {
3535
"application/json": {
@@ -53,7 +53,7 @@ describe("resolveContent", () => {
5353
});
5454

5555
it("should create multipart/form-data content when isFormData is true", () => {
56-
const result = resolveContent("User", false, true);
56+
const result = resolveContent("none", "User", false, true);
5757

5858
const expectedContent = {
5959
"multipart/form-data": {

src/core/content.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
1+
import type { ExampleStrategy } from "~/types/example";
12
import { createSchemaRef } from "~/utils/openapi-components";
3+
import { injectExample } from "./example";
24
import convertToOpenAPI from "./zod-to-openapi";
35
import type { RequestBodyObject } from "@omer-x/openapi-types/request-body";
46
import type { ZodType } from "zod";
57

6-
export function resolveContent(source?: ZodType<unknown> | string, isArray: boolean = false, isFormData: boolean = false) {
8+
export function resolveContent(exampleStrategy: ExampleStrategy, source?: ZodType<unknown> | string, isArray: boolean = false, isFormData: boolean = false) {
79
if (!source) return undefined;
810

911
const schema = typeof source === "string" ? createSchemaRef(source, isArray) : convertToOpenAPI(source, isArray);
1012

1113
return {
1214
[isFormData ? "multipart/form-data" : "application/json"]: {
1315
schema,
16+
...injectExample(exampleStrategy, source, isArray),
1417
},
1518
} as RequestBodyObject["content"];
1619
}

src/core/definer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ function defineRoute<
114114
...resolveParams("query", input.exampleStrategy ?? "none", input.queryParams),
115115
];
116116

117-
const responses = bundleResponses(input.responses);
117+
const responses = bundleResponses(input.responses, input.exampleStrategy ?? "none");
118118
const response400 = addBadRequest(input.queryParams, input.requestBody);
119119
if (response400) {
120120
responses["400"] = response400;

src/core/responses.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ describe("addBadRequest", () => {
2727
describe("bundleResponses", () => {
2828
it("should return an empty when no responses are provided", () => {
2929
const collection: Record<string, ResponseDefinition> = {};
30-
const result = bundleResponses(collection);
30+
const result = bundleResponses(collection, "none");
3131
expect(result).toEqual({});
3232
});
3333

@@ -37,7 +37,7 @@ describe("bundleResponses", () => {
3737
404: { description: "Not Found", content: "SomeOtherContent", isArray: true },
3838
};
3939

40-
const result = bundleResponses(collection);
40+
const result = bundleResponses(collection, "none");
4141

4242
expect(result).toEqual({
4343
200: {

src/core/responses.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { ExampleStrategy } from "~/types/example";
12
import type { ResponseDefinition } from "~/types/response";
23
import { resolveContent } from "./content";
34
import type { ResponseObject, ResponsesObject } from "@omer-x/openapi-types/response";
@@ -7,13 +8,13 @@ export function addBadRequest(queryParams?: unknown, requestBody?: unknown) {
78
return { description: "Bad Request" } as ResponseObject;
89
}
910

10-
export function bundleResponses(collection: Record<string, ResponseDefinition>) {
11+
export function bundleResponses(collection: Record<string, ResponseDefinition>, exampleStrategy: ExampleStrategy) {
1112
return Object.entries(collection).reduce((result, [key, response]) => {
1213
return {
1314
...result,
1415
[key]: {
1516
description: response.description,
16-
content: resolveContent(response.content, response.isArray),
17+
content: resolveContent(exampleStrategy, response.content, response.isArray),
1718
} satisfies ResponseObject,
1819
};
1920
}, {}) as ResponsesObject;

0 commit comments

Comments
 (0)