in openapi-diff/src/modeler/AutoRest.Swagger/Model/Operation.cs [84:174]
public override IEnumerable<ComparisonMessage> Compare(
ComparisonContext<ServiceDefinition> context,
Operation previous
)
{
Operation priorOperation = previous;
if (priorOperation == null)
{
throw new ArgumentException("previous");
}
base.Compare(context, previous);
if (OperationId != priorOperation.OperationId)
{
context.LogBreakingChange(ComparisonMessages.ModifiedOperationId, priorOperation.OperationId, OperationId);
}
Extensions.TryGetValue("x-ms-long-running-operation", out var currentLongRunningOperationValue);
priorOperation.Extensions.TryGetValue("x-ms-long-running-operation", out var priorLongRunningOperationValue);
currentLongRunningOperationValue = currentLongRunningOperationValue ?? false;
priorLongRunningOperationValue = priorLongRunningOperationValue ?? false;
if (!currentLongRunningOperationValue.Equals(priorLongRunningOperationValue))
{
context.LogBreakingChange(ComparisonMessages.XmsLongRunningOperationChanged);
}
CheckParameters(context, priorOperation);
// Check that all the request body formats that were accepted still are.
context.PushProperty("consumes");
foreach (var format in priorOperation.Consumes)
{
if (!Consumes.Contains(format))
{
context.LogBreakingChange(ComparisonMessages.RequestBodyFormatNoLongerSupported, format);
}
}
context.Pop();
// Check that all the response body formats were also supported by the old version.
context.PushProperty("produces");
foreach (var format in Produces)
{
if (!priorOperation.Produces.Contains(format))
{
context.LogBreakingChange(ComparisonMessages.ResponseBodyFormatNowSupported, format);
}
}
context.Pop();
if (Responses != null && priorOperation.Responses != null)
{
context.PushProperty("responses");
foreach (var response in Responses)
{
var oldResponse = priorOperation.FindResponse(response.Key);
context.PushProperty(response.Key);
if (oldResponse == null)
{
context.LogBreakingChange(ComparisonMessages.AddingResponseCode, response.Key);
}
else
{
response.Value.Compare(context, oldResponse);
}
context.Pop();
}
foreach (var response in priorOperation.Responses)
{
var newResponse = this.FindResponse(response.Key);
if (newResponse == null)
{
context.PushProperty(response.Key);
context.LogBreakingChange(ComparisonMessages.RemovedResponseCode, response.Key);
context.Pop();
}
}
context.Pop();
}
return context.Messages;
}