Skip to content

Commit e40b07b

Browse files
TheFreakyMaksim Kuznetsov
and
Maksim Kuznetsov
authored
Fix console rendering (#595)
This fixes console rendering: - absence of "What's New", "What's Deleted", "What's Deprecated" sections - Incorrect formatting in "What's Changed" section - absence of "Result" title Closes #594 Refs #544 Co-authored-by: Maksim Kuznetsov <mkuznetsov@natera.com>
1 parent 9c92fbb commit e40b07b

File tree

10 files changed

+393
-6
lines changed

10 files changed

+393
-6
lines changed

core/src/main/java/org/openapitools/openapidiff/core/output/ConsoleRender.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public void render(ChangedOpenApi diff, OutputStreamWriter outputStreamWriter) {
4747
List<ChangedOperation> changedOperations = diff.getChangedOperations();
4848
ol_changed(changedOperations, outputStreamWriter);
4949

50+
safelyAppend(outputStreamWriter, title("Result"));
5051
safelyAppend(
5152
outputStreamWriter,
5253
StringUtils.center(
@@ -76,6 +77,8 @@ private void ol_changed(
7677
String desc =
7778
Optional.ofNullable(operation.getSummary()).map(ChangedMetadata::getRight).orElse("");
7879

80+
safelyAppend(outputStreamWriter, itemEndpoint(method, pathUrl, desc));
81+
7982
if (result(operation.getParameters()).isDifferent()) {
8083
safelyAppend(outputStreamWriter, StringUtils.repeat(' ', 2));
8184
safelyAppend(outputStreamWriter, "Parameter:");
@@ -94,7 +97,6 @@ private void ol_changed(
9497
safelyAppend(outputStreamWriter, System.lineSeparator());
9598
safelyAppend(outputStreamWriter, ul_response(operation.getApiResponses()));
9699
}
97-
safelyAppend(outputStreamWriter, itemEndpoint(method, pathUrl, desc));
98100
}
99101
}
100102

@@ -279,10 +281,10 @@ private String li_changedParam(ChangedParameter changeParam) {
279281
}
280282
}
281283

282-
private String listEndpoints(
284+
private void listEndpoints(
283285
List<Endpoint> endpoints, String title, OutputStreamWriter outputStreamWriter) {
284286
if (null == endpoints || endpoints.isEmpty()) {
285-
return "";
287+
return;
286288
}
287289
StringBuilder sb = new StringBuilder();
288290
sb.append(title(title));
@@ -291,7 +293,8 @@ private String listEndpoints(
291293
itemEndpoint(
292294
endpoint.getMethod().toString(), endpoint.getPathUrl(), endpoint.getSummary()));
293295
}
294-
return sb.append(System.lineSeparator()).toString();
296+
297+
safelyAppend(outputStreamWriter, sb.append(System.lineSeparator()).toString());
295298
}
296299

297300
private String itemEndpoint(String method, String path, String desc) {

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

+47-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ public void renderDoesNotFailWhenPropertyHasBeenRemoved() {
1414
ConsoleRender render = new ConsoleRender();
1515
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
1616
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
17-
ChangedOpenApi diff =
18-
OpenApiCompare.fromLocations("missing_property_1.yaml", "missing_property_2.yaml");
17+
ChangedOpenApi diff = OpenApiCompare.fromLocations("missing_property_1.yaml", "missing_property_2.yaml");
1918
render.render(diff, outputStreamWriter);
2019
assertThat(outputStream.toString()).isNotBlank();
2120
}
@@ -30,4 +29,50 @@ public void renderDoesNotFailWhenHTTPStatusCodeIsRange() {
3029
render.render(diff, outputStreamWriter);
3130
assertThat(outputStream.toString()).isNotBlank();
3231
}
32+
33+
@Test
34+
public void renderShowsWhatsDeletedSectionWhenEndpointIsDeleted() {
35+
ConsoleRender render = new ConsoleRender();
36+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
37+
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
38+
ChangedOpenApi diff =
39+
OpenApiCompare.fromLocations("delete_endpoint_1.yaml", "delete_endpoint_2.yaml");
40+
render.render(diff, outputStreamWriter);
41+
assertThat(outputStream.toString()).contains("What's Deleted");
42+
}
43+
44+
@Test
45+
public void renderShowsWhatsNewSectionWhenEndpointIsAdded() {
46+
ConsoleRender render = new ConsoleRender();
47+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
48+
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
49+
ChangedOpenApi diff =
50+
OpenApiCompare.fromLocations("add_endpoint_1.yaml", "add_endpoint_2.yaml");
51+
render.render(diff, outputStreamWriter);
52+
assertThat(outputStream.toString()).contains("What's New");
53+
}
54+
55+
@Test
56+
public void renderShowsWhatsDeprecatedSectionWhenEndpointIsDeprecated() {
57+
ConsoleRender render = new ConsoleRender();
58+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
59+
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
60+
ChangedOpenApi diff =
61+
OpenApiCompare.fromLocations("deprecate_endpoint_1.yaml", "deprecate_endpoint_2.yaml");
62+
render.render(diff, outputStreamWriter);
63+
assertThat(outputStream.toString()).contains("What's Deprecated");
64+
}
65+
66+
@Test
67+
public void renderShowsWhatsChangedSectionWithCorrectFormattingWhenEndpointIsChanged() {
68+
ConsoleRender render = new ConsoleRender();
69+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
70+
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
71+
ChangedOpenApi diff =
72+
OpenApiCompare.fromLocations("change_endpoint_1.yaml", "change_endpoint_2.yaml");
73+
render.render(diff, outputStreamWriter);
74+
assertThat(outputStream.toString())
75+
.contains("What's Changed")
76+
.containsSubsequence("- GET /widgets", "Parameter:", "- Changed query-param-1 in query");
77+
}
3378
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
openapi: 3.0.0
2+
servers:
3+
- url: 'http://petstore.swagger.io/v2'
4+
info:
5+
description: >-
6+
This is a sample server Petstore server. You can find out more about
7+
Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net,
8+
#swagger](http://swagger.io/irc/). For this sample, you can use the api key
9+
`special-key` to test the authorization filters.
10+
version: 1.0.0
11+
title: Swagger Petstore
12+
termsOfService: 'http://swagger.io/terms/'
13+
contact:
14+
email: apiteam@swagger.io
15+
license:
16+
name: Apache 2.0
17+
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
18+
paths:
19+
/pet/{petId}:
20+
get:
21+
tags:
22+
- pet
23+
summary: gets a pet by id
24+
description: ''
25+
operationId: updatePetWithForm
26+
parameters:
27+
- name: petId
28+
in: path
29+
description: ID of pet that needs to be updated
30+
required: true
31+
schema:
32+
type: integer
33+
responses:
34+
'405':
35+
description: Invalid input
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
openapi: 3.0.0
2+
servers:
3+
- url: 'http://petstore.swagger.io/v2'
4+
info:
5+
description: >-
6+
This is a sample server Petstore server. You can find out more about
7+
Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net,
8+
#swagger](http://swagger.io/irc/). For this sample, you can use the api key
9+
`special-key` to test the authorization filters.
10+
version: 1.0.0
11+
title: Swagger Petstore
12+
termsOfService: 'http://swagger.io/terms/'
13+
contact:
14+
email: apiteam@swagger.io
15+
license:
16+
name: Apache 2.0
17+
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
18+
paths:
19+
/pet/{petId}:
20+
get:
21+
tags:
22+
- pet
23+
summary: gets a pet by id
24+
description: ''
25+
operationId: updatePetWithForm
26+
parameters:
27+
- name: petId
28+
in: path
29+
description: ID of pet that needs to be updated
30+
required: true
31+
schema:
32+
type: integer
33+
responses:
34+
'405':
35+
description: Invalid input
36+
/pet/{petId2}:
37+
post:
38+
tags:
39+
- pet
40+
summary: deletes a pet
41+
description: ''
42+
operationId: deletePet
43+
deprecated: true
44+
parameters:
45+
- name: petId2
46+
in: path
47+
description: Pet ID to delete
48+
required: true
49+
schema:
50+
type: integer
51+
responses:
52+
'405':
53+
description: Invalid input
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
openapi: 3.0.0
2+
info:
3+
description: myDesc
4+
title: myTitle
5+
version: 1.0.0
6+
paths:
7+
/widgets:
8+
get:
9+
operationId: listWidgets
10+
parameters:
11+
- name: query-param-1
12+
in: query
13+
required: true
14+
schema:
15+
type: string
16+
- name: query-param-2
17+
in: query
18+
style: form
19+
explode: true
20+
allowEmptyValue: true
21+
schema:
22+
type: string
23+
responses:
24+
'200':
25+
description: successful operation
26+
content:
27+
application/json:
28+
schema:
29+
type: string
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
openapi: 3.0.0
2+
info:
3+
description: myDesc
4+
title: myTitle
5+
version: 1.0.0
6+
paths:
7+
/widgets:
8+
get:
9+
operationId: listWidgets
10+
parameters:
11+
- name: query-param-1
12+
in: query
13+
allowEmptyValue: true
14+
required: false
15+
schema:
16+
type: string
17+
- name: query-param-2
18+
in: query
19+
style: form
20+
explode: true
21+
allowEmptyValue: true
22+
schema:
23+
type: string
24+
responses:
25+
'200':
26+
description: successful operation
27+
content:
28+
application/json:
29+
schema:
30+
type: string
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
openapi: 3.0.0
2+
servers:
3+
- url: 'http://petstore.swagger.io/v2'
4+
info:
5+
description: >-
6+
This is a sample server Petstore server. You can find out more about
7+
Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net,
8+
#swagger](http://swagger.io/irc/). For this sample, you can use the api key
9+
`special-key` to test the authorization filters.
10+
version: 1.0.0
11+
title: Swagger Petstore
12+
termsOfService: 'http://swagger.io/terms/'
13+
contact:
14+
email: apiteam@swagger.io
15+
license:
16+
name: Apache 2.0
17+
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
18+
paths:
19+
/pet/{petId}:
20+
get:
21+
tags:
22+
- pet
23+
summary: gets a pet by id
24+
description: ''
25+
operationId: updatePetWithForm
26+
parameters:
27+
- name: petId
28+
in: path
29+
description: ID of pet that needs to be updated
30+
required: true
31+
schema:
32+
type: integer
33+
responses:
34+
'405':
35+
description: Invalid input
36+
/pet/{petId2}:
37+
get:
38+
tags:
39+
- pet
40+
summary: gets a pet by id
41+
description: ''
42+
operationId: updatePetWithForm
43+
parameters:
44+
- name: petId2
45+
in: path
46+
description: ID of pet that needs to be updated
47+
required: true
48+
schema:
49+
type: integer
50+
responses:
51+
'405':
52+
description: Invalid input
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
openapi: 3.0.0
2+
servers:
3+
- url: 'http://petstore.swagger.io/v2'
4+
info:
5+
description: >-
6+
This is a sample server Petstore server. You can find out more about
7+
Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net,
8+
#swagger](http://swagger.io/irc/). For this sample, you can use the api key
9+
`special-key` to test the authorization filters.
10+
version: 1.0.0
11+
title: Swagger Petstore
12+
termsOfService: 'http://swagger.io/terms/'
13+
contact:
14+
email: apiteam@swagger.io
15+
license:
16+
name: Apache 2.0
17+
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
18+
paths:
19+
/pet/{petId}:
20+
get:
21+
tags:
22+
- pet
23+
summary: gets a pet by id
24+
description: ''
25+
operationId: updatePetWithForm
26+
parameters:
27+
- name: petId
28+
in: path
29+
description: ID of pet that needs to be updated
30+
required: true
31+
schema:
32+
type: integer
33+
responses:
34+
'405':
35+
description: Invalid input

0 commit comments

Comments
 (0)