Add new package WireMock.Net.Extensions.Routing which provides minimal-API-style routing for WireMock.Net (#1344)

* Add new package WireMock.Net.Extensions.Routing

* Update documentation for WireMock.Net.Extensions.Routing

* Cleanup imports

* Add header to all source files inside WireMock.Net.Extensions.Routing

* Add header to all source files inside WireMock.Net.Extensions.Routing.Tests

* Revert unintended changes

* Remove redundant build configurations

* Remove incorrect links from documentation

* Update nuget package references

* Revert unintended changes

* Migrate to AwesomeAssertions

* Remove redundant project reference

* Adjust formatting

* Migrate to primary constructor

* Refactoring: rename delegate parameter

* Abstract over JSON converter

* Replace WireMock with WireMock.Net in comments

* Move local functions to the bottom of the methods
This commit is contained in:
Gennadii Saltyshchak
2025-08-18 20:52:42 +03:00
committed by GitHub
parent 60eb519ae2
commit be2ea67b89
20 changed files with 1118 additions and 0 deletions

View File

@@ -0,0 +1,100 @@
// Copyright © WireMock.Net
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;
using AwesomeAssertions;
using WireMock.Net.Extensions.Routing.Extensions;
using WireMock.Server;
namespace WireMock.Net.Extensions.Routing.Tests.Tests;
public sealed class WireMockRouterTests
{
private const string DefaultUrlPattern = "/test";
private readonly WireMockServer _server = WireMockServer.Start();
private readonly WireMockRouter _sut;
public WireMockRouterTests()
{
_sut = new WireMockRouter(_server);
}
[Fact]
public async Task Map_ShouldReturnResultFromHandler_ForGetMethod()
{
const int handlerResult = 5;
_sut.Map(HttpMethod.Get.ToString(), DefaultUrlPattern, _ => handlerResult);
using var client = _server.CreateClient();
var result = await client.GetFromJsonAsync<int>(DefaultUrlPattern);
result.Should().Be(handlerResult);
}
[Fact]
public async Task Map_ShouldReturnResultFromAsyncHandler_ForGetMethod()
{
const int handlerResult = 5;
_sut.Map(HttpMethod.Get.ToString(), DefaultUrlPattern, _ => Task.FromResult(handlerResult));
using var client = _server.CreateClient();
var result = await client.GetFromJsonAsync<int>(DefaultUrlPattern);
result.Should().Be(handlerResult);
}
[Fact]
public async Task Map_ShouldReturnResultFromAsyncHandlerWithAwait_ForGetMethod()
{
const int handlerResult = 5;
_sut.Map(
HttpMethod.Get.ToString(),
DefaultUrlPattern,
async _ => await Task.FromResult(handlerResult));
using var client = _server.CreateClient();
var result = await client.GetFromJsonAsync<int>(DefaultUrlPattern);
result.Should().Be(handlerResult);
}
[Fact]
public async Task Map_ShouldReturnResultFromAsyncHandlerWithDelayAndAwait_ForGetMethod()
{
const int handlerResult = 5;
async Task<object?> HandleRequestAsync()
{
await Task.Delay(1);
return handlerResult;
}
_sut.Map(HttpMethod.Get.ToString(), DefaultUrlPattern, _ => HandleRequestAsync());
using var client = _server.CreateClient();
var result = await client.GetFromJsonAsync<int>(DefaultUrlPattern);
result.Should().Be(handlerResult);
}
[Fact]
public async Task MapGet_ShouldReturnResultFromAsyncHandlerWithDelayAwait()
{
const int handlerResult = 5;
async Task<object?> HandleRequestAsync()
{
await Task.Delay(1);
return handlerResult;
}
_sut.MapGet(DefaultUrlPattern, _ => HandleRequestAsync());
using var client = _server.CreateClient();
var result = await client.GetFromJsonAsync<int>(DefaultUrlPattern);
result.Should().Be(handlerResult);
}
}

View File

@@ -0,0 +1,37 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Authors>Gennadii Saltyshchak</Authors>
<TargetFrameworks>net8.0</TargetFrameworks>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<DebugType>full</DebugType>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
<IsTestProject>true</IsTestProject>
<SonarQubeExclude>true</SonarQubeExclude>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>../../src/WireMock.Net/WireMock.Net.snk</AssemblyOriginatorKeyFile>
<PublicSign Condition=" '$(OS)' != 'Windows_NT' ">true</PublicSign>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AwesomeAssertions" Version="9.1.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageReference Include="coverlet.collector" Version="6.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\WireMock.Net.Extensions.Routing\WireMock.Net.Extensions.Routing.csproj" />
</ItemGroup>
<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>
</Project>