OpenAPITools / OpenAPITools/openapi-diff
Doesn't detect/render additions to the API
未关闭
还没有人认领这个 Issue。
- 主要语言
- Java
- 星标
- 1.1k
- 派生
- 190
- PR 合并指标
- 30 天内没有已合并 PR
描述
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();
}
}
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从 PathDiffTest 中的 exploratoryTest 开始,跟踪 OpenApiCompare.fromSpecifications 到 ConsoleRender.render。运行测试,检查新增 tag、path 和 operation 对应的 changedElements 以及控制台输出;完成的标准是这些新增内容被表示并渲染,而不是产生 null 元素或没有 diff。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- java
- 领域
- api, testing
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 30/100