MatcherMapper : Always use Pattern (#716)

This commit is contained in:
Stef Heyenrath
2022-01-27 12:33:48 +01:00
committed by GitHub
parent 288a50ccaf
commit f2fab98abb
5 changed files with 143 additions and 92 deletions
@@ -1,22 +1,33 @@
{ {
"Request": { "Request": {
"Path": { "Path": {
"Matchers": [ "Matchers": [
{ {
"Name": "WildcardMatcher", "Name": "WildcardMatcher",
"Pattern": "/static/mapping" "Patterns": [ "/static/mapping", "/static/mapping2" ]
} }
] ]
}, },
"Body": {
"Matcher": {
"Name": "JsonMatcher",
"Pattern": {
"post1": "value 1",
"post2": "value 2"
},
"IgnoreCase": true
}
},
"Methods": [ "Methods": [
"get" "get",
"post"
] ]
}, },
"Response": { "Response": {
"BodyAsJson": { "body": "static mapping" }, "BodyAsJson": { "body": "static mapping" },
"Headers": { "Headers": {
"Content-Type": "application/json", "Content-Type": "application/json",
"Test-X": [ "test 1", "test 2" ] "Test-X": [ "test 1", "test 2" ]
} }
} }
} }
@@ -1,80 +1,80 @@
using JetBrains.Annotations; using JetBrains.Annotations;
using System; using System;
using WireMock.Matchers; using WireMock.Matchers;
using WireMock.Matchers.Request; using WireMock.Matchers.Request;
using WireMock.Util; using WireMock.Util;
namespace WireMock.RequestBuilders namespace WireMock.RequestBuilders
{ {
/// <summary> /// <summary>
/// The BodyRequestBuilder interface. /// The BodyRequestBuilder interface.
/// </summary> /// </summary>
public interface IBodyRequestBuilder : IRequestMatcher public interface IBodyRequestBuilder : IRequestMatcher
{ {
/// <summary> /// <summary>
/// WithBody: IMatcher /// WithBody: IMatcher
/// </summary> /// </summary>
/// <param name="matcher">The matcher.</param> /// <param name="matcher">The matcher.</param>
/// <returns>The <see cref="IRequestBuilder"/>.</returns> /// <returns>The <see cref="IRequestBuilder"/>.</returns>
IRequestBuilder WithBody([NotNull] IMatcher matcher); IRequestBuilder WithBody([NotNull] IMatcher matcher);
/// <summary> /// <summary>
/// WithBody: IMatcher[] /// WithBody: IMatcher[]
/// </summary> /// </summary>
/// <param name="matchers">The matchers.</param> /// <param name="matchers">The matchers.</param>
/// <returns>The <see cref="IRequestBuilder"/>.</returns> /// <returns>The <see cref="IRequestBuilder"/>.</returns>
IRequestBuilder WithBody([NotNull] IMatcher[] matchers); IRequestBuilder WithBody([NotNull] IMatcher[] matchers);
/// <summary> /// <summary>
/// WithBody: Body as string /// WithBody: Body as string
/// </summary> /// </summary>
/// <param name="body">The body.</param> /// <param name="body">The body.</param>
/// <param name="matchBehaviour">The match behaviour.</param> /// <param name="matchBehaviour">The match behaviour.</param>
/// <returns>The <see cref="IRequestBuilder"/>.</returns> /// <returns>The <see cref="IRequestBuilder"/>.</returns>
IRequestBuilder WithBody(string body, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch); IRequestBuilder WithBody(string body, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch);
/// <summary> /// <summary>
/// WithBody: Body as byte[] /// WithBody: Body as byte[]
/// </summary> /// </summary>
/// <param name="body">The body.</param> /// <param name="body">The body.</param>
/// <param name="matchBehaviour">The match behaviour.</param> /// <param name="matchBehaviour">The match behaviour.</param>
/// <returns>The <see cref="IRequestBuilder"/>.</returns> /// <returns>The <see cref="IRequestBuilder"/>.</returns>
IRequestBuilder WithBody(byte[] body, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch); IRequestBuilder WithBody(byte[] body, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch);
/// <summary> /// <summary>
/// WithBody: Body as object /// WithBody: Body as object
/// </summary> /// </summary>
/// <param name="body">The body.</param> /// <param name="body">The body.</param>
/// <param name="matchBehaviour">The match behaviour.</param> /// <param name="matchBehaviour">The match behaviour.</param>
/// <returns>The <see cref="IRequestBuilder"/>.</returns> /// <returns>The <see cref="IRequestBuilder"/>.</returns>
IRequestBuilder WithBody(object body, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch); IRequestBuilder WithBody(object body, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch);
/// <summary> /// <summary>
/// WithBody: func (string) /// WithBody: func (string)
/// </summary> /// </summary>
/// <param name="func">The function.</param> /// <param name="func">The function.</param>
/// <returns>The <see cref="IRequestBuilder"/>.</returns> /// <returns>The <see cref="IRequestBuilder"/>.</returns>
IRequestBuilder WithBody([NotNull] Func<string, bool> func); IRequestBuilder WithBody([NotNull] Func<string, bool> func);
/// <summary> /// <summary>
/// WithBody: func (byte[]) /// WithBody: func (byte[])
/// </summary> /// </summary>
/// <param name="func">The function.</param> /// <param name="func">The function.</param>
/// <returns>The <see cref="IRequestBuilder"/>.</returns> /// <returns>The <see cref="IRequestBuilder"/>.</returns>
IRequestBuilder WithBody([NotNull] Func<byte[], bool> func); IRequestBuilder WithBody([NotNull] Func<byte[], bool> func);
/// <summary> /// <summary>
/// WithBody: func (json object) /// WithBody: func (json object)
/// </summary> /// </summary>
/// <param name="func">The function.</param> /// <param name="func">The function.</param>
/// <returns>The <see cref="IRequestBuilder"/>.</returns> /// <returns>The <see cref="IRequestBuilder"/>.</returns>
IRequestBuilder WithBody([NotNull] Func<object, bool> func); IRequestBuilder WithBody([NotNull] Func<object, bool> func);
/// <summary> /// <summary>
/// WithBody: func (BodyData object) /// WithBody: func (BodyData object)
/// </summary> /// </summary>
/// <param name="func">The function.</param> /// <param name="func">The function.</param>
/// <returns>The <see cref="IRequestBuilder"/>.</returns> /// <returns>The <see cref="IRequestBuilder"/>.</returns>
IRequestBuilder WithBody([NotNull] Func<IBodyData, bool> func); IRequestBuilder WithBody([NotNull] Func<IBodyData, bool> func);
} }
} }
@@ -161,12 +161,12 @@ namespace WireMock.Serialization
// If the matcher is a IValueMatcher, get the value (can be string or object). // If the matcher is a IValueMatcher, get the value (can be string or object).
case IValueMatcher valueMatcher: case IValueMatcher valueMatcher:
model.Patterns = new[] { valueMatcher.Value }; model.Pattern = valueMatcher.Value;
break; break;
// If the matcher is a ExactObjectMatcher, get the ValueAsObject or ValueAsBytes. // If the matcher is a ExactObjectMatcher, get the ValueAsObject or ValueAsBytes.
case ExactObjectMatcher exactObjectMatcher: case ExactObjectMatcher exactObjectMatcher:
model.Patterns = new[] { exactObjectMatcher.ValueAsObject ?? exactObjectMatcher.ValueAsBytes }; model.Pattern = exactObjectMatcher.ValueAsObject ?? exactObjectMatcher.ValueAsBytes;
break; break;
} }
@@ -164,7 +164,7 @@ namespace WireMock.Net.Tests.Serialization
} }
[Fact] [Fact]
public void ToMappingModel_WithTimeSetrtings_ReturnsCorrectTimeSettings() public void ToMappingModel_WithTimeSettings_ReturnsCorrectTimeSettings()
{ {
// Assign // Assign
var start = DateTime.Now; var start = DateTime.Now;
@@ -187,16 +187,36 @@ namespace WireMock.Net.Tests.Serialization
} }
[Fact] [Fact]
public void MatcherMapper_Map_MatcherModel_JsonMatcher_Patterns_As_String() public void MatcherMapper_Map_MatcherModel_JsonMatcher_Patterns_1_Value_As_String()
{
// Assign
var pattern = "{ \"post1\": \"value1\", \"post2\": \"value2\" }";
var patterns = new[] { pattern };
var model = new MatcherModel
{
Name = "JsonMatcher",
Patterns = patterns
};
// Act
var matcher = (JsonMatcher)_sut.Map(model);
// Assert
matcher.MatchBehaviour.Should().Be(MatchBehaviour.AcceptOnMatch);
matcher.Value.Should().BeEquivalentTo(patterns);
}
[Fact]
public void MatcherMapper_Map_MatcherModel_JsonMatcher_Patterns_2_Values_As_String()
{ {
// Assign // Assign
var pattern1 = "{ \"AccountIds\": [ 1, 2, 3 ] }"; var pattern1 = "{ \"AccountIds\": [ 1, 2, 3 ] }";
var pattern2 = "{ \"X\": \"x\" }"; var pattern2 = "{ \"post1\": \"value1\", \"post2\": \"value2\" }";
var patterns = new[] { pattern1, pattern2 }; var patterns = new[] { pattern1, pattern2 };
var model = new MatcherModel var model = new MatcherModel
{ {
Name = "JsonMatcher", Name = "JsonMatcher",
Pattern = patterns Patterns = patterns
}; };
// Act // Act
@@ -227,11 +247,31 @@ namespace WireMock.Net.Tests.Serialization
} }
[Fact] [Fact]
public void MatcherMapper_Map_MatcherModel_JsonMatcher_Patterns_As_Object() public void MatcherMapper_Map_MatcherModel_JsonMatcher_Patterns_1_Value_As_Object()
{
// Assign
object pattern = new { post1 = "value1", post2 = "value2" };
var patterns = new[] { pattern };
var model = new MatcherModel
{
Name = "JsonMatcher",
Patterns = patterns
};
// Act
var matcher = (JsonMatcher)_sut.Map(model);
// Assert
matcher.MatchBehaviour.Should().Be(MatchBehaviour.AcceptOnMatch);
matcher.Value.Should().BeEquivalentTo(patterns);
}
[Fact]
public void MatcherMapper_Map_MatcherModel_JsonMatcher_Patterns_2_Values_As_Object()
{ {
// Assign // Assign
object pattern1 = new { AccountIds = new[] { 1, 2, 3 } }; object pattern1 = new { AccountIds = new[] { 1, 2, 3 } };
object pattern2 = new { X = "x" }; object pattern2 = new { post1 = "value1", post2 = "value2" };
var patterns = new[] { pattern1, pattern2 }; var patterns = new[] { pattern1, pattern2 };
var model = new MatcherModel var model = new MatcherModel
{ {