diff --git a/packages/openapi/tests/assets/nested-1/nested-components.yml b/packages/openapi/tests/assets/nested-1/nested-components.yml new file mode 100644 index 0000000..bf51e55 --- /dev/null +++ b/packages/openapi/tests/assets/nested-1/nested-components.yml @@ -0,0 +1,42 @@ +components: + schemas: + ThingKey: + type: object + properties: + userId: + type: integer + thingId: + type: integer + required: + - userId + - thingId + + ThingData: + type: object + properties: + lastSeen: + type: string + format: date-time + value: + type: integer + + Thing: + type: object + allOf: + - $ref: "#/components/schemas/ThingKey" + - $ref: "#/components/schemas/ThingData" + + requestBodies: + GetOneThingRequest: + content: + application/json: + schema: + $ref: "#/components/schemas/ThingKey" + + responses: + GetOneThingResponse: + description: one thing + content: + application/json: + schema: + $ref: "#/components/schemas/Thing" diff --git a/packages/openapi/tests/assets/nested-api-1.yml b/packages/openapi/tests/assets/nested-api-1.yml new file mode 100644 index 0000000..bf0e8b4 --- /dev/null +++ b/packages/openapi/tests/assets/nested-api-1.yml @@ -0,0 +1,15 @@ +openapi: 3.0.3 + +info: + title: pork + version: 0.0.0 + +paths: + /get: + post: + operationId: getOneThing + requestBody: + $ref: "nested-1/nested-components.yml#/components/requestBodies/GetOneThingRequest" + responses: + 200: + $ref: "nested-1/nested-components.yml#/components/responses/GetOneThingResponse" diff --git a/packages/openapi/tests/openapi-parser.spec.ts b/packages/openapi/tests/openapi-parser.spec.ts index b4ffd06..5cf0380 100644 --- a/packages/openapi/tests/openapi-parser.spec.ts +++ b/packages/openapi/tests/openapi-parser.spec.ts @@ -115,6 +115,13 @@ describe("openapi-parser", () => { expect(models[3]).toHaveProperty("name.text", "ThingNested"); }); + test("should properly resolve nested references part 2: the revengeance", async () => { + const fileName = "nested-api-1.yml"; + const schema = loadSpec(fileName); + const { models } = await parseOpenApi(schema, { cwd: getAssetsPath() }); + expect(models).toHaveLength(4); + }) + }); });