Skip to content

Commit a2929ce

Browse files
committed
WIP with response headers test cases
1 parent 1c5efd1 commit a2929ce

File tree

7 files changed

+218
-275
lines changed

7 files changed

+218
-275
lines changed

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
import io.swagger.v3.oas.models.PathItem.HttpMethod;
44
import java.util.Optional;
55
import javax.annotation.Nullable;
6+
import org.openapitools.openapidiff.core.model.ChangedApiResponse;
67
import org.openapitools.openapidiff.core.model.ChangedContent;
8+
import org.openapitools.openapidiff.core.model.ChangedHeaders;
79
import org.openapitools.openapidiff.core.model.ChangedMediaType;
810
import org.openapitools.openapidiff.core.model.ChangedOpenApi;
911
import org.openapitools.openapidiff.core.model.ChangedOperation;
1012
import org.openapitools.openapidiff.core.model.ChangedRequestBody;
13+
import org.openapitools.openapidiff.core.model.ChangedResponse;
1114
import org.openapitools.openapidiff.core.model.ChangedSchema;
1215

1316
public class ChangesResolver {
@@ -23,6 +26,17 @@ public static ChangedOperation getChangedOperation(
2326
.orElse(null);
2427
}
2528

29+
@Nullable
30+
public static ChangedHeaders getChangedResponseHeaders(
31+
ChangedOpenApi changedOpenApi, HttpMethod method, String path, String responseCode) {
32+
return Optional.ofNullable(getChangedOperation(changedOpenApi, method, path))
33+
.map(ChangedOperation::getApiResponses)
34+
.map(ChangedApiResponse::getChanged)
35+
.map(responses -> responses.get(responseCode))
36+
.map(ChangedResponse::getHeaders)
37+
.orElse(null);
38+
}
39+
2640
@Nullable
2741
public static ChangedSchema getRequestBodyChangedSchema(
2842
ChangedOperation changedOperation, String mediaType) {
Lines changed: 70 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,87 @@
11
package org.openapitools.openapidiff.core;
22

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

57
import java.util.Map;
68
import org.junit.jupiter.api.Test;
9+
import org.openapitools.openapidiff.core.model.ChangedHeader;
710
import org.openapitools.openapidiff.core.model.ChangedHeaders;
811
import org.openapitools.openapidiff.core.model.ChangedOpenApi;
9-
import org.openapitools.openapidiff.core.model.ChangedResponse;
1012

1113
public class ResponseHeaderDiffTest {
1214

13-
private final String OPENAPI_DOC1 = "header_1.yaml";
14-
private final String OPENAPI_DOC2 = "header_2.yaml";
15+
private final String OPENAPI_DOC1 = "response_header_1.yaml";
16+
private final String OPENAPI_DOC2 = "response_header_2.yaml";
1517

1618
@Test
17-
public void testDiffDifferent() {
19+
public void testResponseHeadersDescriptionChanges() {
1820
ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations(OPENAPI_DOC1, OPENAPI_DOC2);
21+
ChangedHeaders changedResponseHeaders =
22+
getChangedResponseHeaders(changedOpenApi, GET, "/response/headers/description", "200");
1923

20-
assertThat(changedOpenApi.getNewEndpoints()).isEmpty();
21-
assertThat(changedOpenApi.getMissingEndpoints()).isEmpty();
22-
assertThat(changedOpenApi.getChangedOperations()).isNotEmpty();
23-
24-
Map<String, ChangedResponse> changedResponses =
25-
changedOpenApi.getChangedOperations().get(0).getApiResponses().getChanged();
26-
assertThat(changedResponses).isNotEmpty();
27-
assertThat(changedResponses).containsKey("200");
28-
ChangedHeaders changedHeaders = changedResponses.get("200").getHeaders();
29-
assertThat(changedHeaders.isDifferent()).isTrue();
30-
assertThat(changedHeaders.getChanged()).hasSize(1);
31-
assertThat(changedHeaders.getIncreased()).hasSize(1);
32-
assertThat(changedHeaders.getMissing()).hasSize(1);
24+
assertThat(changedResponseHeaders).isNotNull();
25+
Map<String, ChangedHeader> changedHeaders = changedResponseHeaders.getChanged();
26+
27+
assertThat(changedHeaders).containsKey("x-header-description-changed");
28+
assertThat(changedHeaders.get("x-header-description-changed").getDescription()).isNotNull();
29+
assertThat(changedHeaders.get("x-header-description-changed").getDescription().getLeft())
30+
.isEqualTo("old description");
31+
assertThat(changedHeaders.get("x-header-description-changed").getDescription().getRight())
32+
.isEqualTo("new description");
33+
34+
assertThat(changedHeaders).containsKey("x-header-description-added");
35+
assertThat(changedHeaders.get("x-header-description-added").getDescription()).isNotNull();
36+
assertThat(changedHeaders.get("x-header-description-added").getDescription().getLeft())
37+
.isNull();
38+
assertThat(changedHeaders.get("x-header-description-added").getDescription().getRight())
39+
.isEqualTo("added description");
40+
41+
assertThat(changedHeaders).containsKey("x-header-description-removed");
42+
assertThat(changedHeaders.get("x-header-description-removed").getDescription()).isNotNull();
43+
assertThat(changedHeaders.get("x-header-description-removed").getDescription().getLeft())
44+
.isEqualTo("old description");
45+
assertThat(changedHeaders.get("x-header-description-removed").getDescription().getRight())
46+
.isNull();
47+
}
48+
49+
@Test
50+
public void testResponseHeadersRequiredChanges() {
51+
ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations(OPENAPI_DOC1, OPENAPI_DOC2);
52+
ChangedHeaders changedResponseHeaders =
53+
getChangedResponseHeaders(changedOpenApi, GET, "/response/headers/required", "200");
54+
55+
assertThat(changedResponseHeaders).isNotNull();
56+
Map<String, ChangedHeader> changedHeaders = changedResponseHeaders.getChanged();
57+
58+
assertThat(changedHeaders).containsKey("x-header-required-changed");
59+
}
60+
61+
@Test
62+
public void testResponseHeadersSchemaChanges() {
63+
ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations(OPENAPI_DOC1, OPENAPI_DOC2);
64+
ChangedHeaders changedResponseHeaders =
65+
getChangedResponseHeaders(changedOpenApi, GET, "/response/headers/schema", "200");
66+
67+
assertThat(changedResponseHeaders).isNotNull();
68+
Map<String, ChangedHeader> changedHeaders = changedResponseHeaders.getChanged();
69+
70+
// TODO response schema type changes are not handled (
71+
assertThat(changedHeaders).containsKey("x-header-schema-changed");
72+
}
73+
74+
@Test // issue #485
75+
public void testResponseHeadersDeprecatedChanges() {
76+
ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations(OPENAPI_DOC1, OPENAPI_DOC2);
77+
ChangedHeaders changedResponseHeaders =
78+
getChangedResponseHeaders(changedOpenApi, GET, "/response/headers/deprecated", "200");
79+
80+
assertThat(changedResponseHeaders).isNotNull();
81+
Map<String, ChangedHeader> changedHeaders = changedResponseHeaders.getChanged();
82+
assertThat(changedHeaders).containsKey("x-header-becomes-deprecated");
83+
assertThat(changedHeaders.get("x-header-becomes-deprecated").isDeprecated()).isTrue();
84+
assertThat(changedHeaders).containsKey("x-header-becomes-not-deprecated");
85+
assertThat(changedHeaders.get("x-header-becomes-not-deprecated").isDeprecated()).isFalse();
3386
}
3487
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@ public void schemaPropertyDefaultChanged() {
3434
assertTrue(changedSchema.getChangedProperties().get("field1").isChangeDefault());
3535
}
3636

37+
@Test
38+
public void schemaPropertyTypeChanged() {
39+
ChangedOpenApi changedOpenApi =
40+
OpenApiCompare.fromLocations(
41+
"schemaDiff/schema-props-defaults-handling-1.yaml",
42+
"schemaDiff/schema-props-defaults-handling-2.yaml");
43+
}
44+
3745
@Test // issue #485
3846
public void schemaBecomesDeprecatedTest() {
3947
ChangedOpenApi changedOpenApi =

core/src/test/resources/header_1.yaml

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

0 commit comments

Comments
 (0)