269 lines
7.7 KiB
Python
269 lines
7.7 KiB
Python
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
|