77 lines
2.7 KiB
Python
77 lines
2.7 KiB
Python
|
|
# -*- coding: utf-8 -*-
|
||
|
|
"""Reopen aus Kontakte: kein Fokus auf leeres AzA Chat · Desktop, Office-SSO-Neustart."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import inspect
|
||
|
|
import unittest
|
||
|
|
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
import aza_empfang_webview as ew
|
||
|
|
|
||
|
|
|
||
|
|
class WindowTitleMatchTests(unittest.TestCase):
|
||
|
|
def test_prefix_matches_desktop_false_positive(self):
|
||
|
|
chat = ew._window_title_for_mode(ew._MODE_EMPFANG_CHAT_SHELL)
|
||
|
|
desktop = ew._window_title_for_mode(ew._MODE_DESKTOP_SHELL)
|
||
|
|
self.assertTrue(
|
||
|
|
ew._window_title_matches(desktop, prefixes=(chat,))
|
||
|
|
)
|
||
|
|
self.assertFalse(
|
||
|
|
ew._window_title_matches(desktop, exact_titles=(chat,))
|
||
|
|
)
|
||
|
|
|
||
|
|
def test_exact_matches_chat_only(self):
|
||
|
|
chat = ew._window_title_for_mode(ew._MODE_EMPFANG_CHAT_SHELL)
|
||
|
|
self.assertTrue(ew._window_title_matches(chat, exact_titles=(chat,)))
|
||
|
|
self.assertFalse(
|
||
|
|
ew._window_title_matches(
|
||
|
|
ew._window_title_for_mode(ew._MODE_DESKTOP_SHELL),
|
||
|
|
exact_titles=(chat,),
|
||
|
|
)
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
class FocusEmpfangChatShellReopenTests(unittest.TestCase):
|
||
|
|
@classmethod
|
||
|
|
def setUpClass(cls):
|
||
|
|
cls.focus_src = inspect.getsource(ew.EmpfangWebviewApi.focus_empfang_chat_shell)
|
||
|
|
|
||
|
|
def test_focus_uses_exact_title_not_prefix(self):
|
||
|
|
self.assertIn("exact_titles=(chat_title", self.focus_src)
|
||
|
|
self.assertNotIn("_focus_other_empfang_host_window(prefixes", self.focus_src)
|
||
|
|
|
||
|
|
def test_no_autonomous_login_url_spawn(self):
|
||
|
|
self.assertNotIn("_spawn_empfang_chat_shell_process()", self.focus_src)
|
||
|
|
self.assertNotIn("_build_default_empfang_chat_shell_url", self.focus_src)
|
||
|
|
|
||
|
|
def test_office_ipc_handoff(self):
|
||
|
|
self.assertIn("request_office_open_empfang_chat_shell_ipc", self.focus_src)
|
||
|
|
|
||
|
|
def test_no_desktop_shell_in_reopen_path(self):
|
||
|
|
self.assertNotIn("_MODE_DESKTOP_SHELL", self.focus_src)
|
||
|
|
|
||
|
|
def test_no_direct_subprocess_in_focus(self):
|
||
|
|
count = self.focus_src.count("subprocess.Popen")
|
||
|
|
self.assertEqual(count, 0)
|
||
|
|
|
||
|
|
|
||
|
|
class KontaktPanelHandoffUnchangedTests(unittest.TestCase):
|
||
|
|
def test_kontakt_helper_still_awaits_dm_open(self):
|
||
|
|
html = (Path(__file__).resolve().parent / "web" / "empfang.html").read_text(
|
||
|
|
encoding="utf-8-sig"
|
||
|
|
)
|
||
|
|
idx = html.find("async function kontaktPanelOpenMessagesBadgeInHuelle")
|
||
|
|
self.assertGreater(idx, 0)
|
||
|
|
block = html[idx : idx + 1200]
|
||
|
|
self.assertIn("await apiFetch", block)
|
||
|
|
self.assertIn("focus_empfang_chat_shell", block)
|
||
|
|
dm = block.find("await apiFetch")
|
||
|
|
focus = block.find("focus_empfang_chat_shell")
|
||
|
|
self.assertGreater(focus, dm)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
unittest.main()
|