33import static org .assertj .core .api .Assertions .assertThat ;
44import static org .openapitools .openapidiff .core .TestUtils .assertOpenApiAreEquals ;
55
6+ import io .swagger .parser .OpenAPIParser ;
7+ import io .swagger .v3 .oas .models .OpenAPI ;
8+ import io .swagger .v3 .parser .core .models .ParseOptions ;
69import java .io .FileWriter ;
710import java .io .IOException ;
811import java .nio .file .Path ;
1114import org .junit .jupiter .api .io .TempDir ;
1215import org .openapitools .openapidiff .core .model .ChangedOpenApi ;
1316import org .openapitools .openapidiff .core .model .ChangedOperation ;
17+ import org .openapitools .openapidiff .core .model .DiffResult ;
1418import org .openapitools .openapidiff .core .model .Endpoint ;
1519import org .openapitools .openapidiff .core .output .HtmlRender ;
1620import org .openapitools .openapidiff .core .output .JsonRender ;
@@ -21,6 +25,9 @@ public class OpenApiDiffTest {
2125 private final String OPENAPI_DOC1 = "petstore_v2_1.yaml" ;
2226 private final String OPENAPI_DOC2 = "petstore_v2_2.yaml" ;
2327 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 ();
2431
2532 @ Test
2633 public void testEqual () {
@@ -104,4 +111,41 @@ public void testDiffAndJson(@TempDir Path tempDir) throws IOException {
104111 }
105112 assertThat (path ).isNotEmptyFile ();
106113 }
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+ }
107151}
0 commit comments