Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public class OpenApiDiff {
private OAuthFlowDiff oAuthFlowDiff;
private ExtensionsDiff extensionsDiff;
private MetadataDiff metadataDiff;
private OperationIdDiff operationIdDiff;
private final OpenAPI oldSpecOpenApi;
private final OpenAPI newSpecOpenApi;
private final OpenApiDiffOptions options;
Expand Down Expand Up @@ -93,6 +94,7 @@ private void initializeFields() {
this.oAuthFlowDiff = new OAuthFlowDiff(this);
this.extensionsDiff = new ExtensionsDiff(this);
this.metadataDiff = new MetadataDiff(this);
this.operationIdDiff = new OperationIdDiff(this);
this.deferredSchemaCache = new DeferredSchemaCache(this);
}

Expand Down Expand Up @@ -270,6 +272,10 @@ public MetadataDiff getMetadataDiff() {
return this.metadataDiff;
}

public OperationIdDiff getOperationIdDiff() {
return this.operationIdDiff;
}

public OpenAPI getOldSpecOpenApi() {
return this.oldSpecOpenApi;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public DeferredChanged<ChangedOperation> diff(
builder
.with(
openApiDiff
.getMetadataDiff()
.getOperationIdDiff()
.diff(oldOperation.getOperationId(), newOperation.getOperationId(), context))
.ifPresent(changedOperation::setOperationId);
changedOperation.setDeprecated(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.openapitools.openapidiff.core.compare;

import static org.openapitools.openapidiff.core.utils.ChangedUtils.isChanged;

import java.util.Optional;
import org.openapitools.openapidiff.core.model.DiffContext;
import org.openapitools.openapidiff.core.model.schema.ChangedOperationId;

public class OperationIdDiff {
private final OpenApiDiff openApiDiff;

public OperationIdDiff(OpenApiDiff openApiDiff) {
this.openApiDiff = openApiDiff;
}

public Optional<ChangedOperationId> diff(String left, String right, DiffContext context) {
return isChanged(new ChangedOperationId(left, right, context));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public enum BackwardIncompatibleProp {
EXTENSION_CONTENT_TYPES_DECREASED("incompatible.extension.content.types.decreased", false),
EXTENSION_CONTENT_TYPE_DELETED("incompatible.extension.content.type.%s.deleted", false),
OPENAPI_ENDPOINTS_DECREASED("incompatible.openapi.endpoints.decreased", true),
OPERATION_ID_CHANGED("incompatible.operation.id.changed", false),
REQUEST_BODY_REQUIRED_INCREASED("incompatible.request.body.increased", true),
REQUEST_CONTENT_DECREASED("incompatible.request.content.decreased", true),
REQUEST_ENUM_DECREASED("incompatible.request.enum.decreased", true),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,8 @@ public int hashCode() {
changedExtensions);
}

@java.lang.Override
public java.lang.String toString() {
@Override
public String toString() {
return "ChangedOpenApi(oldSpecOpenApi="
+ this.getOldSpecOpenApi()
+ ", newSpecOpenApi="
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import org.openapitools.openapidiff.core.model.schema.ChangedOperationId;

public class ChangedOperation implements ComposedChanged {
private Operation oldOperation;
Expand All @@ -15,7 +16,7 @@ public class ChangedOperation implements ComposedChanged {
private PathItem.HttpMethod httpMethod;
private ChangedMetadata summary;
private ChangedMetadata description;
private ChangedMetadata operationId;
private ChangedOperationId operationId;
private boolean deprecated;
private ChangedParameters parameters;
private ChangedRequestBody requestBody;
Expand Down Expand Up @@ -92,7 +93,7 @@ public ChangedMetadata getDescription() {
return this.description;
}

public ChangedMetadata getOperationId() {
public ChangedOperationId getOperationId() {
return this.operationId;
}

Expand Down Expand Up @@ -150,7 +151,7 @@ public ChangedOperation setDescription(final ChangedMetadata description) {
return this;
}

public ChangedOperation setOperationId(final ChangedMetadata operationId) {
public ChangedOperation setOperationId(final ChangedOperationId operationId) {
this.operationId = operationId;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package org.openapitools.openapidiff.core.model.schema;

import static org.openapitools.openapidiff.core.model.BackwardIncompatibleProp.OPERATION_ID_CHANGED;

import java.util.Objects;
import org.openapitools.openapidiff.core.model.Changed;
import org.openapitools.openapidiff.core.model.DiffContext;
import org.openapitools.openapidiff.core.model.DiffResult;

public class ChangedOperationId implements Changed {

private final String left;
private final String right;
private final DiffContext context;

public ChangedOperationId(String left, String right, DiffContext context) {
this.left = left;
this.right = right;
this.context = context;
}

@Override
public DiffResult isChanged() {
if (Objects.equals(left, right)) {
return DiffResult.NO_CHANGES;
}
if (OPERATION_ID_CHANGED.enabled(context)) {
return DiffResult.INCOMPATIBLE;
}
return DiffResult.METADATA;
}

public String getLeft() {
return this.left;
}

public String getRight() {
return this.right;
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package org.openapitools.openapidiff.core.backcompat;

import static org.openapitools.openapidiff.core.TestUtils.assertSpecChangedButCompatible;
import static org.openapitools.openapidiff.core.TestUtils.assertSpecIncompatible;
import static org.openapitools.openapidiff.core.TestUtils.assertSpecUnchanged;

import org.junit.jupiter.api.Test;
import org.openapitools.openapidiff.core.model.BackwardIncompatibleProp;

public class OperationBCTest {
private final String BASE = "bc_operation_base.yaml";
Expand All @@ -17,4 +19,14 @@ public void unchanged() {
public void changedButCompatible() {
assertSpecChangedButCompatible(BASE, "bc_operation_changed_but_compatible.yaml");
}

@Test
public void operationIdChangedButCompatible() {
assertSpecChangedButCompatible(BASE, "bc_operation_changed_incompatible_operation_id.yaml");
}

@Test
public void operationIdChangedInCompatibleWithFlagSet() {
assertSpecIncompatible(BASE, "bc_operation_changed_incompatible_operation_id.yaml", BackwardIncompatibleProp.OPERATION_ID_CHANGED);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
openapi: 3.0.0
info:
description: myDesc
title: myTitle
version: 1.0.0
paths:
/widgets:
get:
operationId: listWidgetsV2
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: string