Skip to content

Commit b1cf4df

Browse files
committed
First part of httprequestmessagepattern
1 parent 7d12ab4 commit b1cf4df

File tree

3 files changed

+81
-2
lines changed

3 files changed

+81
-2
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
namespace TestableHttpClient.Utils;
2+
3+
internal class HttpRequestMessagePatternMatcher
4+
{
5+
private readonly HttpRequestMessagePatternMatchingOptions options = new();
6+
public HttpRequestMessagePatternMatchResult Match(IEnumerable<HttpRequestMessage> requests, HttpRequestMessagePattern pattern)
7+
{
8+
HttpRequestMessagePatternMatchResult result = new();
9+
10+
foreach (HttpRequestMessage request in requests)
11+
{
12+
HttpRequestMessagePatternMatchingResult match = pattern.Matches(request, options);
13+
if (match.All)
14+
{
15+
result.MatchedRequests.Add(request);
16+
}
17+
else
18+
{
19+
result.UnmatchedRequests.Add(request);
20+
}
21+
}
22+
return result;
23+
}
24+
}
25+
26+
internal class HttpRequestMessagePatternMatchResult
27+
{
28+
public List<HttpRequestMessage> MatchedRequests { get; } = new List<HttpRequestMessage>();
29+
public List<HttpRequestMessage> UnmatchedRequests { get; } = new List<HttpRequestMessage>();
30+
}

test/TestableHttpClient.Tests/TestableHttpClient.Tests.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net462;net47;net48;net8.0;net9.0</TargetFrameworks>
4+
<TargetFrameworks>net462;net47;net48;net6.0;net8.0;net9.0</TargetFrameworks>
55
</PropertyGroup>
66

77
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework'">
8-
<PackageReference Include="System.Net.Http.Json" Version="8.0.1" />
8+
<PackageReference Include="System.Net.Http.Json" Version="6.0.2" />
99
</ItemGroup>
1010

1111
<ItemGroup>
12+
<PackageReference Include="FluentAssertions" Version="6.12.0" />
1213
<PackageReference Include="NSubstitute" Version="5.3.0" />
1314
<PackageReference Include="NSubstitute.Analyzers.CSharp" Version="1.0.17">
1415
<PrivateAssets>all</PrivateAssets>
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using FluentAssertions;
2+
3+
using TestableHttpClient.Utils;
4+
5+
namespace TestableHttpClient.Tests.Utils;
6+
7+
public class HttpRequestMessagePatternMatcherTests
8+
{
9+
[Fact]
10+
public void MultipleRequests_MatchingAnyPattern_ReturnsAllRequests()
11+
{
12+
HttpRequestMessage[] requestMessages = [
13+
new HttpRequestMessage(HttpMethod.Get, "https://localhost/get"),
14+
new HttpRequestMessage(HttpMethod.Post, "https://localhost/post"),
15+
new HttpRequestMessage(HttpMethod.Options, "https://localhost/options")
16+
];
17+
18+
HttpRequestMessagePattern pattern = new();
19+
20+
HttpRequestMessagePatternMatcher matcher = new();
21+
22+
HttpRequestMessagePatternMatchResult result = matcher.Match(requestMessages, pattern);
23+
24+
result.MatchedRequests.Should().BeEquivalentTo(requestMessages);
25+
result.UnmatchedRequests.Should().BeEmpty();
26+
}
27+
28+
[Fact]
29+
public void MultipleRequests_MatchingSpecificHttpMethod_ReturnsMatchinRequests()
30+
{
31+
HttpRequestMessage getRequest = new(HttpMethod.Get, "https://localhost/get");
32+
HttpRequestMessage postRequest = new(HttpMethod.Post, "https://localhost/post");
33+
HttpRequestMessage optionsRequest = new(HttpMethod.Options, "https://localhost/options");
34+
HttpRequestMessage[] requestMessages = [ getRequest, postRequest, optionsRequest ];
35+
36+
HttpRequestMessagePattern pattern = new()
37+
{
38+
Method = Value.Exact(HttpMethod.Post)
39+
};
40+
41+
HttpRequestMessagePatternMatcher matcher = new();
42+
43+
HttpRequestMessagePatternMatchResult result = matcher.Match(requestMessages, pattern);
44+
45+
result.MatchedRequests.Should().BeEquivalentTo([postRequest]);
46+
result.UnmatchedRequests.Should().BeEquivalentTo([getRequest, optionsRequest]);
47+
}
48+
}

0 commit comments

Comments
 (0)