Skip to content

Commit fb16fee

Browse files
committed
Set isModel appropriately for referenced schemas
1 parent a3b36f7 commit fb16fee

File tree

4 files changed

+125
-1
lines changed

4 files changed

+125
-1
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2304,7 +2304,8 @@ public CodegenProperty fromProperty(String name, Schema p) {
23042304
//}
23052305
// --END of revision
23062306
setNonArrayMapProperty(property, type);
2307-
property.isModel = ModelUtils.isObjectSchema(p) && ModelUtils.isModel(p);
2307+
Schema refOrCurrent = ModelUtils.getReferencedSchema(this.openAPI, p);
2308+
property.isModel = (ModelUtils.isComposedSchema(refOrCurrent) || ModelUtils.isObjectSchema(refOrCurrent)) && ModelUtils.isModel(refOrCurrent);
23082309
}
23092310

23102311
LOGGER.debug("debugging from property return: " + property);

modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import io.swagger.v3.oas.models.PathItem;
2828
import io.swagger.v3.oas.models.headers.Header;
2929
import io.swagger.v3.oas.models.media.*;
30+
import io.swagger.v3.oas.models.parameters.Parameter;
3031
import io.swagger.v3.oas.models.parameters.QueryParameter;
3132
import io.swagger.v3.oas.models.parameters.RequestBody;
3233
import io.swagger.v3.oas.models.responses.ApiResponse;
@@ -911,6 +912,41 @@ public void modelWithSuffixDoNotContainInheritedVars() {
911912
Assert.assertEquals(codegenModel.vars.size(), 1);
912913
}
913914

915+
@Test
916+
public void arrayInnerReferencedSchemaMarkedAsModel_20() {
917+
final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/2_0/arrayRefBody.yaml");
918+
final DefaultCodegen codegen = new DefaultCodegen();
919+
codegen.setOpenAPI(openAPI);
920+
921+
Set<String> imports = new HashSet<>();
922+
923+
RequestBody body = openAPI.getPaths().get("/examples").getPost().getRequestBody();
924+
925+
CodegenParameter codegenParameter = codegen.fromRequestBody(body, imports, "");
926+
927+
Assert.assertTrue(codegenParameter.isContainer);
928+
Assert.assertTrue(codegenParameter.items.isModel);
929+
Assert.assertFalse(codegenParameter.items.isContainer);
930+
}
931+
932+
@Test
933+
public void arrayInnerReferencedSchemaMarkedAsModel_30() {
934+
final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/arrayRefBody.yaml");
935+
new InlineModelResolver().flatten(openAPI);
936+
final DefaultCodegen codegen = new DefaultCodegen();
937+
codegen.setOpenAPI(openAPI);
938+
939+
Set<String> imports = new HashSet<>();
940+
941+
RequestBody body = openAPI.getPaths().get("/examples").getPost().getRequestBody();
942+
943+
CodegenParameter codegenParameter = codegen.fromRequestBody(body, imports, "");
944+
945+
Assert.assertTrue(codegenParameter.isContainer);
946+
Assert.assertTrue(codegenParameter.items.isModel);
947+
Assert.assertFalse(codegenParameter.items.isContainer);
948+
}
949+
914950
@Test
915951
@SuppressWarnings("unchecked")
916952
public void commonLambdasRegistrationTest() {
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
swagger: '2.0'
2+
info:
3+
version: ''
4+
title: arrayRefBody
5+
contact: {}
6+
host: www.example.com
7+
basePath: /
8+
schemes:
9+
- https
10+
consumes:
11+
- application/json
12+
produces:
13+
- application/json
14+
paths:
15+
/examples:
16+
post:
17+
description: Create an array of inputs
18+
summary: ''
19+
tags:
20+
- Examples
21+
operationId: createExamples
22+
produces:
23+
- application/json
24+
parameters:
25+
- name: body
26+
in: body
27+
required: true
28+
description: inputs description
29+
schema:
30+
type: array
31+
items:
32+
$ref: '#/definitions/Input'
33+
responses:
34+
200:
35+
description: successful operation
36+
headers: {}
37+
definitions:
38+
Input:
39+
title: Input
40+
type: object
41+
properties:
42+
id:
43+
type: string
44+
age:
45+
type: integer
46+
format: int32
47+
dt:
48+
type: string
49+
format: date-time
50+
tags:
51+
- name: Examples
52+
description: 'Example inputs'
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
openapi: 3.0.0
2+
info:
3+
title: ''
4+
version: ''
5+
paths:
6+
/examples:
7+
post:
8+
tags:
9+
- Examples
10+
summary: Get a list of transactions
11+
operationId: getFilteredTransactions
12+
responses:
13+
default:
14+
description: successful operation
15+
requestBody:
16+
description: subscription payload
17+
content:
18+
application/json:
19+
schema:
20+
type: array
21+
items:
22+
$ref: '#/components/schemas/Input'
23+
components:
24+
schemas:
25+
Input:
26+
type: object
27+
properties:
28+
id:
29+
type: string
30+
age:
31+
type: integer
32+
format: int32
33+
dt:
34+
type: string
35+
format: date-time

0 commit comments

Comments
 (0)