diff --git a/src/WireMock.Net/Admin/Requests/LogRequestMatchModel.cs b/src/WireMock.Net/Admin/Requests/LogRequestMatchModel.cs index d2d916e7..7436738e 100644 --- a/src/WireMock.Net/Admin/Requests/LogRequestMatchModel.cs +++ b/src/WireMock.Net/Admin/Requests/LogRequestMatchModel.cs @@ -1,4 +1,6 @@ -namespace WireMock.Admin.Requests +using System.Collections.Generic; + +namespace WireMock.Admin.Requests { /// /// LogRequestMatchModel @@ -36,5 +38,13 @@ /// The match percentage. /// public double AverageTotalScore { get; set; } + + /// + /// Gets the match details. + /// + /// + /// The match details. + /// + public IList MatchDetails { get; set; } } } \ No newline at end of file diff --git a/src/WireMock.Net/Matchers/Request/RequestMatchResult.cs b/src/WireMock.Net/Matchers/Request/RequestMatchResult.cs index 8068846f..08fc6dd3 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMatchResult.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMatchResult.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; namespace WireMock.Matchers.Request { @@ -13,7 +14,7 @@ namespace WireMock.Matchers.Request /// /// The match-score. /// - public double TotalScore { get; set; } + public double TotalScore { get; private set; } /// /// Gets or sets the total number of matches. @@ -21,7 +22,7 @@ namespace WireMock.Matchers.Request /// /// The total number of matches. /// - public int TotalNumber { get; set; } + public int TotalNumber { get; private set; } /// /// Gets or sets a value indicating whether this instance is perfect match. @@ -39,6 +40,31 @@ namespace WireMock.Matchers.Request /// public double AverageTotalScore => TotalNumber == 0 ? 0.0 : TotalScore / TotalNumber; + /// + /// Gets the match details. + /// + public IList> MatchDetails { get; private set; } + + /// + /// Initializes a new instance of the class. + /// + public RequestMatchResult() => MatchDetails = new List>(); + + /// + /// Adds the score. + /// + /// The matcher Type. + /// The score. + /// The score. + public double AddScore(Type matcherType, double score) + { + TotalScore += score; + TotalNumber++; + MatchDetails.Add(new KeyValuePair(matcherType, score)); + + return score; + } + /// /// Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. /// diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs index 52796f70..2e0891b4 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs @@ -98,11 +98,7 @@ namespace WireMock.Matchers.Request public double GetMatchingScore(RequestMessage requestMessage, RequestMatchResult requestMatchResult) { double score = IsMatch(requestMessage); - requestMatchResult.TotalScore += score; - - requestMatchResult.TotalNumber++; - - return score; + return requestMatchResult.AddScore(GetType(), score); } private double IsMatch(RequestMessage requestMessage) diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageClientIPMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageClientIPMatcher.cs index a20bc047..f498d29d 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageClientIPMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageClientIPMatcher.cs @@ -60,11 +60,7 @@ namespace WireMock.Matchers.Request public double GetMatchingScore(RequestMessage requestMessage, RequestMatchResult requestMatchResult) { double score = IsMatch(requestMessage); - requestMatchResult.TotalScore += score; - - requestMatchResult.TotalNumber++; - - return score; + return requestMatchResult.AddScore(GetType(), score); } private double IsMatch(RequestMessage requestMessage) diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs index 5eb4f6cb..d814c054 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs @@ -77,11 +77,7 @@ namespace WireMock.Matchers.Request public double GetMatchingScore(RequestMessage requestMessage, RequestMatchResult requestMatchResult) { double score = IsMatch(requestMessage); - requestMatchResult.TotalScore += score; - - requestMatchResult.TotalNumber++; - - return score; + return requestMatchResult.AddScore(GetType(), score); } private double IsMatch(RequestMessage requestMessage) diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs index 0431d70b..ce9c705f 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs @@ -77,11 +77,7 @@ namespace WireMock.Matchers.Request public double GetMatchingScore(RequestMessage requestMessage, RequestMatchResult requestMatchResult) { double score = IsMatch(requestMessage); - requestMatchResult.TotalScore += score; - - requestMatchResult.TotalNumber++; - - return score; + return requestMatchResult.AddScore(GetType(), score); } private double IsMatch(RequestMessage requestMessage) diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageMethodMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageMethodMatcher.cs index 9d3c7854..105df40a 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageMethodMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageMethodMatcher.cs @@ -37,11 +37,7 @@ namespace WireMock.Matchers.Request public double GetMatchingScore(RequestMessage requestMessage, RequestMatchResult requestMatchResult) { double score = IsMatch(requestMessage); - requestMatchResult.TotalScore += score; - - requestMatchResult.TotalNumber++; - - return score; + return requestMatchResult.AddScore(GetType(), score); } private double IsMatch(RequestMessage requestMessage) diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs index 68d7b109..75967481 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs @@ -65,11 +65,7 @@ namespace WireMock.Matchers.Request public double GetMatchingScore(RequestMessage requestMessage, RequestMatchResult requestMatchResult) { double score = IsMatch(requestMessage); - requestMatchResult.TotalScore += score; - - requestMatchResult.TotalNumber++; - - return score; + return requestMatchResult.AddScore(GetType(), score); } private double IsMatch(RequestMessage requestMessage) diff --git a/src/WireMock.Net/Matchers/Request/RequestMessagePathMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessagePathMatcher.cs index 9ffee882..d1c028b2 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessagePathMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessagePathMatcher.cs @@ -60,11 +60,7 @@ namespace WireMock.Matchers.Request public double GetMatchingScore(RequestMessage requestMessage, RequestMatchResult requestMatchResult) { double score = IsMatch(requestMessage); - requestMatchResult.TotalScore += score; - - requestMatchResult.TotalNumber++; - - return score; + return requestMatchResult.AddScore(GetType(), score); } private double IsMatch(RequestMessage requestMessage) diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageUrlMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageUrlMatcher.cs index 5f609a92..728a8acd 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageUrlMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageUrlMatcher.cs @@ -60,11 +60,7 @@ namespace WireMock.Matchers.Request public double GetMatchingScore(RequestMessage requestMessage, RequestMatchResult requestMatchResult) { double score = IsMatch(requestMessage); - requestMatchResult.TotalScore += score; - - requestMatchResult.TotalNumber++; - - return score; + return requestMatchResult.AddScore(GetType(), score); } private double IsMatch(RequestMessage requestMessage) diff --git a/src/WireMock.Net/Server/FluentMockServer.Admin.cs b/src/WireMock.Net/Server/FluentMockServer.Admin.cs index a76ca7d8..6d25e661 100644 --- a/src/WireMock.Net/Server/FluentMockServer.Admin.cs +++ b/src/WireMock.Net/Server/FluentMockServer.Admin.cs @@ -412,7 +412,12 @@ namespace WireMock.Server TotalScore = logEntry.RequestMatchResult.TotalScore, TotalNumber = logEntry.RequestMatchResult.TotalNumber, IsPerfectMatch = logEntry.RequestMatchResult.IsPerfectMatch, - AverageTotalScore = logEntry.RequestMatchResult.AverageTotalScore + AverageTotalScore = logEntry.RequestMatchResult.AverageTotalScore, + MatchDetails = logEntry.RequestMatchResult.MatchDetails.Select(x => new + { + Name = x.Key.Name.Replace("RequestMessage", string.Empty), + Score = x.Value + } as object).ToList() } : null }; }