From 15500a812c872878fb10f672d00687c47151e203 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Wed, 14 Mar 2018 21:24:20 +0100 Subject: [PATCH] Add some more tests --- WireMock.Net Solution.sln.DotSettings | 3 + .../Matchers/IIgnoreCaseMatcher.cs | 13 ++++ src/WireMock.Net/Matchers/RegexMatcher.cs | 6 +- .../Request/RequestMessageBodyMatcher.cs | 6 +- .../Serialization/MappingConverter.cs | 2 +- .../Serialization/MatcherMapper.cs | 7 +- .../Matchers/JsonPathMatcherTests.cs | 35 +++++++++ .../Matchers/XPathMatcherTests.cs | 35 +++++++++ .../Serialization/MappingConverterTests.cs | 27 +++++++ .../Serialization/MatcherMapperTests.cs | 77 +++++++++++++++++++ 10 files changed, 202 insertions(+), 9 deletions(-) create mode 100644 WireMock.Net Solution.sln.DotSettings create mode 100644 src/WireMock.Net/Matchers/IIgnoreCaseMatcher.cs create mode 100644 test/WireMock.Net.Tests/Matchers/JsonPathMatcherTests.cs create mode 100644 test/WireMock.Net.Tests/Matchers/XPathMatcherTests.cs create mode 100644 test/WireMock.Net.Tests/Serialization/MappingConverterTests.cs create mode 100644 test/WireMock.Net.Tests/Serialization/MatcherMapperTests.cs 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