Skip to content

Commit bea35ed

Browse files
committed
Switch default fallback to a text-based match report
This is a behavior-breaking change as previously match failures returns a NotFound / 404 result, but now the default behavior throws an exception. The previous behavior can be reverted by using `mockHandler.Fallback.RespondMatchSummary`
1 parent a612fc1 commit bea35ed

32 files changed

+1185
-34
lines changed

RichardSzalay.MockHttp.Tests/Matchers/AnyMatcherTests.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using RichardSzalay.MockHttp.Matchers;
2+
using System;
23
using System.Linq;
34
using Xunit;
45

@@ -30,6 +31,23 @@ public void Fails_if_all_matchers_fail()
3031
Assert.False(result);
3132
}
3233

34+
35+
[Fact]
36+
public void ToString_describes_matcher()
37+
{
38+
var sut = new AnyMatcher(new[]
39+
{
40+
new FakeMatcher(true),
41+
new FakeMatcher(false)
42+
});
43+
44+
var result = sut.ToString();
45+
var expected = $"matches any one of matches fake True{Environment.NewLine}" +
46+
$" OR matches fake False{Environment.NewLine}";
47+
48+
Assert.Equal(expected, result);
49+
}
50+
3351
public bool Test(params bool[] matcherResults)
3452
{
3553
var matchers = matcherResults
@@ -50,5 +68,8 @@ public bool Matches(System.Net.Http.HttpRequestMessage message)
5068
{
5169
return _result;
5270
}
71+
72+
public override string ToString()
73+
=> $"matches fake {_result}";
5374
}
5475
}

RichardSzalay.MockHttp.Tests/Matchers/ContentMatcherTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using RichardSzalay.MockHttp.Matchers;
2+
using System;
23
using System.Net.Http;
34
using Xunit;
45

@@ -28,6 +29,16 @@ public void Fails_on_unmatched_content()
2829
Assert.False(result);
2930
}
3031

32+
[Fact]
33+
public void ToString_describes_matcher()
34+
{
35+
var sut = new ContentMatcher("test");
36+
37+
var result = sut.ToString();
38+
39+
Assert.Equal("request body matches test", result);
40+
}
41+
3142
private bool Test(string expected, string actual)
3243
{
3344
var request = new HttpRequestMessage(HttpMethod.Get,

RichardSzalay.MockHttp.Tests/Matchers/CustomMatcherTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ public void Should_fail_when_handler_fails()
2323
Assert.False(result);
2424
}
2525

26+
[Fact]
27+
public void ToString_describes_matcher()
28+
{
29+
var sut = new CustomMatcher(_ => true);
30+
31+
var result = sut.ToString();
32+
33+
Assert.Equal("request matches a custom predicate", result);
34+
}
35+
2636
private bool Test(Func<HttpRequestMessage, bool> handler)
2737
{
2838
var sut = new CustomMatcher(handler);

RichardSzalay.MockHttp.Tests/Matchers/FormDataMatcherTests.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,4 +217,24 @@ private bool Test(string expected, HttpContent actual)
217217
"http://tempuri.org/home")
218218
{ Content = actual });
219219
}
220+
221+
[Fact]
222+
public void ToString_describes_partial_matcher()
223+
{
224+
var sut = new FormDataMatcher("key=Value+with%20spaces&b=2", exact: false);
225+
226+
var result = sut.ToString();
227+
228+
Assert.Equal("form data matches key=Value%20with%20spaces&b=2", result);
229+
}
230+
231+
[Fact]
232+
public void ToString_describes_exact_matcher()
233+
{
234+
var sut = new FormDataMatcher("key=Value+with%20spaces&b=2", exact: true);
235+
236+
var result = sut.ToString();
237+
238+
Assert.Equal("form data exacly matches (no additional keys allowed) key=Value%20with%20spaces&b=2", result);
239+
}
220240
}

RichardSzalay.MockHttp.Tests/Matchers/HeadersMatcherTests.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,17 @@ private bool Test(HeadersMatcher expected, Action<HttpRequestMessage> actual)
5959
return expected.Matches(request);
6060
}
6161

62+
[Fact]
63+
public void ToString_describes_matcher()
64+
{
65+
var sut = new HeadersMatcher(@"Accept: application/json
66+
Authorization: Basic abcdef");
67+
68+
var result = sut.ToString();
69+
70+
Assert.Equal($"headers match {Environment.NewLine}" +
71+
$" Accept: application/json{Environment.NewLine}" +
72+
$" Authorization: Basic abcdef{Environment.NewLine}", result);
73+
}
74+
6275
}

RichardSzalay.MockHttp.Tests/Matchers/JsonContentMatcherTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,14 @@ private bool Test(Func<JsonContent, bool> expected, JsonContent actual)
4646
}
4747

4848
public record JsonContent(bool Value);
49+
50+
[Fact]
51+
public void ToString_describes_matcher()
52+
{
53+
var sut = new JsonContentMatcher<JsonContent>(x => true);
54+
55+
var result = sut.ToString();
56+
57+
Assert.Equal("JSON request body matches custom JsonContent predicate", result);
58+
}
4959
}

RichardSzalay.MockHttp.Tests/Matchers/MethodMatcherTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,14 @@ private bool Test(HttpMethod expected, HttpMethod actual)
3535
return sut.Matches(new HttpRequestMessage(actual,
3636
"http://tempuri.org/home"));
3737
}
38+
39+
[Fact]
40+
public void ToString_describes_matcher()
41+
{
42+
var sut = new MethodMatcher(HttpMethod.Get);
43+
44+
var result = sut.ToString();
45+
46+
Assert.Equal("method matches GET", result);
47+
}
3848
}

RichardSzalay.MockHttp.Tests/Matchers/PartialContentMatcherTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,14 @@ private bool Test(string expected, string actual)
3737

3838
return new PartialContentMatcher(expected).Matches(request);
3939
}
40+
41+
[Fact]
42+
public void ToString_describes_matcher()
43+
{
44+
var sut = new PartialContentMatcher("test");
45+
46+
var result = sut.ToString();
47+
48+
Assert.Equal("request body partially matches test", result);
49+
}
4050
}

RichardSzalay.MockHttp.Tests/Matchers/QueryStringMatcherTests.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,24 @@ private bool Test(string expected, string actual, bool exact = false)
118118
return sut.Matches(new HttpRequestMessage(HttpMethod.Get,
119119
"http://tempuri.org/home?" + actual));
120120
}
121+
122+
[Fact]
123+
public void ToString_describes_partial_matcher()
124+
{
125+
var sut = new QueryStringMatcher("key=Value+with%20spaces&b=2", exact: false);
126+
127+
var result = sut.ToString();
128+
129+
Assert.Equal("query string matches key=Value%20with%20spaces&b=2", result);
130+
}
131+
132+
[Fact]
133+
public void ToString_describes_exact_matcher()
134+
{
135+
var sut = new QueryStringMatcher("key=Value+with%20spaces&b=2", exact: true);
136+
137+
var result = sut.ToString();
138+
139+
Assert.Equal("query string exacly matches (no additional keys allowed) key=Value%20with%20spaces&b=2", result);
140+
}
121141
}

RichardSzalay.MockHttp.Tests/Matchers/UrlMatcherTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,14 @@ private HttpRequestMessage Request(string url)
148148
{
149149
return new HttpRequestMessage(HttpMethod.Get, url);
150150
}
151+
152+
[Fact]
153+
public void ToString_describes_matcher()
154+
{
155+
var sut = new UrlMatcher("http://tempuri.org/");
156+
157+
var result = sut.ToString();
158+
159+
Assert.Equal("URL matches http://tempuri.org/", result);
160+
}
151161
}

0 commit comments

Comments
 (0)