from __future__ import annotations from unittest.mock import MagicMock from core.models import ActiveApp from driver.android_driver import AndroidDriver from driver.wda_driver import WDADriver from tools.ui_tree import get_ui_tree from device.manager import DeviceManager from tests.fakes import FakeDriver def test_android_driver_reads_current_package_and_activity() -> None: driver = AndroidDriver() driver._client = MagicMock() driver._client.current_package = "com.example.mobile" driver._client.current_activity = ".MainActivity" assert driver.active_app() == ActiveApp( platform="android", package="com.example.mobile", activity=".MainActivity", ) def test_wda_driver_reads_current_bundle_id() -> None: driver = WDADriver() driver._client = MagicMock() driver._client.execute_script.return_value = { "bundleId": "com.example.mobile", "pid": 123, } assert driver.active_app() == ActiveApp( platform="ios", bundle_id="com.example.mobile", ) driver._client.execute_script.assert_called_once_with("mobile: activeAppInfo") def test_ui_tree_keeps_list_response_without_active_app_option() -> None: manager = DeviceManager() manager.register_device( "phone-1", lambda: FakeDriver( active_app=ActiveApp(platform="ios", bundle_id="com.example.mobile") ), ) manager.connect("phone-1") response = get_ui_tree("phone-1", manager=manager) assert isinstance(response, list) assert any(node["text"] == "Search" for node in response)