OpenAPITools / OpenAPITools/openapi-diff
Doesn't detect/render additions to the API
Offen
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Java
- Sterne
- 1.1k
- Forks
- 190
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
Try this....
See last exploratory test I added to the existing test case.
As a user it just seems totally broken?
package org.openapitools.openapidiff.core;
import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.tags.Tag;
import io.swagger.v3.parser.core.models.SwaggerParseResult;
import org.junit.jupiter.api.Test;
import org.openapitools.openapidiff.core.model.Changed;
import org.openapitools.openapidiff.core.model.ChangedOpenApi;
import org.openapitools.openapidiff.core.output.ConsoleRender;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.openapitools.openapidiff.core.TestUtils.assertOpenApiAreEquals;
import static org.openapitools.openapidiff.core.model.DiffResult.COMPATIBLE;
public class PathDiffTest {
private final String OPENAPI_PATH1 = "path_1.yaml";
private final String OPENAPI_PATH2 = "path_2.yaml";
private final String OPENAPI_PATH3 = "path_3.yaml";
private final String OPENAPI_PATH4 = "path_4.yaml";
@Test
public void testEqual() {
assertOpenApiAreEquals(OPENAPI_PATH1, OPENAPI_PATH2);
}
@Test
public void testMultiplePathWithSameSignature() {
assertThrows(
IllegalArgumentException.class, () -> assertOpenApiAreEquals(OPENAPI_PATH3, OPENAPI_PATH3));
}
@Test
public void testSameTemplateDifferentMethods() {
ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations(OPENAPI_PATH1, OPENAPI_PATH4);
assertThat(changedOpenApi.getNewEndpoints())
.hasSize(1)
.satisfiesExactly(endpoint -> assertThat(endpoint.getOperation().getOperationId()).isEqualTo("deletePet"));
assertThat(changedOpenApi.isCompatible()).isTrue();
}
@Test
void exploratoryTest() {
// clean original spec
OpenAPIParser parser = new OpenAPIParser();
SwaggerParseResult origDoc = parser.readLocation(OPENAPI_PATH1, null, null);
OpenAPI origOpenAPI = origDoc.getOpenAPI();
// hacked copy of the same original
SwaggerParseResult newDoc = parser.readLocation(OPENAPI_PATH1, null, null);
OpenAPI newOpenAPI = newDoc.getOpenAPI();
Tag tag = new Tag();
tag.setDescription("ADDED TAG");
tag.setName("ADDED TAGNAME");
newOpenAPI.addTagsItem(tag);
PathItem addedPathItem = new PathItem();
addedPathItem.setDescription("ADDED PATH");
Operation op = new Operation();
op.setOperationId("ADDEDOPID");
addedPathItem.setGet(op);
newOpenAPI.getPaths().addPathItem("ADDEDPATH", addedPathItem);
// now compare them
ChangedOpenApi changedOpenApi = OpenApiCompare.fromSpecifications(origOpenAPI, newOpenAPI);
assertThat(changedOpenApi.isChanged()).isEqualTo(COMPATIBLE); // ok so it knows something has changed??
assertThat(changedOpenApi.isDifferent()).isEqualTo(true); // yep something has changed
// but the reporting doesn't tell me what
assertThat(changedOpenApi.getChangedElements()).hasSizeGreaterThan(0);
System.out.println("---");
System.out.println("CHANGES SIZE : " + changedOpenApi.getChangedElements().size());
System.out.println("---");
System.out.println("??!! THIS COMES BACK A [null] ie a null element !!: " + changedOpenApi.getChangedElements());
System.out.println("---");
System.out.println("diffs should surely render the additional elements that I added?? - but it does nothing??");
ConsoleRender cr = new ConsoleRender();
cr.render(changedOpenApi);
System.out.println("!! some diff should have been printed above ");
//assertThat(changedOpenApi.getMissingEndpoints()).hasSize(1);
///assertThat(changedOpenApi.isCompatible()).isTrue();
}
}
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit dem exploratoryTest in PathDiffTest und verfolge OpenApiCompare.fromSpecifications bis zu ConsoleRender.render. Führe den Test aus, um changedElements und die Konsolenausgabe für das hinzugefügte Tag, den Pfad und die Operation zu prüfen; als erledigt gilt die Aufgabe, wenn diese Ergänzungen dargestellt und gerendert werden, anstatt ein null-Element oder keinen Diff zu erzeugen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- java
- Bereich
- api, testing
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 30/100