Skip to content

Commit aacfa80

Browse files
authored
Merge pull request #8 from adarshsharma/adarsh_master
Added ChangedRequestBody
2 parents f42ae16 + 33fbc4e commit aacfa80

File tree

7 files changed

+134
-24
lines changed

7 files changed

+134
-24
lines changed

src/main/java/com/qdesrame/openapi/diff/compare/OpenApiDiff.java

+4-14
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
import io.swagger.v3.oas.models.OpenAPI;
77
import io.swagger.v3.oas.models.Operation;
88
import io.swagger.v3.oas.models.PathItem;
9-
import io.swagger.v3.oas.models.media.Content;
10-
import io.swagger.v3.oas.models.parameters.RequestBody;
119
import io.swagger.v3.oas.models.responses.ApiResponse;
1210
import io.swagger.v3.parser.OpenAPIV3Parser;
1311
import io.swagger.v3.parser.core.models.AuthorizationValue;
@@ -31,6 +29,7 @@ public class OpenApiDiff {
3129
private ContentDiff contentDiff;
3230
private ParametersDiff parametersDiff;
3331
private ParameterDiff parameterDiff;
32+
private RequestBodyDiff requestBodyDiff;
3433

3534
private OpenAPI oldSpecOpenApi;
3635
private OpenAPI newSpecOpenApi;
@@ -87,6 +86,7 @@ private void initializeFields() {
8786
this.contentDiff = new ContentDiff(this);
8887
this.parametersDiff = new ParametersDiff(this);
8988
this.parameterDiff = new ParameterDiff(this);
89+
this.requestBodyDiff = new RequestBodyDiff(this);
9090
}
9191

9292
/*
@@ -138,19 +138,9 @@ private ChangedOpenApi compare() {
138138
changedOperation.setSummary(newOperation.getSummary());
139139
changedOperation.setDeprecated(!Boolean.TRUE.equals(oldOperation.getDeprecated()) && Boolean.TRUE.equals(newOperation.getDeprecated()));
140140

141-
Content oldRequestContent = new Content();
142-
Content newRequestContent = new Content();
143-
if (oldOperation.getRequestBody() != null) {
144-
RequestBody oldRequestBody = RefPointer.Replace.requestBody(oldSpecOpenApi.getComponents(), oldOperation.getRequestBody());
145-
if (oldRequestBody.getContent() != null) {
146-
oldRequestContent = oldRequestBody.getContent();
147-
}
148-
}
149-
if (newOperation.getRequestBody() != null) {
150-
RequestBody newRequestBody = RefPointer.Replace.requestBody(oldSpecOpenApi.getComponents(), newOperation.getRequestBody());
151-
newRequestContent = newRequestBody.getContent();
141+
if (oldOperation.getRequestBody() != null || newOperation.getRequestBody() != null) {
142+
changedOperation.setChangedRequestBody(requestBodyDiff.diff(oldOperation.getRequestBody(), newOperation.getRequestBody()));
152143
}
153-
changedOperation.setRequestChangedContent(contentDiff.diff(oldRequestContent, newRequestContent));
154144

155145
ChangedParameters changedParameters = parametersDiff.diff(oldOperation.getParameters(), newOperation.getParameters());
156146
changedOperation.setChangedParameters(changedParameters);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.qdesrame.openapi.diff.compare;
2+
3+
import com.qdesrame.openapi.diff.model.ChangedRequestBody;
4+
import com.qdesrame.openapi.diff.utils.RefPointer;
5+
import io.swagger.v3.oas.models.media.Content;
6+
import io.swagger.v3.oas.models.parameters.RequestBody;
7+
8+
import java.util.Objects;
9+
10+
/**
11+
* Created by adarsh.sharma on 28/12/17.
12+
*/
13+
public class RequestBodyDiff {
14+
private OpenApiDiff openApiDiff;
15+
16+
public RequestBodyDiff(OpenApiDiff openApiDiff) {
17+
this.openApiDiff = openApiDiff;
18+
}
19+
20+
public ChangedRequestBody diff(RequestBody left, RequestBody right) {
21+
Content oldRequestContent = new Content();
22+
Content newRequestContent = new Content();
23+
RequestBody oldRequestBody = null;
24+
RequestBody newRequestBody = null;
25+
if (left != null) {
26+
oldRequestBody = RefPointer.Replace.requestBody(openApiDiff.getOldSpecOpenApi().getComponents(), left);
27+
if (oldRequestBody.getContent() != null) {
28+
oldRequestContent = oldRequestBody.getContent();
29+
}
30+
}
31+
if (right != null) {
32+
newRequestBody = RefPointer.Replace.requestBody(openApiDiff.getOldSpecOpenApi().getComponents(), right);
33+
if (newRequestBody.getContent() != null) {
34+
newRequestContent = newRequestBody.getContent();
35+
}
36+
}
37+
38+
ChangedRequestBody changedRequestBody = new ChangedRequestBody(left, right);
39+
40+
boolean leftRequired = oldRequestBody != null ? Boolean.TRUE.equals(oldRequestBody.getRequired()) : false;
41+
boolean rightRequired = newRequestBody != null ? Boolean.TRUE.equals(newRequestBody.getRequired()) : false;
42+
changedRequestBody.setChangeRequired(leftRequired != rightRequired);
43+
44+
String leftDescription = oldRequestBody != null ? oldRequestBody.getDescription() : null;
45+
String rightDescription = newRequestBody != null ? newRequestBody.getDescription() : null;
46+
changedRequestBody.setChangeDescription(!Objects.equals(leftDescription, rightDescription));
47+
48+
changedRequestBody.setChangedContent(openApiDiff.getContentDiff().diff(oldRequestContent, newRequestContent));
49+
return changedRequestBody;
50+
}
51+
}

src/main/java/com/qdesrame/openapi/diff/model/ChangedOperation.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class ChangedOperation implements Changed {
1313
private String summary;
1414
private boolean deprecated;
1515
private ChangedParameters changedParameters;
16-
private ChangedContent requestChangedContent;
16+
private ChangedRequestBody changedRequestBody;
1717
private ChangedApiResponse changedApiResponse;
1818

1919
public ChangedOperation(String pathUrl, PathItem.HttpMethod httpMethod, Operation oldOperation, Operation newOperation) {
@@ -63,12 +63,12 @@ public void setChangedParameters(ChangedParameters changedParameters) {
6363
this.changedParameters = changedParameters;
6464
}
6565

66-
public ChangedContent getRequestChangedContent() {
67-
return requestChangedContent;
66+
public ChangedRequestBody getChangedRequestBody() {
67+
return changedRequestBody;
6868
}
6969

70-
public void setRequestChangedContent(ChangedContent requestChangedContent) {
71-
this.requestChangedContent = requestChangedContent;
70+
public void setChangedRequestBody(ChangedRequestBody changedRequestBody) {
71+
this.changedRequestBody = changedRequestBody;
7272
}
7373

7474
public ChangedApiResponse getChangedApiResponse() {
@@ -87,7 +87,7 @@ public boolean isDiff() {
8787
@Override
8888
public boolean isDiffBackwardCompatible() {
8989
return changedParameters.isDiffBackwardCompatible()
90-
&& requestChangedContent.isDiffBackwardCompatible(true)
90+
&& (changedRequestBody == null || changedRequestBody.isDiffBackwardCompatible())
9191
&& changedApiResponse.isDiffBackwardCompatible();
9292
}
9393

@@ -100,7 +100,7 @@ public boolean isDiffResponse() {
100100
}
101101

102102
public boolean isDiffRequest() {
103-
return requestChangedContent.isDiff();
103+
return changedRequestBody != null && changedRequestBody.isDiff();
104104
}
105105

106106
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.qdesrame.openapi.diff.model;
2+
3+
import io.swagger.v3.oas.models.parameters.RequestBody;
4+
5+
/**
6+
* Created by adarsh.sharma on 27/12/17.
7+
*/
8+
public class ChangedRequestBody implements Changed {
9+
private RequestBody oldRequestBody;
10+
private RequestBody newRequestBody;
11+
private boolean changeDescription;
12+
private boolean changeRequired;
13+
private ChangedContent changedContent;
14+
15+
public ChangedRequestBody(RequestBody oldRequestBody, RequestBody newRequestBody) {
16+
this.oldRequestBody = oldRequestBody;
17+
this.newRequestBody = newRequestBody;
18+
}
19+
20+
public RequestBody getOldRequestBody() {
21+
return oldRequestBody;
22+
}
23+
24+
public void setOldRequestBody(RequestBody oldRequestBody) {
25+
this.oldRequestBody = oldRequestBody;
26+
}
27+
28+
public RequestBody getNewRequestBody() {
29+
return newRequestBody;
30+
}
31+
32+
public void setNewRequestBody(RequestBody newRequestBody) {
33+
this.newRequestBody = newRequestBody;
34+
}
35+
36+
public boolean isChangeDescription() {
37+
return changeDescription;
38+
}
39+
40+
public void setChangeDescription(boolean changeDescription) {
41+
this.changeDescription = changeDescription;
42+
}
43+
44+
public boolean isChangeRequired() {
45+
return changeRequired;
46+
}
47+
48+
public void setChangeRequired(boolean changeRequired) {
49+
this.changeRequired = changeRequired;
50+
}
51+
52+
public ChangedContent getChangedContent() {
53+
return changedContent;
54+
}
55+
56+
public void setChangedContent(ChangedContent changedContent) {
57+
this.changedContent = changedContent;
58+
}
59+
60+
@Override
61+
public boolean isDiff() {
62+
return changeDescription || changeRequired || changedContent.isDiff();
63+
}
64+
65+
@Override
66+
public boolean isDiffBackwardCompatible() {
67+
return !changeRequired && changedContent.isDiffBackwardCompatible(true);
68+
}
69+
}

src/main/java/com/qdesrame/openapi/diff/output/ConsoleRender.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ private String ol_changed(List<ChangedOperation> operations) {
6565
if (operation.isDiffRequest()) {
6666
ul_detail.append(StringUtils.repeat(' ', 2)).append("Request:")
6767
.append(System.lineSeparator())
68-
.append(ul_content(operation.getRequestChangedContent(), true));
68+
.append(ul_content(operation.getChangedRequestBody().getChangedContent(), true));
6969
}
7070
if (operation.isDiffResponse()) {
7171
ul_detail.append(StringUtils.repeat(' ', 2)).append("Return Type:")

src/main/java/com/qdesrame/openapi/diff/output/HtmlRender.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ private ContainerTag ol_changed(List<ChangedOperation> changedOperations) {
125125
ul_detail.with(li().with(h3("Parameters")).with(ul_param(changedOperation.getChangedParameters())));
126126
}
127127
if (changedOperation.isDiffRequest()) {
128-
ul_detail.with(li().with(h3("Request")).with(ul_request(changedOperation.getRequestChangedContent())));
128+
ul_detail.with(li().with(h3("Request")).with(ul_request(changedOperation.getChangedRequestBody().getChangedContent())));
129129
} else {
130130
}
131131
if (changedOperation.isDiffResponse()) {

src/main/java/com/qdesrame/openapi/diff/output/MarkdownRender.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ private String ol_changed(List<ChangedOperation> changedOperations) {
103103
}
104104
if (changedOperation.isDiffRequest()) {
105105
ul_detail.append(PRE_LI).append("Request")
106-
.append(ul_request(changedOperation.getRequestChangedContent()));
106+
.append(ul_request(changedOperation.getChangedRequestBody().getChangedContent()));
107107
}
108108
if (changedOperation.isDiffResponse()) {
109109
ul_detail.append(PRE_LI).append("Return Type")

0 commit comments

Comments
 (0)