mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-04-27 18:57:00 +02:00
Fix #100
This commit is contained in:
@@ -1,3 +1,10 @@
|
|||||||
|
# 1.0.3.12 (24 March 2018)
|
||||||
|
|
||||||
|
- [#100](https://github.com/WireMock-Net/WireMock.Net/issues/100) - Issue: JsonPathMatcher - not working for rootless jsons?
|
||||||
|
|
||||||
|
Commits: ...
|
||||||
|
|
||||||
|
|
||||||
# 1.0.3.11 (20 March 2018)
|
# 1.0.3.11 (20 March 2018)
|
||||||
|
|
||||||
- [#110](https://github.com/WireMock-Net/WireMock.Net/issues/110) - Fix: remove `Func[]` from MappingModel
|
- [#110](https://github.com/WireMock-Net/WireMock.Net/issues/110) - Fix: remove `Func[]` from MappingModel
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Description>Lightweight StandAlone Http Mocking Server for .Net.</Description>
|
<Description>Lightweight StandAlone Http Mocking Server for .Net.</Description>
|
||||||
<AssemblyTitle>WireMock.Net.StandAlone</AssemblyTitle>
|
<AssemblyTitle>WireMock.Net.StandAlone</AssemblyTitle>
|
||||||
<Version>1.0.3.11</Version>
|
<Version>1.0.3.12</Version>
|
||||||
<Authors>Stef Heyenrath</Authors>
|
<Authors>Stef Heyenrath</Authors>
|
||||||
<TargetFrameworks>net452;net46;netstandard1.3;netstandard2.0</TargetFrameworks>
|
<TargetFrameworks>net452;net46;netstandard1.3;netstandard2.0</TargetFrameworks>
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
|
|||||||
@@ -7,12 +7,11 @@ using WireMock.Validation;
|
|||||||
namespace WireMock.Matchers
|
namespace WireMock.Matchers
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// JSONPathMatcher
|
/// JsonPathMatcher
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <seealso cref="IMatcher" />
|
/// <seealso cref="IMatcher" />
|
||||||
public class JsonPathMatcher : IStringMatcher, IObjectMatcher
|
public class JsonPathMatcher : IStringMatcher, IObjectMatcher
|
||||||
{
|
{
|
||||||
// private readonly object _jsonPattern;
|
|
||||||
private readonly string[] _patterns;
|
private readonly string[] _patterns;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -26,13 +25,6 @@ namespace WireMock.Matchers
|
|||||||
_patterns = patterns;
|
_patterns = patterns;
|
||||||
}
|
}
|
||||||
|
|
||||||
//public JsonPathMatcher([NotNull] object jsonPattern)
|
|
||||||
//{
|
|
||||||
// Check.NotNull(jsonPattern, nameof(jsonPattern));
|
|
||||||
|
|
||||||
// _jsonPattern = jsonPattern;
|
|
||||||
//}
|
|
||||||
|
|
||||||
/// <inheritdoc cref="IStringMatcher.IsMatch"/>
|
/// <inheritdoc cref="IStringMatcher.IsMatch"/>
|
||||||
public double IsMatch(string input)
|
public double IsMatch(string input)
|
||||||
{
|
{
|
||||||
@@ -43,9 +35,8 @@ namespace WireMock.Matchers
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
JObject o = JObject.Parse(input);
|
var jtoken = JToken.Parse(input);
|
||||||
|
return IsMatch(jtoken);
|
||||||
return MatchScores.ToScore(_patterns.Select(p => o.SelectToken(p) != null));
|
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
@@ -63,9 +54,9 @@ namespace WireMock.Matchers
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var o = input as JObject ?? JObject.FromObject(input);
|
// Check if JToken or object
|
||||||
|
JToken jtoken = input is JToken token ? token : JObject.FromObject(input);
|
||||||
return MatchScores.ToScore(_patterns.Select(p => o.SelectToken(p) != null));
|
return IsMatch(jtoken);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
@@ -84,5 +75,13 @@ namespace WireMock.Matchers
|
|||||||
{
|
{
|
||||||
return "JsonPathMatcher";
|
return "JsonPathMatcher";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private double IsMatch(JToken jtoken)
|
||||||
|
{
|
||||||
|
// Wrap in array if needed
|
||||||
|
JToken jarray = jtoken is JArray ? jtoken : new JArray(jtoken);
|
||||||
|
|
||||||
|
return MatchScores.ToScore(_patterns.Select(pattern => jarray.SelectToken(pattern) != null));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using NFluent;
|
using Newtonsoft.Json.Linq;
|
||||||
|
using NFluent;
|
||||||
using WireMock.Matchers;
|
using WireMock.Matchers;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
@@ -31,5 +32,104 @@ namespace WireMock.Net.Tests.Matchers
|
|||||||
// Assert
|
// Assert
|
||||||
Check.That(patterns).ContainsExactly("X");
|
Check.That(patterns).ContainsExactly("X");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void JsonPathMatcher_IsMatch_NullString()
|
||||||
|
{
|
||||||
|
// Assign
|
||||||
|
string s = null;
|
||||||
|
var matcher = new JsonPathMatcher("");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
double match = matcher.IsMatch(s);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Check.That(match).IsEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void JsonPathMatcher_IsMatch_NullObject()
|
||||||
|
{
|
||||||
|
// Assign
|
||||||
|
object o = null;
|
||||||
|
var matcher = new JsonPathMatcher("");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
double match = matcher.IsMatch(o);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Check.That(match).IsEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void JsonPathMatcher_IsMatch_String_Exception_Mismatch()
|
||||||
|
{
|
||||||
|
// Assign
|
||||||
|
var matcher = new JsonPathMatcher("xxx");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
double match = matcher.IsMatch("");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Check.That(match).IsEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void JsonPathMatcher_IsMatch_Object_Exception_Mismatch()
|
||||||
|
{
|
||||||
|
// Assign
|
||||||
|
var matcher = new JsonPathMatcher("xxx");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
double match = matcher.IsMatch("");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Check.That(match).IsEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void JsonPathMatcher_IsMatch_AnonymousObject()
|
||||||
|
{
|
||||||
|
// Assign
|
||||||
|
var matcher = new JsonPathMatcher("$..[?(@.Id == 1)]");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
double match = matcher.IsMatch(new { Id = 1, Name = "Test" });
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Check.That(match).IsEqualTo(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void JsonPathMatcher_IsMatch_JObject()
|
||||||
|
{
|
||||||
|
// Assign
|
||||||
|
string[] patterns = { "$..[?(@.Id == 1)]" };
|
||||||
|
var matcher = new JsonPathMatcher(patterns);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var jobject = new JObject
|
||||||
|
{
|
||||||
|
{ "Id", new JValue(1) },
|
||||||
|
{ "Name", new JValue("Test") }
|
||||||
|
};
|
||||||
|
double match = matcher.IsMatch(jobject);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Check.That(match).IsEqualTo(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void JsonPathMatcher_IsMatch_JObject_Parsed()
|
||||||
|
{
|
||||||
|
// Assign
|
||||||
|
var matcher = new JsonPathMatcher("$..[?(@.Id == 1)]");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
double match = matcher.IsMatch(JObject.Parse("{\"Id\":1,\"Name\":\"Test\"}"));
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Check.That(match).IsEqualTo(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,7 +147,7 @@ namespace WireMock.Net.Tests
|
|||||||
public void Request_WithBodyJsonPathMatcher_true()
|
public void Request_WithBodyJsonPathMatcher_true()
|
||||||
{
|
{
|
||||||
// given
|
// given
|
||||||
var spec = Request.Create().UsingAnyVerb().WithBody(new JsonPathMatcher("$.things[?(@.name == 'RequiredThing')]"));
|
var spec = Request.Create().UsingAnyVerb().WithBody(new JsonPathMatcher("$..things[?(@.name == 'RequiredThing')]"));
|
||||||
|
|
||||||
// when
|
// when
|
||||||
string bodyAsString = "{ \"things\": [ { \"name\": \"RequiredThing\" }, { \"name\": \"Wiremock\" } ] }";
|
string bodyAsString = "{ \"things\": [ { \"name\": \"RequiredThing\" }, { \"name\": \"Wiremock\" } ] }";
|
||||||
@@ -179,7 +179,7 @@ namespace WireMock.Net.Tests
|
|||||||
public void Request_WithBodyAsJson_Object_JsonPathMatcher_true()
|
public void Request_WithBodyAsJson_Object_JsonPathMatcher_true()
|
||||||
{
|
{
|
||||||
// given
|
// given
|
||||||
var spec = Request.Create().UsingAnyVerb().WithBody(new JsonPathMatcher("$.things[?(@.name == 'RequiredThing')]"));
|
var spec = Request.Create().UsingAnyVerb().WithBody(new JsonPathMatcher("$..things[?(@.name == 'RequiredThing')]"));
|
||||||
|
|
||||||
// when
|
// when
|
||||||
string jsonString = "{ \"things\": [ { \"name\": \"RequiredThing\" }, { \"name\": \"Wiremock\" } ] }";
|
string jsonString = "{ \"things\": [ { \"name\": \"RequiredThing\" }, { \"name\": \"Wiremock\" } ] }";
|
||||||
@@ -199,7 +199,7 @@ namespace WireMock.Net.Tests
|
|||||||
public void Request_WithBodyAsJson_Array_JsonPathMatcher_1()
|
public void Request_WithBodyAsJson_Array_JsonPathMatcher_1()
|
||||||
{
|
{
|
||||||
// given
|
// given
|
||||||
var spec = Request.Create().UsingAnyVerb().WithBody(new JsonPathMatcher("$.books[?(@.price < 10)]"));
|
var spec = Request.Create().UsingAnyVerb().WithBody(new JsonPathMatcher("$..books[?(@.price < 10)]"));
|
||||||
|
|
||||||
// when
|
// when
|
||||||
string jsonString = "{ \"books\": [ { \"category\": \"test1\", \"price\": 8.95 }, { \"category\": \"test2\", \"price\": 20 } ] }";
|
string jsonString = "{ \"books\": [ { \"category\": \"test1\", \"price\": 8.95 }, { \"category\": \"test2\", \"price\": 20 } ] }";
|
||||||
|
|||||||
Reference in New Issue
Block a user