diff --git a/WireMock.Net Solution.sln.DotSettings b/WireMock.Net Solution.sln.DotSettings
new file mode 100644
index 00000000..3fb89f9a
--- /dev/null
+++ b/WireMock.Net Solution.sln.DotSettings
@@ -0,0 +1,3 @@
+
+ IP
+ SSL
\ No newline at end of file
diff --git a/src/WireMock.Net/Matchers/IIgnoreCaseMatcher.cs b/src/WireMock.Net/Matchers/IIgnoreCaseMatcher.cs
new file mode 100644
index 00000000..0655982c
--- /dev/null
+++ b/src/WireMock.Net/Matchers/IIgnoreCaseMatcher.cs
@@ -0,0 +1,13 @@
+namespace WireMock.Matchers
+{
+ ///
+ /// IIgnoreCaseMatcher
+ ///
+ public interface IIgnoreCaseMatcher : IMatcher
+ {
+ ///
+ /// Ignore the case.
+ ///
+ bool IgnoreCase { get; }
+ }
+}
\ No newline at end of file
diff --git a/src/WireMock.Net/Matchers/RegexMatcher.cs b/src/WireMock.Net/Matchers/RegexMatcher.cs
index 004c69d9..388a6a36 100644
--- a/src/WireMock.Net/Matchers/RegexMatcher.cs
+++ b/src/WireMock.Net/Matchers/RegexMatcher.cs
@@ -10,7 +10,7 @@ namespace WireMock.Matchers
/// Regular Expression Matcher
///
///
- public class RegexMatcher : IStringMatcher
+ public class RegexMatcher : IStringMatcher, IIgnoreCaseMatcher
{
private readonly string[] _patterns;
private readonly Regex[] _expressions;
@@ -34,6 +34,7 @@ namespace WireMock.Matchers
Check.NotNull(patterns, nameof(patterns));
_patterns = patterns;
+ IgnoreCase = ignoreCase;
RegexOptions options = RegexOptions.Compiled;
if (ignoreCase)
@@ -73,5 +74,8 @@ namespace WireMock.Matchers
{
return "RegexMatcher";
}
+
+ ///
+ public bool IgnoreCase { get; }
}
}
\ No newline at end of file
diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs
index c3cad309..2753edd5 100644
--- a/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs
+++ b/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs
@@ -104,15 +104,13 @@ namespace WireMock.Matchers.Request
{
if (requestMessage.Body != null)
{
- var stringMatcher = Matcher as IStringMatcher;
- if (stringMatcher != null)
+ if (Matcher is IStringMatcher stringMatcher)
{
return stringMatcher.IsMatch(requestMessage.Body);
}
}
- var objectMatcher = Matcher as IObjectMatcher;
- if (objectMatcher != null)
+ if (Matcher is IObjectMatcher objectMatcher)
{
if (requestMessage.BodyAsJson != null)
{
diff --git a/src/WireMock.Net/Serialization/MappingConverter.cs b/src/WireMock.Net/Serialization/MappingConverter.cs
index deb23349..088ee84e 100644
--- a/src/WireMock.Net/Serialization/MappingConverter.cs
+++ b/src/WireMock.Net/Serialization/MappingConverter.cs
@@ -147,7 +147,7 @@ namespace WireMock.Serialization
return newDictionary;
}
-
+
private static string[] Map([CanBeNull] IEnumerable> funcs)
{
diff --git a/src/WireMock.Net/Serialization/MatcherMapper.cs b/src/WireMock.Net/Serialization/MatcherMapper.cs
index 40785582..d23ca968 100644
--- a/src/WireMock.Net/Serialization/MatcherMapper.cs
+++ b/src/WireMock.Net/Serialization/MatcherMapper.cs
@@ -20,15 +20,16 @@ namespace WireMock.Serialization
return null;
}
- IStringMatcher stringMatcher = matcher as IStringMatcher;
- string[] patterns = stringMatcher != null ? stringMatcher.GetPatterns() : new string[0];
+ string[] patterns = matcher is IStringMatcher stringMatcher ? stringMatcher.GetPatterns() : new string[0];
+ bool? ignorecase = matcher is IIgnoreCaseMatcher ignoreCaseMatcher ? ignoreCaseMatcher.IgnoreCase : (bool?)null;
return new MatcherModel
{
+ IgnoreCase = ignorecase,
Name = matcher.GetName(),
Pattern = patterns.Length == 1 ? patterns.First() : null,
Patterns = patterns.Length > 1 ? patterns : null
};
}
}
-}
+}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/Matchers/JsonPathMatcherTests.cs b/test/WireMock.Net.Tests/Matchers/JsonPathMatcherTests.cs
new file mode 100644
index 00000000..f92a1bd3
--- /dev/null
+++ b/test/WireMock.Net.Tests/Matchers/JsonPathMatcherTests.cs
@@ -0,0 +1,35 @@
+using NFluent;
+using WireMock.Matchers;
+using Xunit;
+
+namespace WireMock.Net.Tests.Matchers
+{
+ public class JsonPathMatcherTests
+ {
+ [Fact]
+ public void JsonPathMatcher_GetName()
+ {
+ // Assign
+ var matcher = new JsonPathMatcher("X");
+
+ // Act
+ string name = matcher.GetName();
+
+ // Assert
+ Check.That(name).Equals("JsonPathMatcher");
+ }
+
+ [Fact]
+ public void JsonPathMatcher_GetPatterns()
+ {
+ // Assign
+ var matcher = new JsonPathMatcher("X");
+
+ // Act
+ string[] patterns = matcher.GetPatterns();
+
+ // Assert
+ Check.That(patterns).ContainsExactly("X");
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/Matchers/XPathMatcherTests.cs b/test/WireMock.Net.Tests/Matchers/XPathMatcherTests.cs
new file mode 100644
index 00000000..91eef858
--- /dev/null
+++ b/test/WireMock.Net.Tests/Matchers/XPathMatcherTests.cs
@@ -0,0 +1,35 @@
+using NFluent;
+using WireMock.Matchers;
+using Xunit;
+
+namespace WireMock.Net.Tests.Matchers
+{
+ public class XPathMatcherTests
+ {
+ [Fact]
+ public void XPathMatcher_GetName()
+ {
+ // Assign
+ var matcher = new XPathMatcher("X");
+
+ // Act
+ string name = matcher.GetName();
+
+ // Assert
+ Check.That(name).Equals("XPathMatcher");
+ }
+
+ [Fact]
+ public void XPathMatcher_GetPatterns()
+ {
+ // Assign
+ var matcher = new XPathMatcher("X");
+
+ // Act
+ string[] patterns = matcher.GetPatterns();
+
+ // Assert
+ Check.That(patterns).ContainsExactly("X");
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/Serialization/MappingConverterTests.cs b/test/WireMock.Net.Tests/Serialization/MappingConverterTests.cs
new file mode 100644
index 00000000..1a351e5b
--- /dev/null
+++ b/test/WireMock.Net.Tests/Serialization/MappingConverterTests.cs
@@ -0,0 +1,27 @@
+using System;
+using NFluent;
+using WireMock.RequestBuilders;
+using WireMock.ResponseBuilders;
+using WireMock.Serialization;
+using Xunit;
+
+namespace WireMock.Net.Tests.Serialization
+{
+ public class MappingConverterTests
+ {
+ [Fact]
+ public void MappingConverter_ToMappingModel()
+ {
+ // Assign
+ var request = Request.Create();
+ var response = Response.Create();
+ var mapping = new Mapping(Guid.NewGuid(), "", null, request, response, 0, null, null, null);
+
+ // Act
+ var model = MappingConverter.ToMappingModel(mapping);
+
+ // Assert
+ Check.That(model).IsNotNull();
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/Serialization/MatcherMapperTests.cs b/test/WireMock.Net.Tests/Serialization/MatcherMapperTests.cs
new file mode 100644
index 00000000..ae43f5d3
--- /dev/null
+++ b/test/WireMock.Net.Tests/Serialization/MatcherMapperTests.cs
@@ -0,0 +1,77 @@
+using Moq;
+using NFluent;
+using WireMock.Matchers;
+using WireMock.Serialization;
+using Xunit;
+
+namespace WireMock.Net.Tests.Serialization
+{
+ public class MatcherMapperTests
+ {
+ [Fact]
+ public void MatcherMapper_Map_IMatcher_Null()
+ {
+ // Act
+ var model = MatcherMapper.Map((IMatcher)null);
+
+ // Assert
+ Check.That(model).IsNull();
+ }
+
+ [Fact]
+ public void MatcherMapper_Map_IMatchers_Null()
+ {
+ // Act
+ var model = MatcherMapper.Map((IMatcher[])null);
+
+ // Assert
+ Check.That(model).IsNull();
+ }
+
+ [Fact]
+ public void MatcherMapper_Map_IMatchers()
+ {
+ // Assign
+ var matcherMock1 = new Mock();
+ var matcherMock2 = new Mock();
+
+ // Act
+ var models = MatcherMapper.Map(new [] { matcherMock1.Object, matcherMock2.Object });
+
+ // Assert
+ Check.That(models).HasSize(2);
+ }
+
+ [Fact]
+ public void MatcherMapper_Map_IStringMatcher()
+ {
+ // Assign
+ var matcherMock = new Mock();
+ matcherMock.Setup(m => m.GetName()).Returns("test");
+ matcherMock.Setup(m => m.GetPatterns()).Returns(new[] { "p1", "p2" });
+
+ // Act
+ var model = MatcherMapper.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");
+ }
+
+ [Fact]
+ public void MatcherMapper_Map_IIgnoreCaseMatcher()
+ {
+ // Assign
+ var matcherMock = new Mock();
+ matcherMock.Setup(m => m.IgnoreCase).Returns(true);
+
+ // Act
+ var model = MatcherMapper.Map(matcherMock.Object);
+
+ // Assert
+ Check.That(model.IgnoreCase).Equals(true);
+ }
+ }
+}
\ No newline at end of file