Skip to content

Commit

Permalink
Fix reading JsonMatcher-mapping with object as pattern (#505)
Browse files Browse the repository at this point in the history
* Fix reading mapping with object pattern for JsonMatcher

* .

* .
  • Loading branch information
StefH authored Oct 14, 2020
1 parent 477f3b5 commit c02dbeb
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 17 deletions.
5 changes: 3 additions & 2 deletions src/WireMock.Net/Serialization/MatcherMapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public IMatcher Map([CanBeNull] MatcherModel matcher)
string matcherName = parts[0];
string matcherType = parts.Length > 1 ? parts[1] : null;

string[] stringPatterns = matcher.Patterns != null ? matcher.Patterns.OfType<string>().ToArray() : new[] { matcher.Pattern as string };
string[] stringPatterns = (matcher.Patterns != null ? matcher.Patterns : new[] { matcher.Pattern }).OfType<string>().ToArray();
MatchBehaviour matchBehaviour = matcher.RejectOnMatch == true ? MatchBehaviour.RejectOnMatch : MatchBehaviour.AcceptOnMatch;
bool ignoreCase = matcher.IgnoreCase == true;
bool throwExceptionWhenMatcherFails = _settings.ThrowExceptionWhenMatcherFails == true;
Expand Down Expand Up @@ -64,7 +64,8 @@ public IMatcher Map([CanBeNull] MatcherModel matcher)
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);
Expand Down
111 changes: 96 additions & 15 deletions test/WireMock.Net.Tests/Serialization/MatcherMapperTests.cs
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -26,7 +27,7 @@ public void MatcherMapper_Map_IMatcher_Null()
var model = _sut.Map((IMatcher)null);

// Assert
Check.That(model).IsNull();
model.Should().BeNull();
}

[Fact]
Expand All @@ -36,7 +37,7 @@ public void MatcherMapper_Map_IMatchers_Null()
var model = _sut.Map((IMatcher[])null);

// Assert
Check.That(model).IsNull();
model.Should().BeNull();
}

[Fact]
Expand All @@ -50,7 +51,7 @@ public void MatcherMapper_Map_IMatchers()
var models = _sut.Map(new[] { matcherMock1.Object, matcherMock2.Object });

// Assert
Check.That(models).HasSize(2);
models.Should().HaveCount(2);
}

[Fact]
Expand All @@ -65,10 +66,10 @@ public void MatcherMapper_Map_IStringMatcher()
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]
Expand All @@ -82,7 +83,7 @@ public void MatcherMapper_Map_IIgnoreCaseMatcher()
var model = _sut.Map(matcherMock.Object);

// Assert
Check.That(model.IgnoreCase).Equals(true);
model.IgnoreCase.Should().BeTrue();
}

[Fact]
Expand All @@ -92,7 +93,7 @@ public void MatcherMapper_Map_MatcherModel_Null()
var result = _sut.Map((MatcherModel)null);

// Assert
Check.That(result).IsNull();
result.Should().BeNull();
}

[Fact]
Expand All @@ -119,8 +120,8 @@ public void MatcherMapper_Map_MatcherModel_LinqMatcher_Pattern()
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]
Expand All @@ -137,8 +138,88 @@ public void MatcherMapper_Map_MatcherModel_LinqMatcher_Patterns()
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);
}
}
}

0 comments on commit c02dbeb

Please sign in to comment.