Skip to content

Commit 3afafef

Browse files
authored
Removal of 'deprecated' not detected (#743)
* Fix issue #485 - Removal of 'deprecated' is not detected on schema, operation, parameter, and header level. * Reorganize tests structure * Extend test coverage for CchemaDiff, OperationDiff, ParameterDiff, HeaderDiff
1 parent 1987575 commit 3afafef

File tree

61 files changed

+1015
-1103
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+1015
-1103
lines changed

core/src/main/java/org/openapitools/openapidiff/core/compare/HeaderDiff.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import io.swagger.v3.oas.models.headers.Header;
55
import java.util.HashSet;
66
import java.util.Objects;
7-
import java.util.Optional;
87
import org.openapitools.openapidiff.core.model.Changed;
98
import org.openapitools.openapidiff.core.model.ChangedExample;
109
import org.openapitools.openapidiff.core.model.ChangedExamples;
@@ -46,12 +45,10 @@ protected DeferredChanged<ChangedHeader> computeDiff(
4645
DeferredBuilder<Changed> builder = new DeferredBuilder<>();
4746
ChangedHeader changedHeader =
4847
new ChangedHeader(left, right, context)
49-
.setRequired(getBooleanDiff(left.getRequired(), right.getRequired()))
50-
.setDeprecated(
51-
!Boolean.TRUE.equals(left.getDeprecated())
52-
&& Boolean.TRUE.equals(right.getDeprecated()))
48+
.setRequired(!Objects.equals(left.getRequired(), right.getRequired()))
49+
.setDeprecated(!Objects.equals(left.getDeprecated(), right.getDeprecated()))
5350
.setStyle(!Objects.equals(left.getStyle(), right.getStyle()))
54-
.setExplode(getBooleanDiff(left.getExplode(), right.getExplode()))
51+
.setExplode(!Objects.equals(left.getExplode(), right.getExplode()))
5552
.setExamples(new ChangedExamples(left.getExamples(), right.getExamples()))
5653
.setExample(new ChangedExample(left.getExample(), right.getExample()));
5754
builder
@@ -77,10 +74,4 @@ protected DeferredChanged<ChangedHeader> computeDiff(
7774
.ifPresent(changedHeader::setExtensions);
7875
return builder.buildIsChanged(changedHeader);
7976
}
80-
81-
private boolean getBooleanDiff(Boolean left, Boolean right) {
82-
boolean leftRequired = Optional.ofNullable(left).orElse(Boolean.FALSE);
83-
boolean rightRequired = Optional.ofNullable(right).orElse(Boolean.FALSE);
84-
return leftRequired != rightRequired;
85-
}
8677
}

core/src/main/java/org/openapitools/openapidiff/core/compare/OperationDiff.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ public DeferredChanged<ChangedOperation> diff(
5757
.diff(oldOperation.getOperationId(), newOperation.getOperationId(), context))
5858
.ifPresent(changedOperation::setOperationId);
5959
changedOperation.setDeprecated(
60-
!Boolean.TRUE.equals(oldOperation.getDeprecated())
61-
&& Boolean.TRUE.equals(newOperation.getDeprecated()));
60+
!Objects.equals(oldOperation.getDeprecated(), newOperation.getDeprecated()));
6261

6362
if (oldOperation.getRequestBody() != null || newOperation.getRequestBody() != null) {
6463
builder

core/src/main/java/org/openapitools/openapidiff/core/compare/ParameterDiff.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import io.swagger.v3.oas.models.parameters.Parameter;
55
import java.util.HashSet;
66
import java.util.Objects;
7-
import java.util.Optional;
87
import org.openapitools.openapidiff.core.model.Changed;
98
import org.openapitools.openapidiff.core.model.ChangedExample;
109
import org.openapitools.openapidiff.core.model.ChangedExamples;
@@ -51,14 +50,12 @@ protected DeferredChanged<ChangedParameter> computeDiff(
5150
new ChangedParameter(right.getName(), right.getIn(), context)
5251
.setOldParameter(left)
5352
.setNewParameter(right)
54-
.setChangeRequired(getBooleanDiff(left.getRequired(), right.getRequired()))
55-
.setDeprecated(
56-
!Boolean.TRUE.equals(left.getDeprecated())
57-
&& Boolean.TRUE.equals(right.getDeprecated()))
53+
.setChangeRequired(!Objects.equals(left.getRequired(), right.getRequired()))
54+
.setDeprecated(!Objects.equals(left.getDeprecated(), right.getDeprecated()))
5855
.setChangeAllowEmptyValue(
59-
getBooleanDiff(left.getAllowEmptyValue(), right.getAllowEmptyValue()))
56+
!Objects.equals(left.getAllowEmptyValue(), right.getAllowEmptyValue()))
6057
.setChangeStyle(!Objects.equals(left.getStyle(), right.getStyle()))
61-
.setChangeExplode(getBooleanDiff(left.getExplode(), right.getExplode()))
58+
.setChangeExplode(!Objects.equals(left.getExplode(), right.getExplode()))
6259
.setExamples(new ChangedExamples(left.getExamples(), right.getExamples()))
6360
.setExample(new ChangedExample(left.getExample(), right.getExample()));
6461
builder
@@ -84,10 +81,4 @@ protected DeferredChanged<ChangedParameter> computeDiff(
8481
.ifPresent(changedParameter::setExtensions);
8582
return builder.buildIsChanged(changedParameter);
8683
}
87-
88-
private boolean getBooleanDiff(Boolean left, Boolean right) {
89-
boolean leftRequired = Optional.ofNullable(left).orElse(Boolean.FALSE);
90-
boolean rightRequired = Optional.ofNullable(right).orElse(Boolean.FALSE);
91-
return leftRequired != rightRequired;
92-
}
9384
}

core/src/main/java/org/openapitools/openapidiff/core/compare/schemadiffresult/SchemaDiffResult.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,7 @@ public <V extends Schema<X>, X> DeferredChanged<ChangedSchema> diff(
5050
.setContext(context)
5151
.setOldSchema(left)
5252
.setNewSchema(right)
53-
.setChangeDeprecated(
54-
!Boolean.TRUE.equals(left.getDeprecated())
55-
&& Boolean.TRUE.equals(right.getDeprecated()))
53+
.setChangeDeprecated(!Objects.equals(left.getDeprecated(), right.getDeprecated()))
5654
.setChangeTitle(!Objects.equals(left.getTitle(), right.getTitle()))
5755
.setRequired(
5856
ListDiff.diff(new ChangedRequired(left.getRequired(), right.getRequired(), context)))

core/src/test/java/org/openapitools/openapidiff/core/AddPropDiffTest.java

Lines changed: 0 additions & 21 deletions
This file was deleted.

core/src/test/java/org/openapitools/openapidiff/core/AddPropPutDiffTest.java

Lines changed: 0 additions & 25 deletions
This file was deleted.

core/src/test/java/org/openapitools/openapidiff/core/AdditionalPropertiesTest.java

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package org.openapitools.openapidiff.core;
2+
3+
import io.swagger.v3.oas.models.PathItem.HttpMethod;
4+
import java.util.Optional;
5+
import javax.annotation.Nullable;
6+
import org.openapitools.openapidiff.core.model.ChangedApiResponse;
7+
import org.openapitools.openapidiff.core.model.ChangedContent;
8+
import org.openapitools.openapidiff.core.model.ChangedHeaders;
9+
import org.openapitools.openapidiff.core.model.ChangedMediaType;
10+
import org.openapitools.openapidiff.core.model.ChangedOpenApi;
11+
import org.openapitools.openapidiff.core.model.ChangedOperation;
12+
import org.openapitools.openapidiff.core.model.ChangedParameter;
13+
import org.openapitools.openapidiff.core.model.ChangedParameters;
14+
import org.openapitools.openapidiff.core.model.ChangedRequestBody;
15+
import org.openapitools.openapidiff.core.model.ChangedResponse;
16+
import org.openapitools.openapidiff.core.model.ChangedSchema;
17+
18+
public class ChangesResolver {
19+
20+
@Nullable
21+
public static ChangedOperation getChangedOperation(
22+
ChangedOpenApi changedOpenApi, HttpMethod method, String path) {
23+
return changedOpenApi.getChangedOperations().stream()
24+
.filter(
25+
operation ->
26+
operation.getHttpMethod().equals(method) && operation.getPathUrl().equals(path))
27+
.findFirst()
28+
.orElse(null);
29+
}
30+
31+
@Nullable
32+
public static ChangedParameter getChangedParameter(
33+
ChangedOpenApi changedOpenApi, HttpMethod method, String path, String parameterName) {
34+
ChangedOperation changedOperation = getChangedOperation(changedOpenApi, method, path);
35+
36+
if (changedOperation == null) {
37+
return null;
38+
}
39+
40+
return Optional.ofNullable(changedOperation.getParameters())
41+
.map(ChangedParameters::getChanged)
42+
.flatMap(
43+
changedParameters ->
44+
changedParameters.stream()
45+
.filter(changedParameter -> changedParameter.getName().equals(parameterName))
46+
.findFirst())
47+
.orElse(null);
48+
}
49+
50+
@Nullable
51+
public static ChangedHeaders getChangedResponseHeaders(
52+
ChangedOpenApi changedOpenApi, HttpMethod method, String path, String responseCode) {
53+
return Optional.ofNullable(getChangedOperation(changedOpenApi, method, path))
54+
.map(ChangedOperation::getApiResponses)
55+
.map(ChangedApiResponse::getChanged)
56+
.map(responses -> responses.get(responseCode))
57+
.map(ChangedResponse::getHeaders)
58+
.orElse(null);
59+
}
60+
61+
@Nullable
62+
public static ChangedSchema getRequestBodyChangedSchema(
63+
ChangedOperation changedOperation, String mediaType) {
64+
return Optional.ofNullable(changedOperation)
65+
.map(ChangedOperation::getRequestBody)
66+
.map(ChangedRequestBody::getContent)
67+
.map(ChangedContent::getChanged)
68+
.map(changedMediaTypes -> changedMediaTypes.get(mediaType))
69+
.map(ChangedMediaType::getSchema)
70+
.orElse(null);
71+
}
72+
}
Lines changed: 54 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,69 @@
11
package org.openapitools.openapidiff.core;
22

3+
import static io.swagger.v3.oas.models.PathItem.HttpMethod.*;
34
import static org.assertj.core.api.Assertions.assertThat;
5+
import static org.openapitools.openapidiff.core.ChangesResolver.getChangedOperation;
46

57
import org.junit.jupiter.api.Test;
68
import org.openapitools.openapidiff.core.model.ChangedOpenApi;
9+
import org.openapitools.openapidiff.core.model.ChangedOperation;
710
import org.openapitools.openapidiff.core.model.DiffResult;
811

912
public class OperationDiffTest {
1013

11-
private final String OPENAPI_DOC1 = "operation_diff_1.yaml";
12-
private final String OPENAPI_DOC2 = "operation_diff_2.yaml";
14+
private final String OPENAPI_DOC1 = "operationDiff/operation_diff_1.yaml";
15+
private final String OPENAPI_DOC2 = "operationDiff/operation_diff_2.yaml";
1316

1417
@Test
15-
public void testContentDiffWithOneEmptyMediaType() {
18+
public void testOperationIdChanged() {
1619
ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations(OPENAPI_DOC1, OPENAPI_DOC2);
17-
assertThat(changedOpenApi.isChanged()).isEqualTo(DiffResult.METADATA);
18-
assertThat(changedOpenApi.isDifferent()).isTrue();
19-
assertThat(changedOpenApi.getChangedOperations().size()).isEqualTo(1);
20-
assertThat(changedOpenApi.getChangedOperations().get(0).getOperationId().isDifferent())
21-
.isTrue();
20+
ChangedOperation changedOperation =
21+
getChangedOperation(changedOpenApi, GET, "/operation/operation-id");
22+
23+
assertThat(changedOperation).isNotNull();
24+
assertThat(changedOperation.isChanged()).isEqualTo(DiffResult.METADATA);
25+
assertThat(changedOperation.getOperationId().getRight()).isEqualTo("changed");
26+
}
27+
28+
@Test
29+
public void testOperationSummaryChanged() {
30+
ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations(OPENAPI_DOC1, OPENAPI_DOC2);
31+
ChangedOperation changedOperation =
32+
getChangedOperation(changedOpenApi, GET, "/operation/summary");
33+
34+
assertThat(changedOperation).isNotNull();
35+
assertThat(changedOperation.isChanged()).isEqualTo(DiffResult.METADATA);
36+
assertThat(changedOperation.getSummary().getRight()).isEqualTo("changed");
37+
}
38+
39+
@Test
40+
public void testOperationDescriptionChanged() {
41+
ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations(OPENAPI_DOC1, OPENAPI_DOC2);
42+
ChangedOperation changedOperation =
43+
getChangedOperation(changedOpenApi, GET, "/operation/description");
44+
45+
assertThat(changedOperation).isNotNull();
46+
assertThat(changedOperation.isChanged()).isEqualTo(DiffResult.METADATA);
47+
assertThat(changedOperation.getDescription().getRight()).isEqualTo("changed");
48+
}
49+
50+
@Test
51+
public void testOperationBecomesDeprecated() {
52+
ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations(OPENAPI_DOC1, OPENAPI_DOC2);
53+
ChangedOperation changedOperation =
54+
getChangedOperation(changedOpenApi, GET, "/operation/becomes-deprecated");
55+
56+
assertThat(changedOperation).isNotNull();
57+
assertThat(changedOperation.isDeprecated()).isTrue();
58+
}
59+
60+
@Test
61+
public void testOperationBecomesNotDeprecated() {
62+
ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations(OPENAPI_DOC1, OPENAPI_DOC2);
63+
ChangedOperation changedOperation =
64+
getChangedOperation(changedOpenApi, GET, "/operation/becomes-not-deprecated");
65+
66+
assertThat(changedOperation).isNotNull();
67+
assertThat(changedOperation.isDeprecated()).isTrue();
2268
}
2369
}

0 commit comments

Comments
 (0)