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