from __future__ import annotations import sys import unittest from pathlib import Path ROOT = Path(__file__).resolve().parents[1] sys.path.insert(0, str(ROOT / "scripts")) from service.desktop_session import ( # noqa: E402 DesktopRpaError, WindowCandidate, resolve_unique_window, ) from util.selectors import MAIN_WINDOW # noqa: E402 class SelectorContractTest(unittest.TestCase): def test_unique_window_is_required(self) -> None: candidate = WindowCandidate(1, 10, "WXWork", "WeWorkWindow", "企业微信", True) self.assertEqual( resolve_unique_window(MAIN_WINDOW, candidates=[candidate]), candidate, ) def test_duplicate_windows_fail_instead_of_taking_first(self) -> None: candidates = [ WindowCandidate(1, 10, "WXWork", "WeWorkWindow", "企业微信", True), WindowCandidate(2, 11, "WXWork", "WeWorkWindow", "企业微信", True), ] with self.assertRaises(DesktopRpaError) as ctx: resolve_unique_window(MAIN_WINDOW, candidates=candidates) self.assertEqual(ctx.exception.code, "ELEMENT_AMBIGUOUS") def test_hidden_window_is_not_a_candidate(self) -> None: hidden = WindowCandidate(1, 10, "WXWork", "WeWorkWindow", "企业微信", False) with self.assertRaises(DesktopRpaError) as ctx: resolve_unique_window(MAIN_WINDOW, candidates=[hidden]) self.assertEqual(ctx.exception.code, "WINDOW_NOT_FOUND") if __name__ == "__main__": unittest.main()