OpenAPITools / OpenAPITools/openapi-diff

Doesn't detect/render additions to the API

未关闭
#230 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 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();

    }
}

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 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

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。