diff --git a/src/WireMock.Net/Serialization/MatcherMapper.cs b/src/WireMock.Net/Serialization/MatcherMapper.cs index 86320fa4..9a0c9bcb 100644 --- a/src/WireMock.Net/Serialization/MatcherMapper.cs +++ b/src/WireMock.Net/Serialization/MatcherMapper.cs @@ -36,7 +36,7 @@ namespace WireMock.Serialization string matcherName = parts[0]; string matcherType = parts.Length > 1 ? parts[1] : null; - string[] stringPatterns = matcher.Patterns != null ? matcher.Patterns.OfType().ToArray() : new[] { matcher.Pattern as string }; + string[] stringPatterns = (matcher.Patterns != null ? matcher.Patterns : new[] { matcher.Pattern }).OfType().ToArray(); MatchBehaviour matchBehaviour = matcher.RejectOnMatch == true ? MatchBehaviour.RejectOnMatch : MatchBehaviour.AcceptOnMatch; bool ignoreCase = matcher.IgnoreCase == true; bool throwExceptionWhenMatcherFails = _settings.ThrowExceptionWhenMatcherFails == true; @@ -64,7 +64,8 @@ namespace WireMock.Serialization return new RegexMatcher(matchBehaviour, stringPatterns, ignoreCase, throwExceptionWhenMatcherFails); case "JsonMatcher": - return new JsonMatcher(matchBehaviour, stringPatterns, ignoreCase, throwExceptionWhenMatcherFails); + object value = matcher.Pattern ?? matcher.Patterns; + return new JsonMatcher(matchBehaviour, value, ignoreCase, throwExceptionWhenMatcherFails); case "JsonPathMatcher": return new JsonPathMatcher(matchBehaviour, throwExceptionWhenMatcherFails, stringPatterns); diff --git a/test/WireMock.Net.Tests/Serialization/MatcherMapperTests.cs b/test/WireMock.Net.Tests/Serialization/MatcherMapperTests.cs index 2ebacdf8..14dd0554 100644 --- a/test/WireMock.Net.Tests/Serialization/MatcherMapperTests.cs +++ b/test/WireMock.Net.Tests/Serialization/MatcherMapperTests.cs @@ -1,6 +1,7 @@ -using Moq; +using System; +using FluentAssertions; +using Moq; using NFluent; -using System; using WireMock.Admin.Mappings; using WireMock.Matchers; using WireMock.Serialization; @@ -26,7 +27,7 @@ namespace WireMock.Net.Tests.Serialization var model = _sut.Map((IMatcher)null); // Assert - Check.That(model).IsNull(); + model.Should().BeNull(); } [Fact] @@ -36,7 +37,7 @@ namespace WireMock.Net.Tests.Serialization var model = _sut.Map((IMatcher[])null); // Assert - Check.That(model).IsNull(); + model.Should().BeNull(); } [Fact] @@ -50,7 +51,7 @@ namespace WireMock.Net.Tests.Serialization var models = _sut.Map(new[] { matcherMock1.Object, matcherMock2.Object }); // Assert - Check.That(models).HasSize(2); + models.Should().HaveCount(2); } [Fact] @@ -65,10 +66,10 @@ namespace WireMock.Net.Tests.Serialization var model = _sut.Map(matcherMock.Object); // Assert - Check.That(model.IgnoreCase).IsNull(); - Check.That(model.Name).Equals("test"); - Check.That(model.Pattern).IsNull(); - Check.That(model.Patterns).ContainsExactly("p1", "p2"); + model.IgnoreCase.Should().BeNull(); + model.Name.Should().Be("test"); + model.Pattern.Should().BeNull(); + model.Patterns.Should().Contain("p1", "p2"); } [Fact] @@ -82,7 +83,7 @@ namespace WireMock.Net.Tests.Serialization var model = _sut.Map(matcherMock.Object); // Assert - Check.That(model.IgnoreCase).Equals(true); + model.IgnoreCase.Should().BeTrue(); } [Fact] @@ -92,7 +93,7 @@ namespace WireMock.Net.Tests.Serialization var result = _sut.Map((MatcherModel)null); // Assert - Check.That(result).IsNull(); + result.Should().BeNull(); } [Fact] @@ -119,8 +120,8 @@ namespace WireMock.Net.Tests.Serialization var matcher = (LinqMatcher)_sut.Map(model); // Assert - Check.That(matcher.MatchBehaviour).IsEqualTo(MatchBehaviour.AcceptOnMatch); - Check.That(matcher.GetPatterns()).ContainsExactly("p"); + matcher.MatchBehaviour.Should().Be(MatchBehaviour.AcceptOnMatch); + matcher.GetPatterns().Should().Contain("p"); } [Fact] @@ -137,8 +138,88 @@ namespace WireMock.Net.Tests.Serialization var matcher = (LinqMatcher)_sut.Map(model); // Assert - Check.That(matcher.MatchBehaviour).IsEqualTo(MatchBehaviour.AcceptOnMatch); - Check.That(matcher.GetPatterns()).ContainsExactly("p1", "p2"); + matcher.MatchBehaviour.Should().Be(MatchBehaviour.AcceptOnMatch); + matcher.GetPatterns().Should().Contain("p1", "p2"); + } + + [Fact] + public void MatcherMapper_Map_MatcherModel_JsonMatcher_Pattern_As_String() + { + // Assign + var pattern = "{ \"AccountIds\": [ 1, 2, 3 ] }"; + var model = new MatcherModel + { + Name = "JsonMatcher", + Pattern = pattern + }; + + // Act + var matcher = (JsonMatcher)_sut.Map(model); + + // Assert + matcher.MatchBehaviour.Should().Be(MatchBehaviour.AcceptOnMatch); + matcher.Value.Should().BeEquivalentTo(pattern); + } + + [Fact] + public void MatcherMapper_Map_MatcherModel_JsonMatcher_Patterns_As_String() + { + // Assign + var pattern1 = "{ \"AccountIds\": [ 1, 2, 3 ] }"; + var pattern2 = "{ \"X\": \"x\" }"; + var patterns = new[] { pattern1, pattern2 }; + var model = new MatcherModel + { + Name = "JsonMatcher", + Pattern = 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_Pattern_As_Object() + { + // Assign + var pattern = new { AccountIds = new[] { 1, 2, 3 } }; + var model = new MatcherModel + { + Name = "JsonMatcher", + Pattern = pattern + }; + + // Act + var matcher = (JsonMatcher)_sut.Map(model); + + // Assert + matcher.MatchBehaviour.Should().Be(MatchBehaviour.AcceptOnMatch); + matcher.Value.Should().BeEquivalentTo(pattern); + } + + [Fact] + public void MatcherMapper_Map_MatcherModel_JsonMatcher_Patterns_As_Object() + { + // Assign + object pattern1 = new { AccountIds = new[] { 1, 2, 3 } }; + object pattern2 = new { X = "x" }; + var patterns = new[] { pattern1, pattern2 }; + 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); } } } \ No newline at end of file