@@ -24,9 +24,11 @@ class NotMiddleware:
2424
2525 settings = load_settings (sample_project )
2626 generator = CodeGenerator (sample_project , settings , temp_dir )
27- middleware_classes = generator ._discover_middleware_classes (sample_project )
28-
29- assert middleware_classes == ["LoggingMiddleware" ]
27+ discovered = generator ._discover_middleware_classes (sample_project )
28+
29+ # FastMCP middleware (on_call_tool method)
30+ assert discovered ["fastmcp" ] == ["LoggingMiddleware" ]
31+ assert discovered ["starlette" ] == []
3032
3133 def test_discovers_multiple_middleware_methods (self , sample_project : Path , temp_dir : Path ):
3234 """Test discovery of middleware with different methods."""
@@ -49,18 +51,20 @@ def dispatch(self, context):
4951
5052 settings = load_settings (sample_project )
5153 generator = CodeGenerator (sample_project , settings , temp_dir )
52- middleware_classes = generator ._discover_middleware_classes (sample_project )
53-
54- # Should discover all three middleware classes
55- assert set (middleware_classes ) == {"MessageMiddleware" , "RequestMiddleware" , "DispatchMiddleware" }
54+ discovered = generator ._discover_middleware_classes (sample_project )
55+
56+ # FastMCP middleware (on_message, on_request methods)
57+ assert set (discovered ["fastmcp" ]) == {"MessageMiddleware" , "RequestMiddleware" }
58+ # Starlette HTTP middleware (dispatch method)
59+ assert discovered ["starlette" ] == ["DispatchMiddleware" ]
5660
5761 def test_no_middleware_when_file_missing (self , sample_project : Path , temp_dir : Path ):
5862 """Test graceful handling when middleware.py doesn't exist."""
5963 settings = load_settings (sample_project )
6064 generator = CodeGenerator (sample_project , settings , temp_dir )
61- middleware_classes = generator ._discover_middleware_classes (sample_project )
62-
63- assert middleware_classes == []
65+ discovered = generator ._discover_middleware_classes (sample_project )
66+
67+ assert discovered == { "fastmcp" : [], "starlette" : []}
6468
6569 def test_ignores_classes_without_middleware_methods (self , sample_project : Path , temp_dir : Path ):
6670 """Test that classes without middleware methods are ignored."""
@@ -83,9 +87,10 @@ def regular_method(self):
8387
8488 settings = load_settings (sample_project )
8589 generator = CodeGenerator (sample_project , settings , temp_dir )
86- middleware_classes = generator ._discover_middleware_classes (sample_project )
87-
88- assert middleware_classes == ["ValidMiddleware" ]
90+ discovered = generator ._discover_middleware_classes (sample_project )
91+
92+ assert discovered ["fastmcp" ] == ["ValidMiddleware" ]
93+ assert discovered ["starlette" ] == []
8994
9095
9196class TestMiddlewareCodeGeneration :
@@ -168,9 +173,10 @@ async def on_message(self, context, call_next):
168173
169174 settings = load_settings (sample_project )
170175 generator = CodeGenerator (sample_project , settings , temp_dir )
171- middleware_classes = generator ._discover_middleware_classes (sample_project )
172-
173- assert middleware_classes == [] # Should return empty list on error
176+ discovered = generator ._discover_middleware_classes (sample_project )
177+
178+ # Should return empty dict on error
179+ assert discovered == {"fastmcp" : [], "starlette" : []}
174180
175181 def test_handles_import_error (self , sample_project : Path , temp_dir : Path ):
176182 """Test graceful handling of import errors."""
@@ -185,9 +191,10 @@ async def on_message(self, context, call_next):
185191
186192 settings = load_settings (sample_project )
187193 generator = CodeGenerator (sample_project , settings , temp_dir )
188- middleware_classes = generator ._discover_middleware_classes (sample_project )
189-
190- assert middleware_classes == [] # Should return empty list on error
194+ discovered = generator ._discover_middleware_classes (sample_project )
195+
196+ # Should return empty dict on error
197+ assert discovered == {"fastmcp" : [], "starlette" : []}
191198
192199 def test_build_succeeds_with_broken_middleware (self , sample_project : Path , temp_dir : Path ):
193200 """Test that broken middleware doesn't break the build process."""
@@ -226,9 +233,10 @@ async def on_message(self, context, call_next):
226233
227234 settings = load_settings (sample_project )
228235 generator = CodeGenerator (sample_project , settings , temp_dir )
229- middleware_classes = generator ._discover_middleware_classes (sample_project )
230-
231- assert middleware_classes == [] # Should return empty list on error
236+ discovered = generator ._discover_middleware_classes (sample_project )
237+
238+ # Should return empty dict on error
239+ assert discovered == {"fastmcp" : [], "starlette" : []}
232240
233241 def test_handles_empty_middleware_file (self , sample_project : Path , temp_dir : Path ):
234242 """Test handling of empty middleware.py file."""
@@ -237,9 +245,9 @@ def test_handles_empty_middleware_file(self, sample_project: Path, temp_dir: Pat
237245
238246 settings = load_settings (sample_project )
239247 generator = CodeGenerator (sample_project , settings , temp_dir )
240- middleware_classes = generator ._discover_middleware_classes (sample_project )
241-
242- assert middleware_classes == []
248+ discovered = generator ._discover_middleware_classes (sample_project )
249+
250+ assert discovered == { "fastmcp" : [], "starlette" : []}
243251
244252
245253class TestMiddlewareDuckTyping :
@@ -265,12 +273,15 @@ def some_other_method(self):
265273
266274 settings = load_settings (sample_project )
267275 generator = CodeGenerator (sample_project , settings , temp_dir )
268- middleware_classes = generator ._discover_middleware_classes (sample_project )
269-
270- assert len (middleware_classes ) == 2
271- assert "DuckTypedMiddleware" in middleware_classes
272- assert "AlsoMiddleware" in middleware_classes
273- assert "NotMiddleware" not in middleware_classes
276+ discovered = generator ._discover_middleware_classes (sample_project )
277+
278+ # FastMCP middleware (on_call_tool method)
279+ assert discovered ["fastmcp" ] == ["DuckTypedMiddleware" ]
280+ # Starlette HTTP middleware (dispatch method)
281+ assert discovered ["starlette" ] == ["AlsoMiddleware" ]
282+ # NotMiddleware should not appear in either list
283+ all_middleware = discovered ["fastmcp" ] + discovered ["starlette" ]
284+ assert "NotMiddleware" not in all_middleware
274285
275286 def test_discovers_mixed_middleware_types (self , sample_project : Path , temp_dir : Path ):
276287 """Test discovery of middleware with and without base class."""
@@ -293,12 +304,14 @@ def regular_method(self):
293304
294305 settings = load_settings (sample_project )
295306 generator = CodeGenerator (sample_project , settings , temp_dir )
296- middleware_classes = generator ._discover_middleware_classes (sample_project )
297-
298- assert len (middleware_classes ) == 2
299- assert "InheritedMiddleware" in middleware_classes
300- assert "DuckTypedMiddleware" in middleware_classes
301- assert "NoMiddlewareMethods" not in middleware_classes
307+ discovered = generator ._discover_middleware_classes (sample_project )
308+
309+ # Both are FastMCP middleware (on_message, on_call_tool methods)
310+ assert set (discovered ["fastmcp" ]) == {"InheritedMiddleware" , "DuckTypedMiddleware" }
311+ assert discovered ["starlette" ] == []
312+ # NoMiddlewareMethods should not appear
313+ all_middleware = discovered ["fastmcp" ] + discovered ["starlette" ]
314+ assert "NoMiddlewareMethods" not in all_middleware
302315
303316
304317class TestMiddlewareRegistrationOrder :
0 commit comments