@@ -12,11 +12,13 @@ namespace SeqCli.EndToEnd.Mcp;
1212// ReSharper disable once UnusedType.Global
1313public class McpSignalUsageTestCase : McpToolTestCase
1414{
15+ record SignalSummary ( string Id , string Title ) ;
16+
1517 // Default signals included in every Seq installation.
16- const string Errors = "signal-m33301" ;
17- const string Warnings = "signal-m33302" ;
18- const string Spans = "signal-m20231011" ;
19- const string Logs = "signal-m20231211" ;
18+ static readonly SignalSummary Errors = new ( "signal-m33301" , "Errors" ) ;
19+ static readonly SignalSummary Warnings = new ( "signal-m33302" , "Warnings" ) ;
20+ static readonly SignalSummary Spans = new ( "signal-m20231011" , "Spans" ) ;
21+ static readonly SignalSummary Logs = new ( "signal-m20231211" , "Logs" ) ;
2022
2123 protected override async Task ExecuteAsync ( SeqConnection connection , ILogger logger , McpClient client )
2224 {
@@ -28,27 +30,27 @@ protected override async Task ExecuteAsync(SeqConnection connection, ILogger log
2830 logger . Warning ( "Item {ItemNumber} delayed in run {RunId}" , 4 , runId ) ;
2931 logger . Error ( "Item {ItemNumber} failed in run {RunId}" , 5 , runId ) ;
3032
31- var signalsResult = AssertTextResult ( await client . CallToolAsync ( "seq_list_signals" ) ) ;
33+ var signals = AssertStructuredResult < SignalSummary [ ] > ( await client . CallToolAsync ( "seq_list_signals" ) ) ;
3234 foreach ( var signal in new [ ] { Errors , Warnings , Spans , Logs } )
3335 {
34- Assert . Contains ( signal , signalsResult ) ;
36+ Assert . Contains ( signal , signals ) ;
3537 }
3638
3739 var predicate = $ "RunId = '{ runId } ' and @Timestamp >= Now() - 1d";
3840
3941 // Union: the two warnings plus the error.
40- Assert . Equal ( 3 , await CountSearchResultsAsync ( client , predicate , $ "{ Errors } ~{ Warnings } ") ) ;
42+ Assert . Equal ( 3 , await CountSearchResultsAsync ( client , predicate , $ "{ Errors . Id } ~{ Warnings . Id } ") ) ;
4143
4244 // Intersection: all of the warnings are log events, not spans.
43- Assert . Equal ( 2 , await CountSearchResultsAsync ( client , predicate , $ "{ Warnings } ,{ Logs } ") ) ;
45+ Assert . Equal ( 2 , await CountSearchResultsAsync ( client , predicate , $ "{ Warnings . Id } ,{ Logs . Id } ") ) ;
4446
4547 var query = $ "select count(*) as total from stream where { predicate } ";
4648
4749 // Union: no spans were written, so only the error is counted.
48- Assert . Equal ( 1 , await CountQueryResultAsync ( client , query , $ "{ Spans } ~{ Errors } ") ) ;
50+ Assert . Equal ( 1 , await CountQueryResultAsync ( client , query , $ "{ Spans . Id } ~{ Errors . Id } ") ) ;
4951
5052 // Intersection with a grouped union: warnings and errors, all of which are log events.
51- Assert . Equal ( 3 , await CountQueryResultAsync ( client , query , $ "({ Errors } ~{ Warnings } ),{ Logs } ") ) ;
53+ Assert . Equal ( 3 , await CountQueryResultAsync ( client , query , $ "({ Errors . Id } ~{ Warnings . Id } ),{ Logs . Id } ") ) ;
5254 }
5355
5456 static async Task < int > CountSearchResultsAsync ( McpClient client , string predicate , string signal )
0 commit comments