3
3
import static org .assertj .core .api .Assertions .assertThat ;
4
4
import static org .openapitools .openapidiff .core .TestUtils .assertOpenApiAreEquals ;
5
5
6
+ import io .swagger .parser .OpenAPIParser ;
7
+ import io .swagger .v3 .oas .models .OpenAPI ;
8
+ import io .swagger .v3 .parser .core .models .ParseOptions ;
6
9
import java .io .FileWriter ;
7
10
import java .io .IOException ;
8
11
import java .nio .file .Path ;
11
14
import org .junit .jupiter .api .io .TempDir ;
12
15
import org .openapitools .openapidiff .core .model .ChangedOpenApi ;
13
16
import org .openapitools .openapidiff .core .model .ChangedOperation ;
17
+ import org .openapitools .openapidiff .core .model .DiffResult ;
14
18
import org .openapitools .openapidiff .core .model .Endpoint ;
15
19
import org .openapitools .openapidiff .core .output .HtmlRender ;
16
20
import org .openapitools .openapidiff .core .output .JsonRender ;
@@ -21,6 +25,9 @@ public class OpenApiDiffTest {
21
25
private final String OPENAPI_DOC1 = "petstore_v2_1.yaml" ;
22
26
private final String OPENAPI_DOC2 = "petstore_v2_2.yaml" ;
23
27
private final String OPENAPI_EMPTY_DOC = "petstore_v2_empty.yaml" ;
28
+ private final String OPENAPI_DOC3 = "petstore_openapi3.yaml" ;
29
+
30
+ private static final OpenAPIParser PARSER = new OpenAPIParser ();
24
31
25
32
@ Test
26
33
public void testEqual () {
@@ -104,4 +111,41 @@ public void testDiffAndJson(@TempDir Path tempDir) throws IOException {
104
111
}
105
112
assertThat (path ).isNotEmptyFile ();
106
113
}
114
+
115
+ /** Testing that repetitive specs comparisons has to produce consistent result. */
116
+ @ Test
117
+ public void testComparisonConsistency () {
118
+ final OpenAPI oldSpec = loadSpecFromFile (OPENAPI_DOC3 );
119
+ final OpenAPI newSpec = loadSpecFromFile (OPENAPI_DOC3 );
120
+
121
+ final ChangedOpenApi diff1 = OpenApiCompare .fromSpecifications (oldSpec , newSpec );
122
+ assertThat (diff1 .isChanged ()).isEqualTo (DiffResult .NO_CHANGES );
123
+ assertThat (diff1 .getNewEndpoints ()).isEmpty ();
124
+ assertThat (diff1 .getMissingEndpoints ()).isEmpty ();
125
+ assertThat (diff1 .getChangedOperations ()).isEmpty ();
126
+
127
+ final ChangedOpenApi diff2 = OpenApiCompare .fromSpecifications (oldSpec , newSpec );
128
+ assertThat (diff2 .isChanged ()).isEqualTo (DiffResult .NO_CHANGES );
129
+ assertThat (diff2 .getNewEndpoints ()).isEmpty ();
130
+ assertThat (diff2 .getMissingEndpoints ()).isEmpty ();
131
+ assertThat (diff2 .getChangedOperations ()).isEmpty ();
132
+ }
133
+
134
+ @ Test
135
+ public void testSpecObjectsAreNotChangesAfterComparison () {
136
+ final OpenAPI oldSpec = loadSpecFromFile (OPENAPI_DOC3 );
137
+ final OpenAPI newSpec = loadSpecFromFile (OPENAPI_DOC3 );
138
+
139
+ OpenApiCompare .fromSpecifications (oldSpec , newSpec );
140
+ OpenApiCompare .fromSpecifications (oldSpec , newSpec );
141
+
142
+ final OpenAPI expectedOldSpec = loadSpecFromFile (OPENAPI_DOC3 );
143
+ final OpenAPI expectedNewSpec = loadSpecFromFile (OPENAPI_DOC3 );
144
+ assertThat (oldSpec ).isEqualTo (expectedOldSpec );
145
+ assertThat (newSpec ).isEqualTo (expectedNewSpec );
146
+ }
147
+
148
+ private static OpenAPI loadSpecFromFile (String specFile ) {
149
+ return PARSER .readLocation (specFile , null , new ParseOptions ()).getOpenAPI ();
150
+ }
107
151
}
0 commit comments