forked from loafle/openapi-generator-original
Add test case for InlineModelResolver: arbitrary request body (#1784)
* Uncomment a valid test case * Add test case : inline request body with title * Delete legacy test case * Delete unused import * Delete legacy test case which is already implemented by other test see InlineModelResolverTest#resolveInlineArrayResponseWithTitle() * Delete legacy test case which is covered by other test * Add test case : arbitraryObjectBodyParam * Delete legacy test case : testArbitraryObjectBodyParam * Add test case : arbitraryObjectRequestBodyProperty * Delete legacy test case : testArbitraryObjectBodyParamInline * Add test case : arbitraryRequestBodyArray * Delete legacy test case : testArbitraryObjectBodyParamWithArray * Add test case : arbitraryRequestBodyArrayProperty * Delete legacy test case
This commit is contained in:
parent
354db2f3e6
commit
e559474880
@ -24,9 +24,7 @@ import io.swagger.v3.oas.models.parameters.RequestBody;
|
|||||||
import io.swagger.v3.oas.models.responses.ApiResponse;
|
import io.swagger.v3.oas.models.responses.ApiResponse;
|
||||||
import io.swagger.v3.oas.models.responses.ApiResponses;
|
import io.swagger.v3.oas.models.responses.ApiResponses;
|
||||||
import io.swagger.v3.parser.core.models.ParseOptions;
|
import io.swagger.v3.parser.core.models.ParseOptions;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.openapitools.codegen.utils.ModelUtils;
|
import org.openapitools.codegen.utils.ModelUtils;
|
||||||
import org.testng.Assert;
|
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -285,7 +283,6 @@ public class InlineModelResolverTest {
|
|||||||
assertNotNull(openAPI.getComponents().getRequestBodies());
|
assertNotNull(openAPI.getComponents().getRequestBodies());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
@Test
|
@Test
|
||||||
public void resolveInlineArraySchemaWithTitle() {
|
public void resolveInlineArraySchemaWithTitle() {
|
||||||
OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/inline_model_resolver.yaml", null, new ParseOptions()).getOpenAPI();
|
OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/inline_model_resolver.yaml", null, new ParseOptions()).getOpenAPI();
|
||||||
@ -335,36 +332,14 @@ public class InlineModelResolverTest {
|
|||||||
assertTrue(requestBodyReference.getRequired());
|
assertTrue(requestBodyReference.getRequired());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
@Test
|
@Test
|
||||||
public void resolveInlineBodyParameterWithTitle() throws Exception {
|
public void resolveInlineRequestBodyWithTitle() {
|
||||||
OpenAPI openapi = new OpenAPI();
|
OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/inline_model_resolver.yaml", null, new ParseOptions()).getOpenAPI();
|
||||||
|
new InlineModelResolver().flatten(openAPI);
|
||||||
|
|
||||||
ObjectSchema addressModelItem = new ObjectSchema();
|
RequestBody requestBodyReference = openAPI.getPaths().get("/resolve_inline_request_body_with_title").getPost().getRequestBody();
|
||||||
String addressModelName = "DetailedAddress";
|
assertEquals("#/components/requestBodies/resolve_inline_request_body_with_title", requestBodyReference.get$ref());
|
||||||
addressModelItem.setTitle(addressModelName);
|
|
||||||
openapi.path("/hello", new Path()
|
|
||||||
.get(new Operation()
|
|
||||||
.parameter(new BodyParameter()
|
|
||||||
.name("body")
|
|
||||||
.schema(addressModelItem
|
|
||||||
.addProperties("address", new ObjectSchema()
|
|
||||||
.addProperties("street", new StringSchema()))
|
|
||||||
.addProperties("name", new StringSchema())))));
|
|
||||||
|
|
||||||
new InlineModelResolver().flatten(openapi);
|
|
||||||
|
|
||||||
Operation operation = openapi.getPaths().get("/hello").getGet();
|
|
||||||
BodyParameter bp = (BodyParameter)operation.getParameters().get(0);
|
|
||||||
assertTrue(bp.getSchema() instanceof RefModel);
|
|
||||||
|
|
||||||
Model body = openapi.getComponents().getSchemas().get(addressModelName);
|
|
||||||
assertTrue(body instanceof ObjectSchema);
|
|
||||||
|
|
||||||
ObjectSchema impl = (ObjectSchema) body;
|
|
||||||
assertNotNull(impl.getProperties().get("address"));
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void nonModelRequestBody() {
|
public void nonModelRequestBody() {
|
||||||
@ -488,177 +463,84 @@ public class InlineModelResolverTest {
|
|||||||
assertTrue(additionalProperties.getProperties().get("resolve_inline_object_response_with_additional_properties") instanceof StringSchema);
|
assertTrue(additionalProperties.getProperties().get("resolve_inline_object_response_with_additional_properties") instanceof StringSchema);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void arbitraryObjectRequestBody() {
|
||||||
|
OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/inline_model_resolver.yaml", null, new ParseOptions()).getOpenAPI();
|
||||||
|
new InlineModelResolver().flatten(openAPI);
|
||||||
|
|
||||||
|
MediaType mediaType = openAPI
|
||||||
|
.getPaths()
|
||||||
|
.get("/arbitrary_object_request_body")
|
||||||
|
.getPost()
|
||||||
|
.getRequestBody()
|
||||||
|
.getContent()
|
||||||
|
.get("application/json");
|
||||||
|
|
||||||
|
assertTrue(mediaType.getSchema() instanceof ObjectSchema);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void arbitraryObjectRequestBodyProperty() {
|
||||||
|
OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/inline_model_resolver.yaml", null, new ParseOptions()).getOpenAPI();
|
||||||
|
new InlineModelResolver().flatten(openAPI);
|
||||||
|
|
||||||
|
MediaType mediaType = openAPI
|
||||||
|
.getPaths()
|
||||||
|
.get("/arbitrary_object_request_body_property")
|
||||||
|
.getPost()
|
||||||
|
.getRequestBody()
|
||||||
|
.getContent()
|
||||||
|
.get("application/json");
|
||||||
|
|
||||||
|
assertTrue(mediaType.getSchema() instanceof ObjectSchema);
|
||||||
|
|
||||||
|
ObjectSchema requestBodySchema = (ObjectSchema) mediaType.getSchema();
|
||||||
|
assertTrue(requestBodySchema.getProperties().get("arbitrary_object_request_body_property") instanceof ObjectSchema);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void arbitraryRequestBodyArray() {
|
||||||
|
OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/inline_model_resolver.yaml", null, new ParseOptions()).getOpenAPI();
|
||||||
|
new InlineModelResolver().flatten(openAPI);
|
||||||
|
|
||||||
|
MediaType mediaType = openAPI
|
||||||
|
.getPaths()
|
||||||
|
.get("/arbitrary_request_body_array")
|
||||||
|
.getPost()
|
||||||
|
.getRequestBody()
|
||||||
|
.getContent()
|
||||||
|
.get("application/json");
|
||||||
|
|
||||||
|
assertTrue(mediaType.getSchema() instanceof ArraySchema);
|
||||||
|
|
||||||
|
ArraySchema requestBodySchema = (ArraySchema) mediaType.getSchema();
|
||||||
|
assertTrue(requestBodySchema.getItems() instanceof ObjectSchema);
|
||||||
|
assertNull(requestBodySchema.getItems().getProperties());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void arbitraryRequestBodyArrayProperty() {
|
||||||
|
OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/inline_model_resolver.yaml", null, new ParseOptions()).getOpenAPI();
|
||||||
|
new InlineModelResolver().flatten(openAPI);
|
||||||
|
|
||||||
|
MediaType mediaType = openAPI
|
||||||
|
.getPaths()
|
||||||
|
.get("/arbitrary_request_body_array_property")
|
||||||
|
.getPost()
|
||||||
|
.getRequestBody()
|
||||||
|
.getContent()
|
||||||
|
.get("application/json");
|
||||||
|
|
||||||
|
assertTrue(mediaType.getSchema() instanceof ArraySchema);
|
||||||
|
|
||||||
|
ArraySchema requestBodySchema = (ArraySchema) mediaType.getSchema();
|
||||||
|
assertNotNull(requestBodySchema.getItems().get$ref());
|
||||||
|
|
||||||
|
Schema referencedSchema = ModelUtils.getReferencedSchema(openAPI, requestBodySchema.getItems());
|
||||||
|
assertTrue(referencedSchema.getProperties().get("arbitrary_request_body_array_property") instanceof ObjectSchema);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@Test
|
|
||||||
public void testArrayResponse() {
|
|
||||||
OpenAPI openapi = new OpenAPI();
|
|
||||||
|
|
||||||
ArrayProperty schema = new ArrayProperty();
|
|
||||||
schema.setItems(new ObjectSchema()
|
|
||||||
.addProperties("name", new StringSchema()));
|
|
||||||
|
|
||||||
openapi.path("/foo/baz", new Path()
|
|
||||||
.get(new Operation()
|
|
||||||
.response(200, new Response()
|
|
||||||
.vendorExtension("x-foo", "bar")
|
|
||||||
.description("it works!")
|
|
||||||
.schema(schema))));
|
|
||||||
new InlineModelResolver().flatten(openapi);
|
|
||||||
|
|
||||||
Response response = openapi.getPaths().get("/foo/baz").getGet().getResponses().get("200");
|
|
||||||
assertTrue(response.getSchema() instanceof ArrayProperty);
|
|
||||||
|
|
||||||
ArrayProperty am = (ArrayProperty) response.getSchema();
|
|
||||||
Property items = am.getItems();
|
|
||||||
assertTrue(items instanceof Schema);
|
|
||||||
Schema rp = (Schema) items;
|
|
||||||
assertEquals(rp.getType(), "ref");
|
|
||||||
assertEquals(rp.get$ref(), "#/definitions/inline_response_200");
|
|
||||||
assertEquals(rp.getSimpleRef(), "inline_response_200");
|
|
||||||
|
|
||||||
Model inline = openapi.getComponents().getSchemas().get("inline_response_200");
|
|
||||||
assertTrue(inline instanceof ObjectSchema);
|
|
||||||
ObjectSchema impl = (ObjectSchema) inline;
|
|
||||||
assertNotNull(impl.getProperties().get("name"));
|
|
||||||
assertTrue(impl.getProperties().get("name") instanceof StringSchema);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testBasicInput() {
|
|
||||||
OpenAPI openapi = new OpenAPI();
|
|
||||||
|
|
||||||
ObjectSchema user = new ObjectSchema()
|
|
||||||
.addProperties("name", new StringSchema());
|
|
||||||
|
|
||||||
openapi.path("/foo/baz", new Path()
|
|
||||||
.post(new Operation()
|
|
||||||
.parameter(new BodyParameter()
|
|
||||||
.name("myBody")
|
|
||||||
.schema(new RefModel("User")))));
|
|
||||||
|
|
||||||
openapi.getComponents().addSchemas("User", user);
|
|
||||||
|
|
||||||
new InlineModelResolver().flatten(openapi);
|
|
||||||
|
|
||||||
Json.prettyPrint(openapi);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testArbitraryObjectBodyParam() {
|
|
||||||
OpenAPI openapi = new OpenAPI();
|
|
||||||
|
|
||||||
openapi.path("/hello", new Path()
|
|
||||||
.get(new Operation()
|
|
||||||
.parameter(new BodyParameter()
|
|
||||||
.name("body")
|
|
||||||
.schema(new ObjectSchema()))));
|
|
||||||
|
|
||||||
new InlineModelResolver().flatten(openapi);
|
|
||||||
|
|
||||||
Operation operation = openapi.getPaths().get("/hello").getGet();
|
|
||||||
BodyParameter bp = (BodyParameter)operation.getParameters().get(0);
|
|
||||||
assertTrue(bp.getSchema() instanceof ObjectSchema);
|
|
||||||
ObjectSchema m = (ObjectSchema) bp.getSchema();
|
|
||||||
assertNull(m.getType());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testArbitraryObjectBodyParamInline() {
|
|
||||||
OpenAPI openapi = new OpenAPI();
|
|
||||||
|
|
||||||
openapi.path("/hello", new Path()
|
|
||||||
.get(new Operation()
|
|
||||||
.parameter(new BodyParameter()
|
|
||||||
.name("body")
|
|
||||||
.schema(new ObjectSchema()
|
|
||||||
.addProperties("arbitrary", new ObjectSchema())))));
|
|
||||||
|
|
||||||
new InlineModelResolver().flatten(openapi);
|
|
||||||
|
|
||||||
Operation operation = openapi.getPaths().get("/hello").getGet();
|
|
||||||
BodyParameter bp = (BodyParameter)operation.getParameters().get(0);
|
|
||||||
assertTrue(bp.getSchema() instanceof RefModel);
|
|
||||||
|
|
||||||
Model body = openapi.getComponents().getSchemas().get("body");
|
|
||||||
assertTrue(body instanceof ObjectSchema);
|
|
||||||
|
|
||||||
ObjectSchema impl = (ObjectSchema) body;
|
|
||||||
Property p = impl.getProperties().get("arbitrary");
|
|
||||||
assertNotNull(p);
|
|
||||||
assertTrue(p instanceof ObjectSchema);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testArbitraryObjectBodyParamWithArray() {
|
|
||||||
OpenAPI openapi = new OpenAPI();
|
|
||||||
|
|
||||||
openapi.path("/hello", new Path()
|
|
||||||
.get(new Operation()
|
|
||||||
.parameter(new BodyParameter()
|
|
||||||
.name("body")
|
|
||||||
.schema(new ArraySchema()
|
|
||||||
.items(new ObjectSchema())))));
|
|
||||||
|
|
||||||
new InlineModelResolver().flatten(openapi);
|
|
||||||
|
|
||||||
Parameter param = openapi.getPaths().get("/hello").getGet().getParameters().get(0);
|
|
||||||
assertTrue(param instanceof BodyParameter);
|
|
||||||
|
|
||||||
BodyParameter bp = (BodyParameter) param;
|
|
||||||
Model schema = bp.getSchema();
|
|
||||||
|
|
||||||
assertTrue(schema instanceof ArraySchema);
|
|
||||||
|
|
||||||
ArraySchema am = (ArraySchema) schema;
|
|
||||||
Property inner = am.getItems();
|
|
||||||
assertTrue(inner instanceof ObjectSchema);
|
|
||||||
|
|
||||||
ObjectSchema op = (ObjectSchema) inner;
|
|
||||||
assertNotNull(op);
|
|
||||||
assertNull(op.getProperties());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testArbitraryObjectBodyParamArrayInline() {
|
|
||||||
OpenAPI openapi = new OpenAPI();
|
|
||||||
|
|
||||||
openapi.path("/hello", new Path()
|
|
||||||
.get(new Operation()
|
|
||||||
.parameter(new BodyParameter()
|
|
||||||
.name("body")
|
|
||||||
.schema(new ArraySchema()
|
|
||||||
.items(new ObjectSchema()
|
|
||||||
.addProperties("arbitrary", new ObjectSchema()))))));
|
|
||||||
|
|
||||||
new InlineModelResolver().flatten(openapi);
|
|
||||||
|
|
||||||
Parameter param = openapi.getPaths().get("/hello").getGet().getParameters().get(0);
|
|
||||||
assertTrue(param instanceof BodyParameter);
|
|
||||||
|
|
||||||
BodyParameter bp = (BodyParameter) param;
|
|
||||||
Model schema = bp.getSchema();
|
|
||||||
|
|
||||||
assertTrue(schema instanceof ArraySchema);
|
|
||||||
|
|
||||||
ArraySchema am = (ArraySchema) schema;
|
|
||||||
Property inner = am.getItems();
|
|
||||||
assertTrue(inner instanceof Schema);
|
|
||||||
|
|
||||||
Schema rp = (Schema) inner;
|
|
||||||
|
|
||||||
assertEquals(rp.getType(), "ref");
|
|
||||||
assertEquals(rp.get$ref(), "#/definitions/body");
|
|
||||||
assertEquals(rp.getSimpleRef(), "body");
|
|
||||||
|
|
||||||
Model inline = openapi.getComponents().getSchemas().get("body");
|
|
||||||
assertNotNull(inline);
|
|
||||||
assertTrue(inline instanceof ObjectSchema);
|
|
||||||
ObjectSchema impl = (ObjectSchema) inline;
|
|
||||||
Property p = impl.getProperties().get("arbitrary");
|
|
||||||
assertNotNull(p);
|
|
||||||
assertTrue(p instanceof ObjectSchema);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testArbitraryObjectResponse() {
|
public void testArbitraryObjectResponse() {
|
||||||
OpenAPI openapi = new OpenAPI();
|
OpenAPI openapi = new OpenAPI();
|
||||||
|
@ -41,6 +41,21 @@ paths:
|
|||||||
responses:
|
responses:
|
||||||
'200':
|
'200':
|
||||||
description: OK
|
description: OK
|
||||||
|
/resolve_inline_request_body_with_title:
|
||||||
|
post:
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
title: resolve_inline_request_body_with_title
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
operationId: resolveInlineRequestBodyWithRequired
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: OK
|
||||||
/non_model_request_body:
|
/non_model_request_body:
|
||||||
post:
|
post:
|
||||||
requestBody:
|
requestBody:
|
||||||
@ -136,6 +151,60 @@ paths:
|
|||||||
properties:
|
properties:
|
||||||
resolve_inline_object_response_with_additional_properties:
|
resolve_inline_object_response_with_additional_properties:
|
||||||
type: string
|
type: string
|
||||||
|
/arbitrary_object_request_body:
|
||||||
|
post:
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
operationId: arbitraryObjectRequestBody
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: OK
|
||||||
|
/arbitrary_object_request_body_property:
|
||||||
|
post:
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
arbitrary_object_request_body_property:
|
||||||
|
type: object
|
||||||
|
operationId: arbitraryObjectRequestBodyProperty
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: OK
|
||||||
|
/arbitrary_request_body_array:
|
||||||
|
post:
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: item
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
operationId: arbitraryRequestBodyArray
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: OK
|
||||||
|
/arbitrary_request_body_array_property:
|
||||||
|
post:
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: item
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
arbitrary_request_body_array_property:
|
||||||
|
type: object
|
||||||
|
operationId: arbitraryRequestBodyArrayProperty
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: OK
|
||||||
components:
|
components:
|
||||||
schemas:
|
schemas:
|
||||||
Users:
|
Users:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user