Files
Nexus/tests/test_btpanel_server_list.py
T
2026-07-08 22:31:31 +08:00

48 lines
1.5 KiB
Python

"""Tests for Baota server list API fields."""
from unittest.mock import AsyncMock, MagicMock, patch
import pytest
from server.application.services.btpanel_service import BtPanelService
from server.domain.models import Server
def _server(sid: int, *, is_online: bool = False, agent_version: str | None = None) -> Server:
return Server(
id=sid,
name=f"s{sid}",
domain=f"1.2.3.{sid}",
is_online=is_online,
agent_version=agent_version,
extra_attrs={},
)
@pytest.mark.asyncio
async def test_list_server_statuses_includes_live_online_from_redis():
svc = BtPanelService(AsyncMock())
servers = [_server(1, agent_version="1.0.0"), _server(2)]
mock_redis = MagicMock()
mock_pipe = MagicMock()
mock_redis.pipeline.return_value = mock_pipe
mock_pipe.execute = AsyncMock(return_value=[
{"is_online": "True", "agent_version": "1.0.0"},
{},
])
with patch.object(svc.servers, "get_all", AsyncMock(return_value=servers) ), patch(
"server.infrastructure.redis.client.get_redis",
return_value=mock_redis,
), patch(
"server.utils.agent_version.agent_is_installed",
side_effect=lambda agent_version_db, heartbeat: bool(agent_version_db or heartbeat),
):
rows = await svc.list_server_statuses()
assert rows[0]["is_online"] is True
assert rows[0]["status"] == "online"
assert rows[1]["is_online"] is False
assert rows[1]["status"] == "unknown"