"""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"