Files
aza/AzA march 2026/_test_chat_header_badges_minidiktat_paste.py
2026-06-13 22:47:31 +02:00

102 lines
3.9 KiB
Python

# -*- 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</div>', 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("<Button-3>", 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"<script(?:[^>]*)>([\s\S]*?)</script>", html, flags=re.I)
combined = "\n".join(scripts)
self.assertEqual(combined.count("{"), combined.count("}"))
if __name__ == "__main__":
unittest.main()