From 99f42fb25589b864dc066259686db68ddec4ba99 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 14 Feb 2026 10:48:33 +0100 Subject: [PATCH] up --- .../WebSocketMessageConditionBuilder.cs | 2 +- .../IWebSocketMessageConditionBuilder.cs | 2 +- .../WireMock.Net.TUnit.csproj | 2 +- .../WireMock.Net.Aspire.TestAppHost.csproj | 2 +- .../WireMock.Net.Aspire.Tests.csproj | 10 +-- ...reMock.Net.Extensions.Routing.Tests.csproj | 6 +- .../WireMock.Net.Middleware.Tests.csproj | 8 +-- .../WireMock.Net.TUnitTests.csproj | 2 +- .../WebSockets/WebSocketIntegrationTests.cs | 70 +++++++++++++++++-- .../WireMock.Net.Tests.csproj | 19 +++-- 10 files changed, 89 insertions(+), 34 deletions(-) diff --git a/src/WireMock.Net.Minimal/WebSockets/WebSocketMessageConditionBuilder.cs b/src/WireMock.Net.Minimal/WebSockets/WebSocketMessageConditionBuilder.cs index 4be752c5..51166299 100644 --- a/src/WireMock.Net.Minimal/WebSockets/WebSocketMessageConditionBuilder.cs +++ b/src/WireMock.Net.Minimal/WebSockets/WebSocketMessageConditionBuilder.cs @@ -16,7 +16,7 @@ internal class WebSocketMessageConditionBuilder : IWebSocketMessageConditionBuil _matcher = Guard.NotNull(matcher); } - public IWebSocketBuilder SendMessage(Action configure) + public IWebSocketBuilder ThenSendMessage(Action configure) { Guard.NotNull(configure); var messageBuilder = new WebSocketMessageBuilder(); diff --git a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageConditionBuilder.cs b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageConditionBuilder.cs index ac7bf008..dca89116 100644 --- a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageConditionBuilder.cs +++ b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageConditionBuilder.cs @@ -14,7 +14,7 @@ public interface IWebSocketMessageConditionBuilder /// /// Action to configure the message [PublicAPI] - IWebSocketBuilder SendMessage(Action configure); + IWebSocketBuilder ThenSendMessage(Action configure); /// /// Configure and send multiple messages when the condition matches diff --git a/src/WireMock.Net.TUnit/WireMock.Net.TUnit.csproj b/src/WireMock.Net.TUnit/WireMock.Net.TUnit.csproj index cfa3b464..73823377 100644 --- a/src/WireMock.Net.TUnit/WireMock.Net.TUnit.csproj +++ b/src/WireMock.Net.TUnit/WireMock.Net.TUnit.csproj @@ -28,7 +28,7 @@ - + diff --git a/test/WireMock.Net.Aspire.TestAppHost/WireMock.Net.Aspire.TestAppHost.csproj b/test/WireMock.Net.Aspire.TestAppHost/WireMock.Net.Aspire.TestAppHost.csproj index 96f2bb2f..3c3f9dae 100644 --- a/test/WireMock.Net.Aspire.TestAppHost/WireMock.Net.Aspire.TestAppHost.csproj +++ b/test/WireMock.Net.Aspire.TestAppHost/WireMock.Net.Aspire.TestAppHost.csproj @@ -19,7 +19,7 @@ - + diff --git a/test/WireMock.Net.Aspire.Tests/WireMock.Net.Aspire.Tests.csproj b/test/WireMock.Net.Aspire.Tests/WireMock.Net.Aspire.Tests.csproj index 81316d56..f6f68bae 100644 --- a/test/WireMock.Net.Aspire.Tests/WireMock.Net.Aspire.Tests.csproj +++ b/test/WireMock.Net.Aspire.Tests/WireMock.Net.Aspire.Tests.csproj @@ -13,9 +13,9 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -23,11 +23,11 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/WireMock.Net.Extensions.Routing.Tests/WireMock.Net.Extensions.Routing.Tests.csproj b/test/WireMock.Net.Extensions.Routing.Tests/WireMock.Net.Extensions.Routing.Tests.csproj index f94a5b31..4a02932e 100644 --- a/test/WireMock.Net.Extensions.Routing.Tests/WireMock.Net.Extensions.Routing.Tests.csproj +++ b/test/WireMock.Net.Extensions.Routing.Tests/WireMock.Net.Extensions.Routing.Tests.csproj @@ -14,14 +14,14 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/WireMock.Net.Middleware.Tests/WireMock.Net.Middleware.Tests.csproj b/test/WireMock.Net.Middleware.Tests/WireMock.Net.Middleware.Tests.csproj index 8d7b7dab..80b12d93 100644 --- a/test/WireMock.Net.Middleware.Tests/WireMock.Net.Middleware.Tests.csproj +++ b/test/WireMock.Net.Middleware.Tests/WireMock.Net.Middleware.Tests.csproj @@ -13,7 +13,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -21,12 +21,12 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/WireMock.Net.TUnitTests/WireMock.Net.TUnitTests.csproj b/test/WireMock.Net.TUnitTests/WireMock.Net.TUnitTests.csproj index 7f4c621d..eb764072 100644 --- a/test/WireMock.Net.TUnitTests/WireMock.Net.TUnitTests.csproj +++ b/test/WireMock.Net.TUnitTests/WireMock.Net.TUnitTests.csproj @@ -9,7 +9,7 @@ - + diff --git a/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs b/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs index a6d6f6db..f399e373 100644 --- a/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs +++ b/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs @@ -474,11 +474,11 @@ public class WebSocketIntegrationTests(ITestOutputHelper output) .RespondWith(Response.Create() .WithWebSocket(ws => ws .WithCloseTimeout(TimeSpan.FromSeconds(3)) - .WhenMessage("/help").SendMessage(m => m.WithText("Available commands")) - .WhenMessage("/time").SendMessage(m => m.WithText($"Server time: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} UTC")) - .WhenMessage("/echo *").SendMessage(m => m.WithText("echo response")) - .WhenMessage(new ExactMatcher("/exact")).SendMessage(m => m.WithText("is exact")) - .WhenMessage(new FuncMatcher(s => s == "/func")).SendMessage(m => m.WithText("is func")) + .WhenMessage("/help").ThenSendMessage(m => m.WithText("Available commands")) + .WhenMessage("/time").ThenSendMessage(m => m.WithText($"Server time: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} UTC")) + .WhenMessage("/echo *").ThenSendMessage(m => m.WithText("echo response")) + .WhenMessage(new ExactMatcher("/exact")).ThenSendMessage(m => m.WithText("is exact")) + .WhenMessage(new FuncMatcher(s => s == "/func")).ThenSendMessage(m => m.WithText("is func")) ) ); @@ -508,6 +508,60 @@ public class WebSocketIntegrationTests(ITestOutputHelper output) await client.CloseAsync(WebSocketCloseStatus.NormalClosure, "Test complete", CancellationToken.None); } + [Fact] + public async Task WhenMessage_NoMatch_Should_Return404() + { + // Arrange + using var server = WireMockServer.Start(new WireMockServerSettings + { + Logger = new TestOutputHelperWireMockLogger(output), + Urls = ["ws://localhost:0"] + }); + + server + .Given(Request.Create() + .WithPath("/ws/test") + .WithWebSocketUpgrade() + ) + .RespondWith(Response.Create() + .WithWebSocket(ws => ws + .WhenMessage("/close") + .ThenSendMessage(m => m.WithText("Closing connection") + .AndClose() + )) + ); + + using var client = new ClientWebSocket(); + var uri = new Uri($"{server.Url}/ws/test"); + await client.ConnectAsync(uri, CancellationToken.None); + + // Act + await client.SendAsync("/close"); + + var received = await client.ReceiveAsTextAsync(); + + // Assert + received.Should().Contain("Closing connection"); + + // Try to receive again - this will complete the close handshake + // and update the client state to Closed + try + { + var receiveBuffer = new byte[1024]; + var result = await client.ReceiveAsync(new ArraySegment(receiveBuffer), CancellationToken.None); + + // If we get here, the message type should be Close + result.MessageType.Should().Be(WebSocketMessageType.Close); + } + catch (WebSocketException) + { + // Connection was closed, which is expected + } + + // Verify the connection is CloseReceived + client.State.Should().Be(WebSocketState.CloseReceived); + } + [Fact] public async Task WhenMessage_Should_Close_Connection_When_AndClose_Is_Used() { @@ -525,8 +579,10 @@ public class WebSocketIntegrationTests(ITestOutputHelper output) ) .RespondWith(Response.Create() .WithWebSocket(ws => ws - .WhenMessage("/close").SendMessage(m => m.WithText("Closing connection").AndClose()) - ) + .WhenMessage("/close") + .ThenSendMessage(m => m.WithText("Closing connection") + .AndClose() + )) ); using var client = new ClientWebSocket(); diff --git a/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj b/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj index d86a5166..d0671193 100644 --- a/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj +++ b/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj @@ -56,18 +56,20 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive + + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -75,12 +77,10 @@ - - - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -91,7 +91,6 @@ -