diff --git a/app/modules/vyo/module.py b/app/modules/vyo/module.py index e84cb67d8..912f6a0ca 100644 --- a/app/modules/vyo/module.py +++ b/app/modules/vyo/module.py @@ -22,8 +22,9 @@ class VyoModule(_MediaServerModuleBase[Vyo]): """ 初始化模块 """ + # 展示名更改为 Vyo,持久化配置类型仍为 mediavault,不能从类名推导。 super().init_service( - service_name=Vyo.__name__.lower(), + service_name=self._server_type_value, service_type=lambda conf: Vyo( **conf.config, sync_libraries=conf.sync_libraries ), diff --git a/tests/test_vyo_module.py b/tests/test_vyo_module.py index 6d0c44db8..95e916ea8 100644 --- a/tests/test_vyo_module.py +++ b/tests/test_vyo_module.py @@ -6,11 +6,50 @@ from typing import Optional import pytest from app.modules.vyo.api import Api, Result +from app.modules.vyo.module import VyoModule from app.modules.vyo.vyo import Vyo +from app.runtime.extensions.service import ServiceConfigHelper from app.schemas.mediaserver import RefreshMediaItem +from app.schemas.system import MediaServerConf from app.schemas.types import MediaSource, MediaType +@pytest.mark.parametrize("connected", [True, False]) +def test_saved_config_loads_for_connection_test_and_statistics(monkeypatch, connected): + """更名后的模块仍加载已保存的类型,并实际执行连通性和统计查询。""" + config = MediaServerConf( + name="客厅 Vyo", type="mediavault", enabled=True, + config={"host": "http://vyo.test", "apikey": "test-only"}, + sync_libraries=["movies"], + ) + configs = [ + config, + config.model_copy(update={"name": "已停用", "enabled": False}), + config.model_copy(update={"name": "其他服务器", "type": "emby"}), + ] + monkeypatch.setattr(ServiceConfigHelper, "get_mediaserver_configs", lambda: configs) + api = _FakeApi({ + "/libraries": Result(connected, {"items": []}), + "/statistics": Result(True, {"movie_count": 12, "series_count": 3, "episode_count": 24}), + "/users": Result(True, []), + }) + monkeypatch.setattr(Api, "request", lambda _self, *args, **kwargs: api.request(*args, **kwargs)) + module = VyoModule() + try: + module.init_module() + assert list(module.get_instances()) == [config.name] + assert api.calls[0]["api"] == "/libraries" + assert module.test() == ((True, "") if connected else (False, f"无法连接Vyo:{config.name}")) + if connected: + statistics = module.media_statistic(server=config.name) + assert len(statistics) == 1 + assert statistics[0].movie_count == 12 + assert statistics[0].tv_count == 3 + assert statistics[0].episode_count == 24 + finally: + module.stop() + + class _FakeApi: """按路径返回预置数据,并记录调用参数。"""