from types import SimpleNamespace import pytest from fastapi import HTTPException from app.gateway.routers import system_settings as system_settings_router from deerflow.config.system_settings import SystemSettings def test_strategy_project_demo_is_hidden_by_default() -> None: assert SystemSettings().strategy_projects.taiwan_strait_demo_enabled is False def test_assistant_knowledge_is_hidden_by_default() -> None: assert SystemSettings().knowledge_base_product_version == "v1" @pytest.mark.asyncio async def test_non_admin_cannot_update_strategy_project_settings( monkeypatch: pytest.MonkeyPatch, ) -> None: async def ordinary_user(_request): return SimpleNamespace(system_role="user") monkeypatch.setattr( system_settings_router, "get_optional_user_from_request", ordinary_user, ) with pytest.raises(HTTPException) as error: await system_settings_router.update_strategy_project_settings( system_settings_router.StrategyProjectSettingsUpdateRequest( taiwan_strait_demo_enabled=True, ), SimpleNamespace(), ) assert error.value.status_code == 403 @pytest.mark.asyncio async def test_admin_can_update_strategy_project_settings( monkeypatch: pytest.MonkeyPatch, ) -> None: current = SystemSettings() saved: list[SystemSettings] = [] async def admin_user(_request): return SimpleNamespace(system_role="admin") monkeypatch.setattr( system_settings_router, "get_optional_user_from_request", admin_user, ) monkeypatch.setattr( system_settings_router, "load_system_settings", lambda: current, ) monkeypatch.setattr( system_settings_router, "save_system_settings", lambda settings: saved.append(settings) or settings, ) response = await system_settings_router.update_strategy_project_settings( system_settings_router.StrategyProjectSettingsUpdateRequest( taiwan_strait_demo_enabled=True, ), SimpleNamespace(), ) assert response.taiwan_strait_demo_enabled is True assert saved[0].strategy_projects.taiwan_strait_demo_enabled is True @pytest.mark.asyncio async def test_non_admin_cannot_update_knowledge_base_product_version( monkeypatch: pytest.MonkeyPatch, ) -> None: async def ordinary_user(_request): return SimpleNamespace(system_role="user") monkeypatch.setattr( system_settings_router, "get_optional_user_from_request", ordinary_user, ) with pytest.raises(HTTPException) as error: await system_settings_router.update_knowledge_base_product_version( system_settings_router.KnowledgeBaseProductVersionUpdateRequest(version="v2"), SimpleNamespace(), ) assert error.value.status_code == 403 @pytest.mark.asyncio async def test_admin_can_enable_assistant_knowledge_product( monkeypatch: pytest.MonkeyPatch, ) -> None: current = SystemSettings() saved: list[SystemSettings] = [] async def admin_user(_request): return SimpleNamespace(system_role="admin") monkeypatch.setattr( system_settings_router, "get_optional_user_from_request", admin_user, ) monkeypatch.setattr( system_settings_router, "load_system_settings", lambda: current, ) monkeypatch.setattr( system_settings_router, "save_system_settings", lambda settings: saved.append(settings) or settings, ) response = await system_settings_router.update_knowledge_base_product_version( system_settings_router.KnowledgeBaseProductVersionUpdateRequest(version="v2"), SimpleNamespace(), ) assert response.version == "v2" assert saved == [current.model_copy(update={"knowledge_base_product_version": "v2"})] def test_html_map_engine_defaults_to_echarts() -> None: assert SystemSettings().html_map.engine == "echarts" @pytest.mark.asyncio async def test_non_admin_cannot_change_html_map_engine( monkeypatch: pytest.MonkeyPatch, ) -> None: async def ordinary_user(_request): return SimpleNamespace(system_role="user") monkeypatch.setattr( system_settings_router, "get_optional_user_from_request", ordinary_user, ) with pytest.raises(HTTPException) as error: await system_settings_router.update_html_map_settings( system_settings_router.HtmlMapSettingsUpdateRequest(engine="leaflet"), SimpleNamespace(), ) assert error.value.status_code == 403 @pytest.mark.asyncio async def test_admin_can_select_html_map_webpage( monkeypatch: pytest.MonkeyPatch, ) -> None: current = SystemSettings() saved: list[SystemSettings] = [] async def admin_user(_request): return SimpleNamespace(system_role="admin") monkeypatch.setattr( system_settings_router, "get_optional_user_from_request", admin_user, ) monkeypatch.setattr(system_settings_router, "load_system_settings", lambda: current) monkeypatch.setattr( system_settings_router, "save_system_settings", lambda settings: saved.append(settings) or settings, ) response = await system_settings_router.update_html_map_settings( system_settings_router.HtmlMapSettingsUpdateRequest(engine="leaflet"), SimpleNamespace(), ) assert response.engine == "leaflet" assert saved[0].html_map.engine == "leaflet" def test_retry_keep_partial_defaults_to_enabled() -> None: assert SystemSettings().retry_keep_partial.enabled is True @pytest.mark.asyncio async def test_retry_keep_partial_get_reflects_saved_settings( monkeypatch: pytest.MonkeyPatch, ) -> None: current = SystemSettings().model_copy( update={"retry_keep_partial": system_settings_router.RetryKeepPartialSettings(enabled=False)} ) monkeypatch.setattr( system_settings_router, "load_system_settings", lambda: current, ) response = await system_settings_router.get_retry_keep_partial_setting() assert response.enabled is False @pytest.mark.asyncio async def test_non_admin_cannot_update_retry_keep_partial( monkeypatch: pytest.MonkeyPatch, ) -> None: async def ordinary_user(_request): return SimpleNamespace(system_role="user") monkeypatch.setattr( system_settings_router, "get_optional_user_from_request", ordinary_user, ) with pytest.raises(HTTPException) as error: await system_settings_router.update_retry_keep_partial_setting( system_settings_router.RetryKeepPartialUpdateRequest(enabled=False), SimpleNamespace(), ) assert error.value.status_code == 403 @pytest.mark.asyncio async def test_admin_can_update_retry_keep_partial( monkeypatch: pytest.MonkeyPatch, ) -> None: current = SystemSettings() saved: list[SystemSettings] = [] async def admin_user(_request): return SimpleNamespace(system_role="admin") monkeypatch.setattr( system_settings_router, "get_optional_user_from_request", admin_user, ) monkeypatch.setattr( system_settings_router, "load_system_settings", lambda: current, ) monkeypatch.setattr( system_settings_router, "save_system_settings", lambda settings: saved.append(settings) or settings, ) response = await system_settings_router.update_retry_keep_partial_setting( system_settings_router.RetryKeepPartialUpdateRequest(enabled=False), SimpleNamespace(), ) assert response.enabled is False assert saved[0].retry_keep_partial.enabled is False