Skip to content
Closed
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
8 changes: 2 additions & 6 deletions openapi-diff/src/core/OpenApiDiff/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,8 @@ private static int Main(string[] args)
string swaggerPrev = File.ReadAllText(settings.OldSpec);
string swaggerNew = File.ReadAllText(settings.NewSpec);

var messages = modeler.Compare(swaggerPrev, swaggerNew, settings);
foreach (var msg in messages)
{
Console.WriteLine(settings.JsonValidationMessages ? msg.GetValidationMessagesAsJson() : msg.ToString());
}

var message = modeler.Compare(swaggerPrev, swaggerNew, settings);
Console.WriteLine(settings.JsonValidationMessages ? message.GetValidationMessagesAsJson() : message.ToString());
return 0;
}
}
Expand Down

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions openapi-diff/src/modeler/AutoRest.Swagger/ComparisonContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,20 +53,20 @@ public ComparisonContext(object oldRoot, object newRoot, Settings settings = nul

public void LogInfo(MessageTemplate template, params object[] formatArguments)
{
_messages.Add(new ComparisonMessage(template, new FileObjectPath(File, Path), Category.Info, formatArguments));
_messages.Add(template, new FileObjectPath(File, Path), Category.Info, formatArguments);
}

public void LogError(MessageTemplate template, params object[] formatArguments)
{
_messages.Add(new ComparisonMessage(template, new FileObjectPath(File, Path), Category.Error, formatArguments));
_messages.Add(template, new FileObjectPath(File, Path), Category.Error, formatArguments);
}

public void LogBreakingChange(MessageTemplate template, params object[] formatArguments)
{
_messages.Add(new ComparisonMessage(template, new FileObjectPath(File, Path), Strict ? Category.Error : Category.Warning, formatArguments));
_messages.Add(template, new FileObjectPath(File, Path), Strict ? Category.Error : Category.Warning, formatArguments);
}

public IEnumerable<ComparisonMessage> Messages
public ComparisonMessagesObject Messages
{
get
{
Expand All @@ -76,7 +76,7 @@ public IEnumerable<ComparisonMessage> Messages
}
}

private IList<ComparisonMessage> _messages = new List<ComparisonMessage>();
private ComparisonMessagesObject _messages = new ComparisonMessagesObject();
}

public enum DataDirection
Expand Down
59 changes: 16 additions & 43 deletions openapi-diff/src/modeler/AutoRest.Swagger/ComparisonMessage.cs
Original file line number Diff line number Diff line change
@@ -1,75 +1,48 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.

using OpenApiDiff.Core.Logging;
using System.Globalization;
using Newtonsoft.Json;
using OpenApiDiff.Core.Logging;
using System.Collections.Generic;
using System.Globalization;

namespace AutoRest.Swagger
{
/// <summary>
/// Represents a single validation violation.
/// </summary>
public class ComparisonMessage
{
public ComparisonMessage(MessageTemplate template, FileObjectPath path, Category severity, params object[] formatArguments)
{
Severity = severity;
public static string DocBaseUrl = "https://github.com/Azure/openapi-diff/tree/master/docs/rules/";

public ComparisonMessage(MessageTemplate template, FileObjectPath path, Category category, params object[] formatArguments) {
Message = $"{string.Format(CultureInfo.CurrentCulture, template.Message, formatArguments)}";
Path = path;
Id = template.Id;
Code = template.Code;
DocUrl = $"{DocBaseUrl}{template.Id}.md";
}

public Category Severity { get; }

public string Message { get; }

/// <summary>
/// The JSON document path to the element being validated.
/// </summary>
public FileObjectPath Path { get; }

/// <summary>
/// The id of the validation message
/// </summary>
public int Id { get; private set; }
public int Id { get; }

public string Code { get; }

/// <summary>
/// The code of the validation message
/// </summary>
public string Code { get; private set; }
public string DocUrl { get; }

public string GetValidationMessagesAsJson()
public object GetValidationMessagesAsJson()
{
var rawMessage = new Dictionary<string, string>();
rawMessage["id"] = Id.ToString();
rawMessage["code"] = Code.ToString();
rawMessage["message"] = Message;
rawMessage["jsonref"] = Path?.JsonReference;
rawMessage["json-path"] = Path?.ReadablePath;
rawMessage["type"] = Severity.ToString();

return JsonConvert.SerializeObject(rawMessage, Formatting.Indented);
rawMessage["id"] = Id.ToString();
rawMessage["code"] = Code.ToString();
rawMessage["docurl"] = DocUrl.ToString();
return rawMessage;
}

public override string ToString()
{
return $"code = {Code}, type = {Severity}, message = {Message}";
return $"code = {Code}, message = {Message}, docurl = {DocUrl}";
}
}

public class CustomComparer : IEqualityComparer<ComparisonMessage>
{
public bool Equals(ComparisonMessage message1, ComparisonMessage message2)
{
return message1.Message == message2.Message;
}

public int GetHashCode(ComparisonMessage obj)
{
return obj.Message.GetHashCode();
}
}
}
Loading