Files
agentic-mobile-control/tests/test_device_manager.py
T

49 lines
1.6 KiB
Python

from __future__ import annotations
import pytest
from device.manager import DeviceManager
from core.errors import DeviceOfflineError
from tests.fakes import FakeDriver
def test_device_manager_connect_disconnect_transitions() -> None:
driver = FakeDriver()
manager = DeviceManager()
manager.register_device("iphone-1", lambda: driver, connection_info={"wda_port": 8100})
assert manager.list_devices()[0].status == "idle"
assert manager.connect("iphone-1", max_retries=1) is driver
assert manager.status("iphone-1") == "busy"
manager.disconnect("iphone-1")
assert manager.status("iphone-1") == "idle"
assert driver.calls[0] == ("connect", ())
assert driver.calls[-1] == ("disconnect", ())
def test_device_manager_marks_unreachable_device_offline() -> None:
manager = DeviceManager()
manager.register_device("iphone-1", lambda: FakeDriver(fail_connect=True))
with pytest.raises(DeviceOfflineError):
manager.connect("iphone-1", max_retries=2, retry_backoff_seconds=0)
assert manager.status("iphone-1") == "offline"
def test_probe_marks_connected_device_offline_when_driver_is_unreachable() -> None:
class BrokenDriver:
def connect(self) -> None:
return None
def screenshot(self) -> bytes:
raise RuntimeError("WDA disconnected")
manager = DeviceManager()
manager.register_device("iphone-1", lambda: BrokenDriver()) # type: ignore[arg-type]
manager.connect("iphone-1")
assert manager.probe("iphone-1") is False
assert manager.status("iphone-1") == "offline"