102 lines
3.9 KiB
Python
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()
|