Skip to content

Commit 78d4555

Browse files
committed
Add net8 SSE fallback test and align coverage run
1 parent 4d62bc8 commit 78d4555

File tree

2 files changed

+71
-1
lines changed

2 files changed

+71
-1
lines changed

SWEN3.Paperless.RabbitMq.Tests/SWEN3.Paperless.RabbitMq.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
</ItemGroup>
4444

4545
<ItemGroup>
46-
<Content Include="xunit.v3.runner.json" CopyToOutputDirectory="PreserveNewest"/>
46+
<Compile Include="Helpers\SseTestHelpers.cs" />
4747
</ItemGroup>
4848

4949
</Project>
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
using System.Text;
2+
using Microsoft.AspNetCore.Builder;
3+
using Microsoft.AspNetCore.Hosting;
4+
using Microsoft.AspNetCore.TestHost;
5+
using Microsoft.Extensions.DependencyInjection;
6+
using Microsoft.Extensions.Hosting;
7+
using SWEN3.Paperless.RabbitMq.Sse;
8+
9+
namespace SWEN3.Paperless.RabbitMq.Tests.Unit;
10+
11+
public class SseExtensionsFallbackTests
12+
{
13+
#if !NET10_0_OR_GREATER
14+
[Fact]
15+
public async Task MapSse_OnNet8_ShouldWriteCorrectSseFormat()
16+
{
17+
// Arrange
18+
var hostBuilder = new WebHostBuilder()
19+
.ConfigureServices(services =>
20+
{
21+
services.AddRouting();
22+
services.AddSseStream<Messages.SseTestEvent>();
23+
})
24+
.Configure(app =>
25+
{
26+
app.UseRouting();
27+
app.UseEndpoints(endpoints =>
28+
{
29+
endpoints.MapSse<Messages.SseTestEvent>("/sse",
30+
e => new { id = e.Id, msg = e.Message },
31+
e => "test-event");
32+
});
33+
});
34+
35+
using var server = new TestServer(hostBuilder);
36+
var client = server.CreateClient();
37+
var sseStream = server.Host.Services.GetRequiredService<ISseStream<Messages.SseTestEvent>>();
38+
39+
// Act
40+
// Start the request
41+
var responseTask = client.GetStreamAsync("/sse");
42+
43+
// Give it a moment to connect
44+
await Task.Delay(50);
45+
46+
// Publish an event
47+
sseStream.Publish(new Messages.SseTestEvent { Id = 1, Message = "Hello" });
48+
49+
// Allow processing
50+
await Task.Delay(50);
51+
52+
// Assert
53+
var stream = await responseTask;
54+
using var reader = new StreamReader(stream, Encoding.UTF8);
55+
56+
// Read the stream. We expect:
57+
// event: test-event\n
58+
// data: {"id":1,"msg":"Hello"}\n
59+
// \n
60+
61+
var line1 = await reader.ReadLineAsync();
62+
var line2 = await reader.ReadLineAsync();
63+
var line3 = await reader.ReadLineAsync();
64+
65+
line1.Should().Be("event: test-event");
66+
line2.Should().Be("data: {\"id\":1,\"msg\":\"Hello\"}");
67+
line3.Should().BeEmpty(); // The double newline
68+
}
69+
#endif
70+
}

0 commit comments

Comments
 (0)