From 6350d1d19167d04b5b33df391455f5e7fd9f7a4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20K=C3=B6nig?= Date: Mon, 19 Feb 2024 04:06:26 +0100 Subject: [PATCH] make `title` available to templates for ref properties (#17881) Even though `title` is technically for the title of the API itself, it's possible to set it for properties as well. Right now, the `title` property is available in templates for regular properties, but for ref-properties it gets lost right here. This seemed rather surprising to me, so I think it's better to fix. --- .../openapitools/codegen/DefaultCodegen.java | 3 ++ .../codegen/DefaultCodegenTest.java | 13 +++++++++ .../test/resources/3_0/property-title.yaml | 29 +++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 modules/openapi-generator/src/test/resources/3_0/property-title.yaml diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 813a310e077..cabc8915b3d 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -4235,6 +4235,9 @@ public class DefaultCodegen implements CodegenConfig { if (original.getMinimum() != null) { property.setMinimum(String.valueOf(original.getMinimum().doubleValue())); } + if (original.getTitle() != null) { + property.setTitle(original.getTitle()); + } } // set the default value diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index 1d6a5978343..693ba0662e4 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -1916,6 +1916,19 @@ public class DefaultCodegenTest { Assert.assertFalse(codegen.fromProperty("customerCode", (Schema) requestProperties.get("customerCode")).deprecated); } + @Test + public void testTitleProperty() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/property-title.yaml"); + new InlineModelResolver().flatten(openAPI); + final DefaultCodegen codegen = new DefaultCodegen(); + codegen.setOpenAPI(openAPI); + + final Map testProperties = Collections.unmodifiableMap(openAPI.getComponents().getSchemas().get("ModelWithTitledProperties").getProperties()); + + Assert.assertEquals("Simple-Property-Title", codegen.fromProperty("simpleProperty", (Schema) testProperties.get("simpleProperty")).title); + Assert.assertEquals("Ref-Property-Title", codegen.fromProperty("refProperty", (Schema) testProperties.get("refProperty")).title); + } + @Test public void testDeprecatedRef() { final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/model-deprecated.yaml"); diff --git a/modules/openapi-generator/src/test/resources/3_0/property-title.yaml b/modules/openapi-generator/src/test/resources/3_0/property-title.yaml new file mode 100644 index 00000000000..a7474f08afe --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/property-title.yaml @@ -0,0 +1,29 @@ +openapi: 3.0.1 +paths: + /foo: + get: + responses: + '200': + description: ok + content: + application/json: + schema: + $ref: '#/components/schemas/test' +info: + title: Title on Properties + version: "1.0" +components: + schemas: + ModelWithTitledProperties: + properties: + simpleProperty: + type: string + title: Simple-Property-Title + refProperty: + type: string + title: Ref-Property-Title + allOf: + - $ref: '#/components/schemas/RefObject' + type: object + RefObject: + type: string