Fix match logic (#604)

This commit is contained in:
Stef Heyenrath
2021-04-18 19:30:03 +00:00
committed by GitHub
parent b17840cea9
commit fbecd3b119
3 changed files with 208 additions and 192 deletions

View File

@@ -123,6 +123,16 @@ namespace WireMock.Matchers.Request
private double CalculateMatchScore(IRequestMessage requestMessage, IMatcher matcher) private double CalculateMatchScore(IRequestMessage requestMessage, IMatcher matcher)
{ {
if (matcher is ExactObjectMatcher exactObjectMatcher)
{
// If the body is a byte array, try to match.
var detectedBodyType = requestMessage?.BodyData?.DetectedBodyType;
if (detectedBodyType == BodyType.Bytes || detectedBodyType == BodyType.String)
{
return exactObjectMatcher.IsMatch(requestMessage.BodyData.BodyAsBytes);
}
}
// Check if the matcher is a IObjectMatcher // Check if the matcher is a IObjectMatcher
if (matcher is IObjectMatcher objectMatcher) if (matcher is IObjectMatcher objectMatcher)
{ {

View File

@@ -209,13 +209,15 @@ namespace WireMock.Net.Tests.RequestMatchers
Check.That(score).IsEqualTo(1.0d); Check.That(score).IsEqualTo(1.0d);
} }
[Fact] [Theory]
public void RequestMessageBodyMatcher_GetMatchingScore_BodyAsBytes_IObjectMatcher() [InlineData(new byte[] { 1 })]
[InlineData(new byte[] { 48 })]
public void RequestMessageBodyMatcher_GetMatchingScore_BodyAsBytes_IObjectMatcher(byte[] bytes)
{ {
// Assign // Assign
var body = new BodyData var body = new BodyData
{ {
BodyAsBytes = new byte[] { 1 }, BodyAsBytes = bytes,
DetectedBodyType = BodyType.Bytes DetectedBodyType = BodyType.Bytes
}; };
var objectMatcherMock = new Mock<IObjectMatcher>(); var objectMatcherMock = new Mock<IObjectMatcher>();

View File

@@ -2,6 +2,7 @@
using NFluent; using NFluent;
using System; using System;
using System.Text; using System.Text;
using FluentAssertions;
using WireMock.Matchers; using WireMock.Matchers;
using WireMock.Matchers.Request; using WireMock.Matchers.Request;
using WireMock.Models; using WireMock.Models;
@@ -307,17 +308,20 @@ namespace WireMock.Net.Tests
Check.That(requestBuilder.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0); Check.That(requestBuilder.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
} }
[Fact] [Theory]
public void Request_WithBodyAsBytes_ExactObjectMatcher_true() [InlineData(new byte[] { 1 }, BodyType.Bytes)]
[InlineData(new byte[] { 48, 49, 50 }, BodyType.Bytes)]
[InlineData(new byte[] { 48, 49, 50 }, BodyType.String)]
public void Request_WithBodyAsBytes_ExactObjectMatcher_true(byte[] bytes, BodyType detectedBodyType)
{ {
// Assign // Assign
byte[] body = { 123 }; byte[] body = bytes;
var requestBuilder = Request.Create().UsingAnyMethod().WithBody(body); var requestBuilder = Request.Create().UsingAnyMethod().WithBody(body);
var bodyData = new BodyData var bodyData = new BodyData
{ {
BodyAsBytes = new byte[] { 123 }, BodyAsBytes = bytes,
DetectedBodyType = BodyType.Bytes DetectedBodyType = detectedBodyType
}; };
// Act // Act
@@ -325,7 +329,7 @@ namespace WireMock.Net.Tests
// Assert // Assert
var requestMatchResult = new RequestMatchResult(); var requestMatchResult = new RequestMatchResult();
Check.That(requestBuilder.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0); requestBuilder.GetMatchingScore(request, requestMatchResult).Should().Be(1.0);
} }
} }
} }