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"