diff --git a/example-jakarta-3/build.gradle b/example-jakarta-3/build.gradle index 443761909..d88bfeab9 100644 --- a/example-jakarta-3/build.gradle +++ b/example-jakarta-3/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.github.muehmar.openapischema" version "2.6.0" + id "com.github.muehmar.openapischema" version "2.6.1" id "com.diffplug.spotless" id 'openapischema.java' } diff --git a/example/build.gradle b/example/build.gradle index 691208880..096b66590 100644 --- a/example/build.gradle +++ b/example/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.github.muehmar.openapischema" version "2.6.0" + id "com.github.muehmar.openapischema" version "2.6.1" id "com.diffplug.spotless" id 'openapischema.java' id 'java-test-fixtures' @@ -250,7 +250,7 @@ openApiGenerator { inputSpec = "$projectDir/src/main/resources/openapi-oneof-enum-discriminator.yml" packageName = "com.github.muehmar.gradle.openapi.oneofenumdiscriminator" } - ['71', '182', '185', '190', '191', '192', '193', '195', '209', '234'].forEach {issueNumber -> { + ['71', '182', '185', '190', '191', '192', '193', '195', '209', '234', '238'].forEach {issueNumber -> { "${issueNumber}" { inputSpec = "$projectDir/src/main/resources/issues/openapi-issue-${issueNumber}.yml" packageName = "com.github.muehmar.gradle.openapi.issue${issueNumber}" diff --git a/example/src/main/resources/issues/openapi-issue-238.yml b/example/src/main/resources/issues/openapi-issue-238.yml new file mode 100644 index 000000000..74bd1cb56 --- /dev/null +++ b/example/src/main/resources/issues/openapi-issue-238.yml @@ -0,0 +1,48 @@ +openapi: "3.0.0" +info: { } + +paths: { } + +components: + schemas: + User: + required: + - username + properties: + username: + type: string + + Admin: + required: + - adminname + properties: + adminname: + type: string + + + UserOrAdminOptionalProps: + anyOf: + - $ref: '#/components/schemas/User' + - $ref: '#/components/schemas/Admin' + properties: + level: + type: integer + + + UserOrAdminRequiredProps: + anyOf: + - $ref: '#/components/schemas/User' + - $ref: '#/components/schemas/Admin' + required: + - level + properties: + level: + type: integer + + + UserOrAdminRequiredAdditionalProps: + anyOf: + - $ref: '#/components/schemas/User' + - $ref: '#/components/schemas/Admin' + required: + - level diff --git a/example/src/test/java/com/github/muehmar/gradle/openapi/issue238/Issue238Test.java b/example/src/test/java/com/github/muehmar/gradle/openapi/issue238/Issue238Test.java new file mode 100644 index 000000000..ebc7dab40 --- /dev/null +++ b/example/src/test/java/com/github/muehmar/gradle/openapi/issue238/Issue238Test.java @@ -0,0 +1,77 @@ +package com.github.muehmar.gradle.openapi.issue238; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Optional; +import org.junit.jupiter.api.Test; + +public class Issue238Test { + @Test + void fullBuilder_when_usedWithOptionalPropsAnyOf_then_canSetLevel() { + final UserOrAdminOptionalPropsDto dto = + UserOrAdminOptionalPropsDto.fullBuilder() + .setAdminDto(AdminDto.builder().setAdminname("adminname").build()) + .setLevel(5) + .build(); + + assertEquals(Optional.of(5), dto.getLevelOpt()); + } + + @Test + void builder_when_usedWithOptionalPropsAnyOf_then_canSetLevel() { + final UserOrAdminOptionalPropsDto dto = + UserOrAdminOptionalPropsDto.builder() + .setAdminDto(AdminDto.builder().setAdminname("adminname").build()) + .andAllOptionals() + .setLevel(5) + .build(); + + assertEquals(Optional.of(5), dto.getLevelOpt()); + } + + @Test + void fullBuilder_when_usedWithRequiredPropsAnyOf_then_canSetLevel() { + final UserOrAdminRequiredPropsDto dto = + UserOrAdminRequiredPropsDto.fullBuilder() + .setAdminDto(AdminDto.builder().setAdminname("adminname").build()) + .setLevel(5) + .build(); + + assertEquals(5, dto.getLevel()); + } + + @Test + void builder_when_usedWithRequiredPropsAnyOf_then_canSetLevel() { + final UserOrAdminRequiredPropsDto dto = + UserOrAdminRequiredPropsDto.builder() + .setAdminDto(AdminDto.builder().setAdminname("adminname").build()) + .setLevel(5) + .andAllOptionals() + .build(); + + assertEquals(5, dto.getLevel()); + } + + @Test + void fullBuilder_when_usedWithRequiredAdditionalPropsAnyOf_then_canSetLevel() { + final UserOrAdminRequiredAdditionalPropsDto dto = + UserOrAdminRequiredAdditionalPropsDto.fullBuilder() + .setAdminDto(AdminDto.builder().setAdminname("adminname").build()) + .setLevel(5) + .build(); + + assertEquals(5, dto.getLevel()); + } + + @Test + void builder_when_usedWithRequiredAdditionalPropsAnyOf_then_canSetLevel() { + final UserOrAdminRequiredAdditionalPropsDto dto = + UserOrAdminRequiredAdditionalPropsDto.builder() + .setAdminDto(AdminDto.builder().setAdminname("adminname").build()) + .setLevel(5) + .andAllOptionals() + .build(); + + assertEquals(5, dto.getLevel()); + } +} diff --git a/spring-example/build.gradle b/spring-example/build.gradle index fd8f5df9a..ad16dc5c4 100644 --- a/spring-example/build.gradle +++ b/spring-example/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.github.muehmar.openapischema" version "2.6.0" + id "com.github.muehmar.openapischema" version "2.6.1" id "com.diffplug.spotless" id 'openapischema.java' id 'idea'