refactor: 收口订阅与插件应用边界

This commit is contained in:
jxxghp
2026-08-18 13:54:17 +08:00
parent 8472bcff43
commit c2a27f7c71
29 changed files with 345 additions and 255 deletions
+7 -7
View File
@@ -688,7 +688,7 @@ def test_openapi_success_models_have_no_implicit_empty_nested_schemas():
def test_plugin_routes_only_register_v1(monkeypatch):
"""插件动态路由只注册 v1 地址,并显式绕过主程序响应路由。"""
from app.application import plugins
from app.application.plugin import routes as plugin_routes
class FakeApp:
"""记录动态注册路径的应用桩。"""
@@ -723,7 +723,7 @@ def test_plugin_routes_only_register_v1(monkeypatch):
fake_app = FakeApp()
plugin_manager = FakePluginManager()
plugins.configure_plugin_routes(FastAPIDynamicRouteRegistry(
plugin_routes.configure_plugin_routes(FastAPIDynamicRouteRegistry(
app=fake_app,
plugin_ids=lambda: ["DemoPlugin"],
plugin_apis=plugin_manager.get_plugin_apis,
@@ -734,13 +734,13 @@ def test_plugin_routes_only_register_v1(monkeypatch):
log=SimpleNamespace(debug=lambda *_args: None, error=lambda *_args: None),
))
plugins._update_plugin_api_routes("DemoPlugin", action="add")
plugin_routes.register_plugin_api("DemoPlugin")
assert [route.path for route in fake_app.routes] == [
"/api/v1/plugin/DemoPlugin/health"
]
assert fake_app.route_options[0]["route_class_override"] is APIRoute
plugins._update_plugin_api_routes("DemoPlugin", action="remove")
plugin_routes.remove_plugin_api("DemoPlugin")
assert fake_app.routes == []
@@ -774,7 +774,7 @@ def test_dynamic_host_route_without_annotation_uses_recursive_json_model():
def build_plugin_api_app(monkeypatch) -> FastAPI:
"""构造覆盖插件自由返回类型的动态路由测试应用。"""
from app.application import plugins
from app.application.plugin import routes as plugin_routes
class PluginPayload(BaseModel):
"""插件自行声明的响应模型。"""
@@ -851,7 +851,7 @@ def build_plugin_api_app(monkeypatch) -> FastAPI:
app = FastAPI()
app.router.route_class = ResponseAPIRoute
plugin_manager = FakePluginManager()
plugins.configure_plugin_routes(FastAPIDynamicRouteRegistry(
plugin_routes.configure_plugin_routes(FastAPIDynamicRouteRegistry(
app=app,
plugin_ids=lambda: ["DemoPlugin"],
plugin_apis=plugin_manager.get_plugin_apis,
@@ -861,7 +861,7 @@ def build_plugin_api_app(monkeypatch) -> FastAPI:
protected_routes=set(),
log=SimpleNamespace(debug=lambda *_args: None, error=lambda *_args: None),
))
plugins._update_plugin_api_routes("DemoPlugin", action="add")
plugin_routes.register_plugin_api("DemoPlugin")
return app