Skip to content

Commit f74855e

Browse files
committed
Remove repetitive calls to WithRequestFilters and WithMessageFilters in tests
1 parent 76b3f63 commit f74855e

2 files changed

Lines changed: 208 additions & 178 deletions

File tree

tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsMessageFilterTests.cs

Lines changed: 101 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,29 @@ public async Task AddIncomingMessageFilter_Logs_For_Request()
2323
List<string> messageTypes = [];
2424

2525
McpServerBuilder
26-
.WithMessageFilters(filters => filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
26+
.WithMessageFilters(filters =>
2727
{
28-
var logger = GetLogger(context.Services, "MessageFilter1");
29-
logger.LogInformation("MessageFilter1 before");
28+
filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
29+
{
30+
var logger = GetLogger(context.Services, "MessageFilter1");
31+
logger.LogInformation("MessageFilter1 before");
3032

31-
var messageTypeName = context.JsonRpcMessage.GetType().Name;
32-
messageTypes.Add(messageTypeName);
33+
var messageTypeName = context.JsonRpcMessage.GetType().Name;
34+
messageTypes.Add(messageTypeName);
3335

34-
await next(context, cancellationToken);
36+
await next(context, cancellationToken);
3537

36-
logger.LogInformation("MessageFilter1 after");
37-
}))
38-
.WithMessageFilters(filters => filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
39-
{
40-
var logger = GetLogger(context.Services, "MessageFilter2");
41-
logger.LogInformation("MessageFilter2 before");
42-
await next(context, cancellationToken);
43-
logger.LogInformation("MessageFilter2 after");
44-
}))
38+
logger.LogInformation("MessageFilter1 after");
39+
});
40+
41+
filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
42+
{
43+
var logger = GetLogger(context.Services, "MessageFilter2");
44+
logger.LogInformation("MessageFilter2 before");
45+
await next(context, cancellationToken);
46+
logger.LogInformation("MessageFilter2 after");
47+
});
48+
})
4549
.WithTools<TestTool>()
4650
.WithPrompts<TestPrompt>()
4751
.WithResources<TestResource>();
@@ -91,20 +95,24 @@ public async Task AddIncomingMessageFilter_Intercepts_Request_Messages()
9195
public async Task AddIncomingMessageFilter_Multiple_Filters_Execute_In_Order()
9296
{
9397
McpServerBuilder
94-
.WithMessageFilters(filters => filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
95-
{
96-
var logger = GetLogger(context.Services, "MessageFilter1");
97-
logger.LogInformation("MessageFilter1 before");
98-
await next(context, cancellationToken);
99-
logger.LogInformation("MessageFilter1 after");
100-
}))
101-
.WithMessageFilters(filters => filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
98+
.WithMessageFilters(filters =>
10299
{
103-
var logger = GetLogger(context.Services, "MessageFilter2");
104-
logger.LogInformation("MessageFilter2 before");
105-
await next(context, cancellationToken);
106-
logger.LogInformation("MessageFilter2 after");
107-
}))
100+
filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
101+
{
102+
var logger = GetLogger(context.Services, "MessageFilter1");
103+
logger.LogInformation("MessageFilter1 before");
104+
await next(context, cancellationToken);
105+
logger.LogInformation("MessageFilter1 after");
106+
});
107+
108+
filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
109+
{
110+
var logger = GetLogger(context.Services, "MessageFilter2");
111+
logger.LogInformation("MessageFilter2 before");
112+
await next(context, cancellationToken);
113+
logger.LogInformation("MessageFilter2 after");
114+
});
115+
})
108116
.WithTools<TestTool>();
109117

110118
StartServer();
@@ -166,19 +174,23 @@ public async Task AddIncomingMessageFilter_Items_Dictionary_Can_Be_Used()
166174
string? capturedValue = null;
167175

168176
McpServerBuilder
169-
.WithMessageFilters(filters => filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
170-
{
171-
context.Items["testKey"] = "testValue";
172-
await next(context, cancellationToken);
173-
}))
174-
.WithMessageFilters(filters => filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
177+
.WithMessageFilters(filters =>
175178
{
176-
if (context.Items.TryGetValue("testKey", out var value))
179+
filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
177180
{
178-
capturedValue = value as string;
179-
}
180-
await next(context, cancellationToken);
181-
}))
181+
context.Items["testKey"] = "testValue";
182+
await next(context, cancellationToken);
183+
});
184+
185+
filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
186+
{
187+
if (context.Items.TryGetValue("testKey", out var value))
188+
{
189+
capturedValue = value as string;
190+
}
191+
await next(context, cancellationToken);
192+
});
193+
})
182194
.WithTools<TestTool>();
183195

184196
StartServer();
@@ -529,36 +541,40 @@ public async Task AddIncomingMessageFilter_Items_Preserved_When_Context_Replaced
529541
object? secondFilterValue = null;
530542

531543
McpServerBuilder
532-
.WithMessageFilters(filters => filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
533-
{
534-
// First filter sets an item
535-
if (context.JsonRpcMessage is JsonRpcRequest request && request.Method == RequestMethods.ToolsList)
536-
{
537-
context.Items["firstFilterKey"] = "firstFilterValue";
538-
}
539-
await next(context, cancellationToken);
540-
}))
541-
.WithMessageFilters(filters => filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
544+
.WithMessageFilters(filters =>
542545
{
543-
// Second filter creates a new context with a new JsonRpcRequest and adds an item
544-
if (context.JsonRpcMessage is JsonRpcRequest request && request.Method == RequestMethods.ToolsList)
546+
filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
545547
{
546-
var newRequest = new JsonRpcRequest
548+
// First filter sets an item
549+
if (context.JsonRpcMessage is JsonRpcRequest request && request.Method == RequestMethods.ToolsList)
547550
{
548-
Id = request.Id,
549-
Method = RequestMethods.ToolsList,
550-
Params = request.Params,
551-
Context = new JsonRpcMessageContext { RelatedTransport = request.Context?.RelatedTransport },
552-
};
551+
context.Items["firstFilterKey"] = "firstFilterValue";
552+
}
553+
await next(context, cancellationToken);
554+
});
553555

554-
var newContext = new MessageContext(context.Server, newRequest);
555-
newContext.Items["secondFilterKey"] = "secondFilterValue";
556-
557-
await next(newContext, cancellationToken);
558-
return;
559-
}
560-
await next(context, cancellationToken);
561-
}))
556+
filters.AddIncomingFilter((next) => async (context, cancellationToken) =>
557+
{
558+
// Second filter creates a new context with a new JsonRpcRequest and adds an item
559+
if (context.JsonRpcMessage is JsonRpcRequest request && request.Method == RequestMethods.ToolsList)
560+
{
561+
var newRequest = new JsonRpcRequest
562+
{
563+
Id = request.Id,
564+
Method = RequestMethods.ToolsList,
565+
Params = request.Params,
566+
Context = new JsonRpcMessageContext { RelatedTransport = request.Context?.RelatedTransport },
567+
};
568+
569+
var newContext = new MessageContext(context.Server, newRequest);
570+
newContext.Items["secondFilterKey"] = "secondFilterValue";
571+
572+
await next(newContext, cancellationToken);
573+
return;
574+
}
575+
await next(context, cancellationToken);
576+
});
577+
})
562578
.WithRequestFilters(filters => filters.AddListToolsFilter((next) => async (request, cancellationToken) =>
563579
{
564580
// Request filter should see items from message filters
@@ -592,25 +608,29 @@ public async Task AddIncomingMessageFilter_Items_Flow_Through_Multiple_Request_F
592608
}
593609
await next(context, cancellationToken);
594610
}))
595-
.WithRequestFilters(filters => filters.AddListToolsFilter((next) => async (request, cancellationToken) =>
611+
.WithRequestFilters(filters =>
596612
{
597-
// First request filter reads and modifies
598-
if (request.Items.TryGetValue("sharedKey", out var value))
613+
filters.AddListToolsFilter((next) => async (request, cancellationToken) =>
599614
{
600-
observedValues.Add((string)value!);
601-
request.Items["sharedKey"] = "modifiedByFilter1";
602-
}
603-
return await next(request, cancellationToken);
604-
}))
605-
.WithRequestFilters(filters => filters.AddListToolsFilter((next) => async (request, cancellationToken) =>
606-
{
607-
// Second request filter should see modified value
608-
if (request.Items.TryGetValue("sharedKey", out var value))
615+
// First request filter reads and modifies
616+
if (request.Items.TryGetValue("sharedKey", out var value))
617+
{
618+
observedValues.Add((string)value!);
619+
request.Items["sharedKey"] = "modifiedByFilter1";
620+
}
621+
return await next(request, cancellationToken);
622+
});
623+
624+
filters.AddListToolsFilter((next) => async (request, cancellationToken) =>
609625
{
610-
observedValues.Add((string)value!);
611-
}
612-
return await next(request, cancellationToken);
613-
}))
626+
// Second request filter should see modified value
627+
if (request.Items.TryGetValue("sharedKey", out var value))
628+
{
629+
observedValues.Add((string)value!);
630+
}
631+
return await next(request, cancellationToken);
632+
});
633+
})
614634
.WithTools<TestTool>();
615635

616636
StartServer();

0 commit comments

Comments
 (0)