Skip to content

Commit 668c77a

Browse files
committed
merge required constraints with allOf (#133)
1 parent c4d05b4 commit 668c77a

9 files changed

Lines changed: 78 additions & 0 deletions

File tree

openapi-processor-core/src/test/kotlin/io/openapiprocessor/core/model/datatypes/ComposedObjectDataTypeSpec.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.openapiprocessor.core.model.datatypes
77

88
import io.kotest.core.spec.style.StringSpec
9+
import io.kotest.matchers.booleans.shouldBeTrue
910
import io.kotest.matchers.collections.shouldContainAll
1011
import io.kotest.matchers.shouldBe
1112
import io.openapiprocessor.core.support.datatypes.ObjectDataType
@@ -87,6 +88,22 @@ class ComposedObjectDataTypeSpec : StringSpec({
8788
composed.constraints!!.required shouldContainAll listOf("foo", "fux", "bar", "bux")
8889
}
8990

91+
"allOf merges 'required' constraint of all items" {
92+
val composed = AllOfObjectDataType(DataTypeName("AllOf"), "pkg", listOf(
93+
ObjectDataType("FooConstraints", "pkg", linkedMapOf(),
94+
constraints = DataTypeConstraints(required = listOf("foo", "fux"))),
95+
ObjectDataType(
96+
"Foo", "pkg", linkedMapOf(
97+
"foo" to propertyDataTypeString(),
98+
"fux" to propertyDataTypeString()
99+
), constraints = DataTypeConstraints(required = listOf()))
100+
))
101+
102+
composed.constraints!!.required shouldContainAll listOf("foo", "fux")
103+
composed.isRequired("foo").shouldBeTrue()
104+
composed.isRequired("fux").shouldBeTrue()
105+
}
106+
90107
"allOf without 'required' has null constraints" {
91108
val composed = AllOfObjectDataType(DataTypeName("AllOf"), "pkg", listOf(
92109
ObjectDataType("Foo", "pkg", linkedMapOf(

openapi-processor-core/src/testInt/resources/tests/bean-validation-allof-required/inputs.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ items:
22
- inputs/openapi30.yaml
33
- inputs/openapi31.yaml
44
- inputs/query.yaml
5+
- inputs/query-2.yaml
56
- inputs/mapping.yaml

openapi-processor-core/src/testInt/resources/tests/bean-validation-allof-required/inputs/openapi30.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,6 @@ info:
66
paths:
77
/query:
88
$ref: 'query.yaml'
9+
10+
/query-2:
11+
$ref: 'query-2.yaml'

openapi-processor-core/src/testInt/resources/tests/bean-validation-allof-required/inputs/openapi31.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,6 @@ info:
66
paths:
77
/query:
88
$ref: 'query.yaml'
9+
10+
/query-2:
11+
$ref: 'query-2.yaml'
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
get:
2+
responses:
3+
'200':
4+
description: create result from allOff object
5+
content:
6+
application/json:
7+
schema:
8+
allOf:
9+
- type: object
10+
required:
11+
- prop1
12+
- type: object
13+
properties:
14+
prop1:
15+
type: string
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
items:
22
- outputs/api/Api.java
33
- outputs/<model>/QueryGetResponse200.java
4+
- outputs/<model>/Query2GetResponse200.java

openapi-processor-core/src/testInt/resources/tests/bean-validation-allof-required/outputs/api/Api.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package generated.api;
22

33
import annotation.Mapping;
4+
import generated.model.Query2GetResponse200;
45
import generated.model.QueryGetResponse200;
56
import generated.support.Generated;
67

@@ -10,4 +11,7 @@ public interface Api {
1011
@Mapping("/query")
1112
QueryGetResponse200 getQuery();
1213

14+
@Mapping("/query-2")
15+
Query2GetResponse200 getQuery2();
16+
1317
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package generated.model;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import generated.support.Generated;
5+
import javax.validation.constraints.NotNull;
6+
7+
@Generated(value = "openapi-processor-core", version = "test")
8+
public class Query2GetResponse200 {
9+
10+
@NotNull
11+
@JsonProperty("prop1")
12+
private String prop1;
13+
14+
public String getProp1() {
15+
return prop1;
16+
}
17+
18+
public void setProp1(String prop1) {
19+
this.prop1 = prop1;
20+
}
21+
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package generated.model;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import generated.support.Generated;
5+
import javax.validation.constraints.NotNull;
6+
7+
@Generated(value = "openapi-processor-core", version = "test")
8+
public record Query2GetResponse200(
9+
@NotNull
10+
@JsonProperty("prop1")
11+
String prop1
12+
) {}

0 commit comments

Comments
 (0)