Skip to content

Commit 511540a

Browse files
authored
Make WireMockAssertions extendable (#1082)
1 parent 5b60991 commit 511540a

File tree

9 files changed

+215
-140
lines changed

9 files changed

+215
-140
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#pragma warning disable CS1591
2+
using System;
3+
4+
// ReSharper disable once CheckNamespace
5+
namespace WireMock.FluentAssertions;
6+
7+
public partial class WireMockAssertions
8+
{
9+
[CustomAssertion]
10+
public AndWhichConstraint<WireMockAssertions, string> AtAbsoluteUrl(string absoluteUrl, string because = "", params object[] becauseArgs)
11+
{
12+
var (filter, condition) = BuildFilterAndCondition(request => string.Equals(request.AbsoluteUrl, absoluteUrl, StringComparison.OrdinalIgnoreCase));
13+
14+
Execute.Assertion
15+
.BecauseOf(because, becauseArgs)
16+
.Given(() => RequestMessages)
17+
.ForCondition(requests => CallsCount == 0 || requests.Any())
18+
.FailWith(
19+
"Expected {context:wiremockserver} to have been called at address matching the absolute url {0}{reason}, but no calls were made.",
20+
absoluteUrl
21+
)
22+
.Then
23+
.ForCondition(condition)
24+
.FailWith(
25+
"Expected {context:wiremockserver} to have been called at address matching the absolute url {0}{reason}, but didn't find it among the calls to {1}.",
26+
_ => absoluteUrl,
27+
requests => requests.Select(request => request.AbsoluteUrl)
28+
);
29+
30+
FilterRequestMessages(filter);
31+
32+
return new AndWhichConstraint<WireMockAssertions, string>(this, absoluteUrl);
33+
}
34+
35+
[CustomAssertion]
36+
public AndWhichConstraint<WireMockAssertions, string> AtUrl(string url, string because = "", params object[] becauseArgs)
37+
{
38+
var (filter, condition) = BuildFilterAndCondition(request => string.Equals(request.Url, url, StringComparison.OrdinalIgnoreCase));
39+
40+
Execute.Assertion
41+
.BecauseOf(because, becauseArgs)
42+
.Given(() => RequestMessages)
43+
.ForCondition(requests => CallsCount == 0 || requests.Any())
44+
.FailWith(
45+
"Expected {context:wiremockserver} to have been called at address matching the url {0}{reason}, but no calls were made.",
46+
url
47+
)
48+
.Then
49+
.ForCondition(condition)
50+
.FailWith(
51+
"Expected {context:wiremockserver} to have been called at address matching the url {0}{reason}, but didn't find it among the calls to {1}.",
52+
_ => url,
53+
requests => requests.Select(request => request.Url)
54+
);
55+
56+
FilterRequestMessages(filter);
57+
58+
return new AndWhichConstraint<WireMockAssertions, string>(this, url);
59+
}
60+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#pragma warning disable CS1591
2+
using System;
3+
4+
// ReSharper disable once CheckNamespace
5+
namespace WireMock.FluentAssertions;
6+
7+
public partial class WireMockAssertions
8+
{
9+
[CustomAssertion]
10+
public AndWhichConstraint<WireMockAssertions, string> FromClientIP(string clientIP, string because = "", params object[] becauseArgs)
11+
{
12+
var (filter, condition) = BuildFilterAndCondition(request => string.Equals(request.ClientIP, clientIP, StringComparison.OrdinalIgnoreCase));
13+
14+
Execute.Assertion
15+
.BecauseOf(because, becauseArgs)
16+
.Given(() => RequestMessages)
17+
.ForCondition(requests => CallsCount == 0 || requests.Any())
18+
.FailWith(
19+
"Expected {context:wiremockserver} to have been called from client IP {0}{reason}, but no calls were made.",
20+
clientIP
21+
)
22+
.Then
23+
.ForCondition(condition)
24+
.FailWith(
25+
"Expected {context:wiremockserver} to have been called from client IP {0}{reason}, but didn't find it among the calls from IP(s) {1}.",
26+
_ => clientIP, requests => requests.Select(request => request.ClientIP)
27+
);
28+
29+
FilterRequestMessages(filter);
30+
31+
return new AndWhichConstraint<WireMockAssertions, string>(this, clientIP);
32+
}
33+
}

src/WireMock.Net.FluentAssertions/Assertions/WireMockAssertions.UsingMethod.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ public AndConstraint<WireMockAssertions> UsingMethod(string method, string becau
5858

5959
Execute.Assertion
6060
.BecauseOf(because, becauseArgs)
61-
.Given(() => _requestMessages)
62-
.ForCondition(requests => _callsCount == 0 || requests.Any())
61+
.Given(() => RequestMessages)
62+
.ForCondition(requests => CallsCount == 0 || requests.Any())
6363
.FailWith(
6464
"Expected {context:wiremockserver} to have been called using method {0}{reason}, but no calls were made.",
6565
method
@@ -72,7 +72,7 @@ public AndConstraint<WireMockAssertions> UsingMethod(string method, string becau
7272
requests => requests.Select(request => request.Method)
7373
);
7474

75-
_requestMessages = filter(_requestMessages).ToList();
75+
FilterRequestMessages(filter);
7676

7777
return new AndConstraint<WireMockAssertions>(this);
7878
}

src/WireMock.Net.FluentAssertions/Assertions/WireMockAssertions.WithBody.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ private AndConstraint<WireMockAssertions> ExecuteAssertionWithBodyStringMatcher(
7070
{
7171
Execute.Assertion
7272
.BecauseOf(because, becauseArgs)
73-
.Given(() => _requestMessages)
74-
.ForCondition(requests => _callsCount == 0 || requests.Any())
73+
.Given(() => RequestMessages)
74+
.ForCondition(requests => CallsCount == 0 || requests.Any())
7575
.FailWith(
7676
MessageFormatNoCalls,
7777
matcher.GetPatterns()
@@ -84,7 +84,7 @@ private AndConstraint<WireMockAssertions> ExecuteAssertionWithBodyStringMatcher(
8484
requests => requests.Select(expression)
8585
);
8686

87-
_requestMessages = filter(_requestMessages).ToList();
87+
FilterRequestMessages(filter);
8888

8989
return new AndConstraint<WireMockAssertions>(this);
9090
}
@@ -100,8 +100,8 @@ private AndConstraint<WireMockAssertions> ExecuteAssertionWithBodyAsIObjectMatch
100100
{
101101
Execute.Assertion
102102
.BecauseOf(because, becauseArgs)
103-
.Given(() => _requestMessages)
104-
.ForCondition(requests => _callsCount == 0 || requests.Any())
103+
.Given(() => RequestMessages)
104+
.ForCondition(requests => CallsCount == 0 || requests.Any())
105105
.FailWith(
106106
MessageFormatNoCalls,
107107
matcher.Value
@@ -114,7 +114,7 @@ private AndConstraint<WireMockAssertions> ExecuteAssertionWithBodyAsIObjectMatch
114114
requests => requests.Select(expression)
115115
);
116116

117-
_requestMessages = filter(_requestMessages).ToList();
117+
FilterRequestMessages(filter);
118118

119119
return new AndConstraint<WireMockAssertions>(this);
120120
}
@@ -130,8 +130,8 @@ private AndConstraint<WireMockAssertions> ExecuteAssertionWithBodyAsBytesExactOb
130130
{
131131
Execute.Assertion
132132
.BecauseOf(because, becauseArgs)
133-
.Given(() => _requestMessages)
134-
.ForCondition(requests => _callsCount == 0 || requests.Any())
133+
.Given(() => RequestMessages)
134+
.ForCondition(requests => CallsCount == 0 || requests.Any())
135135
.FailWith(
136136
MessageFormatNoCalls,
137137
matcher.Value
@@ -144,7 +144,7 @@ private AndConstraint<WireMockAssertions> ExecuteAssertionWithBodyAsBytesExactOb
144144
requests => requests.Select(expression)
145145
);
146146

147-
_requestMessages = filter(_requestMessages).ToList();
147+
FilterRequestMessages(filter);
148148

149149
return new AndConstraint<WireMockAssertions>(this);
150150
}

src/WireMock.Net.FluentAssertions/Assertions/WireMockAssertions.WithHeader.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace WireMock.FluentAssertions;
88
public partial class WireMockAssertions
99
{
1010
[CustomAssertion]
11-
public AndConstraint<WireMockAssertions> WitHeaderKey(string expectedKey, string because = "", params object[] becauseArgs)
11+
public AndWhichConstraint<WireMockAssertions, string> WitHeaderKey(string expectedKey, string because = "", params object[] becauseArgs)
1212
{
1313
var (filter, condition) = BuildFilterAndCondition(request =>
1414
{
@@ -17,8 +17,8 @@ public AndConstraint<WireMockAssertions> WitHeaderKey(string expectedKey, string
1717

1818
Execute.Assertion
1919
.BecauseOf(because, becauseArgs)
20-
.Given(() => _requestMessages)
21-
.ForCondition(requests => _callsCount == 0 || requests.Any())
20+
.Given(() => RequestMessages)
21+
.ForCondition(requests => CallsCount == 0 || requests.Any())
2222
.FailWith(
2323
"Expected {context:wiremockserver} to have been called with Header {0}{reason}.",
2424
expectedKey
@@ -31,9 +31,9 @@ public AndConstraint<WireMockAssertions> WitHeaderKey(string expectedKey, string
3131
requests => requests.Select(request => request.Headers)
3232
);
3333

34-
_requestMessages = filter(_requestMessages).ToList();
34+
FilterRequestMessages(filter);
3535

36-
return new AndConstraint<WireMockAssertions>(this);
36+
return new AndWhichConstraint<WireMockAssertions, string>(this, expectedKey);
3737
}
3838

3939
[CustomAssertion]
@@ -60,8 +60,8 @@ public AndConstraint<WireMockAssertions> WithHeader(string expectedKey, string[]
6060

6161
Execute.Assertion
6262
.BecauseOf(because, becauseArgs)
63-
.Given(() => _requestMessages)
64-
.ForCondition(requests => _callsCount == 0 || requests.Any())
63+
.Given(() => RequestMessages)
64+
.ForCondition(requests => CallsCount == 0 || requests.Any())
6565
.FailWith(
6666
"Expected {context:wiremockserver} to have been called with Header {0} and Values {1}{reason}.",
6767
expectedKey,
@@ -76,7 +76,7 @@ public AndConstraint<WireMockAssertions> WithHeader(string expectedKey, string[]
7676
requests => requests.Select(request => request.Headers)
7777
);
7878

79-
_requestMessages = filter(_requestMessages).ToList();
79+
FilterRequestMessages(filter);
8080

8181
return new AndConstraint<WireMockAssertions>(this);
8282
}
@@ -91,8 +91,8 @@ public AndConstraint<WireMockAssertions> WithoutHeaderKey(string unexpectedKey,
9191

9292
Execute.Assertion
9393
.BecauseOf(because, becauseArgs)
94-
.Given(() => _requestMessages)
95-
.ForCondition(requests => _callsCount == 0 || requests.Any())
94+
.Given(() => RequestMessages)
95+
.ForCondition(requests => CallsCount == 0 || requests.Any())
9696
.FailWith(
9797
"Expected {context:wiremockserver} not to have been called with Header {0}{reason}.",
9898
unexpectedKey
@@ -105,7 +105,7 @@ public AndConstraint<WireMockAssertions> WithoutHeaderKey(string unexpectedKey,
105105
requests => requests.Select(request => request.Headers)
106106
);
107107

108-
_requestMessages = filter(_requestMessages).ToList();
108+
FilterRequestMessages(filter);
109109

110110
return new AndConstraint<WireMockAssertions>(this);
111111
}
@@ -134,8 +134,8 @@ public AndConstraint<WireMockAssertions> WithoutHeader(string unexpectedKey, str
134134

135135
Execute.Assertion
136136
.BecauseOf(because, becauseArgs)
137-
.Given(() => _requestMessages)
138-
.ForCondition(requests => _callsCount == 0 || requests.Any())
137+
.Given(() => RequestMessages)
138+
.ForCondition(requests => CallsCount == 0 || requests.Any())
139139
.FailWith(
140140
"Expected {context:wiremockserver} not to have been called with Header {0} and Values {1}{reason}.",
141141
unexpectedKey,
@@ -150,7 +150,7 @@ public AndConstraint<WireMockAssertions> WithoutHeader(string unexpectedKey, str
150150
requests => requests.Select(request => request.Headers)
151151
);
152152

153-
_requestMessages = filter(_requestMessages).ToList();
153+
FilterRequestMessages(filter);
154154

155155
return new AndConstraint<WireMockAssertions>(this);
156156
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#pragma warning disable CS1591
2+
using System;
3+
4+
// ReSharper disable once CheckNamespace
5+
namespace WireMock.FluentAssertions;
6+
7+
public partial class WireMockAssertions
8+
{
9+
[CustomAssertion]
10+
public AndWhichConstraint<WireMockAssertions, string> WithProxyUrl(string proxyUrl, string because = "", params object[] becauseArgs)
11+
{
12+
var (filter, condition) = BuildFilterAndCondition(request => string.Equals(request.ProxyUrl, proxyUrl, StringComparison.OrdinalIgnoreCase));
13+
14+
Execute.Assertion
15+
.BecauseOf(because, becauseArgs)
16+
.Given(() => RequestMessages)
17+
.ForCondition(requests => CallsCount == 0 || requests.Any())
18+
.FailWith(
19+
"Expected {context:wiremockserver} to have been called with proxy url {0}{reason}, but no calls were made.",
20+
proxyUrl
21+
)
22+
.Then
23+
.ForCondition(condition)
24+
.FailWith(
25+
"Expected {context:wiremockserver} to have been called with proxy url {0}{reason}, but didn't find it among the calls with {1}.",
26+
_ => proxyUrl,
27+
requests => requests.Select(request => request.ProxyUrl)
28+
);
29+
30+
FilterRequestMessages(filter);
31+
32+
return new AndWhichConstraint<WireMockAssertions, string>(this, proxyUrl);
33+
}
34+
}

0 commit comments

Comments
 (0)