# -*- coding: utf-8 -*- """Tests: Chat-Kontaktpanel-Start + Mini-Diktat.""" from __future__ import annotations import inspect import unittest class TestChatKontaktStartPath(unittest.TestCase): _APP_CLS = None @classmethod def setUpClass(cls): import basis14 for name in dir(basis14): obj = getattr(basis14, name) if isinstance(obj, type) and hasattr(obj, "_send_to_empfang"): cls._APP_CLS = obj break if cls._APP_CLS is None: raise unittest.SkipTest("Desktop-App-Klasse in basis14 nicht gefunden") def test_send_to_empfang_resolves_user_before_open(self): src = inspect.getsource(self._APP_CLS._send_to_empfang) self.assertIn("_empfang_self_user_id_resolve_now", src) self.assertIn("_sync_desktop_profile_from_empfang_metadata", src) self.assertIn("_prepare_empfang_prefs_for_webview", src) def test_kontakt_spawn_delayed_after_shell(self): src = inspect.getsource(self._APP_CLS._empfang_open_webview_singleton) self.assertIn("after(1500, self._maybe_autostart_kontakt_panel)", src) infl_block = src.split('skip_reason="launch_inflight"', 1)[1].split( "self._empfang_webview_launch_inflight_until = 0.0", 1 )[0] self.assertNotIn("_maybe_autostart_kontakt_panel", infl_block) def test_kontakt_inflight_grace_tightened(self): src = inspect.getsource(self._APP_CLS._kontakt_panel_subprocess_alive) self.assertIn("empty_grace_s=6.0", src) def test_kontakt_alive_nudges_peer_refresh(self): src = inspect.getsource(self._APP_CLS._maybe_autostart_kontakt_panel) self.assertIn("touch_shell_peer_refresh_signal", src) self.assertIn("empty_grace_s=6.0", src) class TestMiniDiktatWindow(unittest.TestCase): def test_module_exports(self): import aza_mini_diktat_window as md for name in ( "open_mini_diktat_window", "close_mini_diktat_window", "sync_mini_diktat_window", "is_mini_diktat_window_open", ): self.assertTrue(callable(getattr(md, name, None)), msg=name) def test_uses_logo3(self): import aza_mini_diktat_window as md self.assertIn("Logo3.png", md._LOGO_CANDIDATES) def test_restore_tool_window_helper(self): import aza_ui_helpers self.assertTrue(hasattr(aza_ui_helpers, "restore_tool_window_at_cursor")) src = inspect.getsource(aza_ui_helpers.restore_tool_window_at_cursor) self.assertIn("_mini_restore_geometry", src) self.assertIn("_tool_pinned", src) def test_diktat_mixin_has_mini_button(self): import aza_diktat_mixin src = inspect.getsource(aza_diktat_mixin.AzaDiktatMixin.open_diktat_window) self.assertIn("open_mini_diktat_window", src) self.assertIn("btn_mini_diktat", src) self.assertIn("Mini-Diktat", src) self.assertIn("_aza_diktat_toggle", src) self.assertIn("add_tool_pin_button", src) def test_mini_diktat_same_size_as_main_mini(self): import aza_mini_diktat_window as md import aza_mini_record_window as mr self.assertEqual(md._MINI_WIN_W, mr._MINI_WIN_W) self.assertEqual(md._MINI_WIN_H, mr._MINI_WIN_H) def test_mini_diktat_has_korrigieren_and_status(self): import aza_mini_diktat_window as md src = inspect.getsource(md.open_mini_diktat_window) self.assertIn("_aza_diktat_korrigieren", src) self.assertIn("sync_mini_diktat_window", src) self.assertIn("_aza_diktat_toggle", src) self.assertIn("withdraw", src) def test_diktat_close_clears_mini(self): import aza_diktat_mixin src = inspect.getsource(aza_diktat_mixin.AzaDiktatMixin.open_diktat_window) self.assertIn("close_mini_diktat_window", src) class TestMainMiniUnchanged(unittest.TestCase): def test_main_mini_still_uses_restore_main(self): import aza_mini_record_window as mr src = inspect.getsource(mr._restore_main_window) self.assertIn("restore_main_window_at_cursor", src) if __name__ == "__main__": unittest.main()