# -*- coding: utf-8 -*- """Tests: Chat-Header (Größe, Online, Badges), Benutzerliste, Mini-Diktat Einfügen.""" from __future__ import annotations import inspect import re import unittest from pathlib import Path ROOT = Path(__file__).resolve().parent class EmpfangHtmlHeaderV4Tests(unittest.TestCase): @classmethod def setUpClass(cls): cls.html = (ROOT / "web" / "empfang.html").read_text(encoding="utf-8") def test_angemeldet_als_label_separate(self): self.assertIn('class="header-me-label">Angemeldet als', self.html) self.assertIn('id="header-me-display"', self.html) def test_display_name_larger_than_label(self): self.assertIn(".header-me-display{font-size:1.12rem", self.html) self.assertIn(".header-me-label{font-size:.68rem", self.html) def test_online_presence_in_header(self): self.assertIn('id="header-me-presence"', self.html) self.assertIn(".header-me-presence.online{", self.html) self.assertIn( "el.className = 'header-me-presence ' + (online ? 'online' : 'offline')", self.html, ) self.assertIn('html[data-empfang-chat-shell="1"] #sidebar .sb-me-detail{display:none!important}', self.html) def test_badges_in_header_with_messages(self): self.assertIn("sb-me-pill-msgs", self.html) self.assertIn("navigateFromMessagesBadgeClick", self.html) self.assertIn("refreshMeStatusBadgesAll", self.html) def test_load_tasks_refreshes_header_badges(self): self.assertIn("refreshMeStatusBadgesAll(); } catch (_eBdT)", self.html) def test_no_duplicate_sidebar_badges_in_shell(self): m = re.search( r"function renderSbMeStatusBadges\(\)\s*\{([\s\S]*?)\n\}", self.html, ) self.assertIsNotNone(m) self.assertIn("isDesktopShellMode()", m.group(1)) def test_users_panel_dynamic_title(self): self.assertIn('id="sb-users-panel-title"', self.html) self.assertIn("Benutzer der Praxis:", self.html) self.assertIn("function updateSbUsersPanelTitle", self.html) def test_explanation_text_removed(self): self.assertNotIn("Gleicher Datenraum wie in AzA", self.html) self.assertIn('id="sb-users-hint"', self.html) self.assertIn('id="sb-users-hint" aria-live="polite" style="display:none"', self.html) class MiniDiktatPasteTests(unittest.TestCase): def test_paste_helpers_exist(self): import aza_mini_diktat_window as md self.assertTrue(callable(getattr(md, "_paste_into_diktat_text", None))) self.assertTrue(callable(getattr(md, "_bind_mini_diktat_context_paste", None))) def test_context_menu_wired_on_open(self): import aza_mini_diktat_window as md open_src = inspect.getsource(md.open_mini_diktat_window) bind_src = inspect.getsource(md._bind_mini_diktat_context_paste) self.assertIn("_bind_mini_diktat_context_paste", open_src) self.assertIn("Einfügen", bind_src) self.assertIn("", bind_src) def test_diktat_text_reference_on_window(self): import aza_diktat_mixin as dm src = inspect.getsource(dm.AzaDiktatMixin.open_diktat_window) self.assertIn("_aza_diktat_text = txt", src) def test_paste_uses_clipboard_and_insert(self): import aza_mini_diktat_window as md src = inspect.getsource(md._paste_into_diktat_text) self.assertIn("clipboard_get", src) self.assertIn("txt.insert", src) class EmpfangHtmlJsSyntaxTests(unittest.TestCase): def test_inline_script_brace_balance(self): html = (ROOT / "web" / "empfang.html").read_text(encoding="utf-8") scripts = re.findall(r"]*)>([\s\S]*?)", html, flags=re.I) combined = "\n".join(scripts) self.assertEqual(combined.count("{"), combined.count("}")) if __name__ == "__main__": unittest.main()