mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-03-17 23:03:46 +01:00
68 lines
2.3 KiB
C#
68 lines
2.3 KiB
C#
using Stef.Validation;
|
|
using WireMock.Types;
|
|
using WireMock.Util;
|
|
|
|
namespace WireMock.Matchers.Helpers;
|
|
|
|
internal static class BodyDataMatchScoreCalculator
|
|
{
|
|
public static MatchResult CalculateMatchScore(IBodyData? requestMessage, IMatcher matcher)
|
|
{
|
|
Guard.NotNull(matcher);
|
|
|
|
if (matcher is NotNullOrEmptyMatcher notNullOrEmptyMatcher)
|
|
{
|
|
switch (requestMessage?.DetectedBodyType)
|
|
{
|
|
case BodyType.Json:
|
|
case BodyType.String:
|
|
case BodyType.FormUrlEncoded:
|
|
return notNullOrEmptyMatcher.IsMatch(requestMessage.BodyAsString);
|
|
|
|
case BodyType.Bytes:
|
|
return notNullOrEmptyMatcher.IsMatch(requestMessage.BodyAsBytes);
|
|
|
|
default:
|
|
return default;
|
|
}
|
|
}
|
|
|
|
if (matcher is ExactObjectMatcher exactObjectMatcher)
|
|
{
|
|
// If the body is a byte array, try to match.
|
|
var detectedBodyType = requestMessage?.DetectedBodyType;
|
|
if (detectedBodyType is BodyType.Bytes or BodyType.String or BodyType.FormUrlEncoded)
|
|
{
|
|
return exactObjectMatcher.IsMatch(requestMessage?.BodyAsBytes);
|
|
}
|
|
}
|
|
|
|
// Check if the matcher is a IObjectMatcher
|
|
if (matcher is IObjectMatcher objectMatcher)
|
|
{
|
|
// If the body is a JSON object, try to match.
|
|
if (requestMessage?.DetectedBodyType == BodyType.Json)
|
|
{
|
|
return objectMatcher.IsMatch(requestMessage.BodyAsJson);
|
|
}
|
|
|
|
// If the body is a byte array, try to match.
|
|
if (requestMessage?.DetectedBodyType == BodyType.Bytes)
|
|
{
|
|
return objectMatcher.IsMatch(requestMessage.BodyAsBytes);
|
|
}
|
|
}
|
|
|
|
// Check if the matcher is a IStringMatcher
|
|
if (matcher is IStringMatcher stringMatcher)
|
|
{
|
|
// If the body is a Json or a String, use the BodyAsString to match on.
|
|
if (requestMessage?.DetectedBodyType is BodyType.Json or BodyType.String or BodyType.FormUrlEncoded)
|
|
{
|
|
return stringMatcher.IsMatch(requestMessage.BodyAsString);
|
|
}
|
|
}
|
|
|
|
return default;
|
|
}
|
|
} |