# -*- coding: utf-8 -*- """Smoke-Tests für AZA Kontroll-Hülle (read-only Logik).""" from __future__ import annotations import os import unittest class TestAdminControlShell(unittest.TestCase): def test_module_imports(self): import aza_admin_control_shell as cs # noqa: F401 def test_license_user_match_by_key(self): from aza_admin_control_shell import _enrich_license_rows_with_users accounts = { "u1": { "user_id": "user_abc123", "display_name": "Dr. Test", "login_name": "dr.test@praxis.ch", "email": "test@praxis.ch", "practice_id": "prac_1", "license_key": "AZA-AAAA-BBBB-CCCC-DDDD", } } licenses = [{ "license_key_plain": "AZA-AAAA-BBBB-CCCC-DDDD", "practice_id": "prac_1", "customer_email_license": "billing@stripe.ch", "status": "active", "devices_per_user": "3", "stripe_letzte_db_aenderung_utc": "2026-01-01", "sources": "test", }] out = _enrich_license_rows_with_users(licenses, accounts, {}) self.assertEqual(len(out), 1) self.assertEqual(out[0]["user_display_name"], "Dr. Test") self.assertEqual(out[0]["user_login_name"], "dr.test@praxis.ch") self.assertEqual(out[0]["user_email"], "test@praxis.ch") self.assertEqual(out[0]["user_assignment_status"], "OK") self.assertEqual(out[0]["user_assignment_source"], "license_key") def test_license_email_practice_match_display_login(self): from aza_admin_control_shell import _enrich_license_rows_with_users accounts = { "u1": { "display_name": "André M. Surovy", "login_name": "admin@aza-medwork.ch", "email": "admin@aza-medwork.ch", "practice_id": "prac_x", } } licenses = [{ "license_key_plain": "", "practice_id": "prac_x", "customer_email_license": "admin@aza-medwork.ch", "status": "active", }] out = _enrich_license_rows_with_users(licenses, accounts, {}) self.assertEqual(out[0]["user_display_name"], "André M. Surovy") self.assertEqual(out[0]["user_login_name"], "admin@aza-medwork.ch") self.assertEqual(out[0]["user_assignment_source"], "email+practice_id") def test_login_name_fallback_to_email(self): from aza_admin_control_shell import _resolve_account_login_name ac = {"email": "fallback@praxis.ch"} self.assertEqual(_resolve_account_login_name(ac), "fallback@praxis.ch") def test_login_name_fallback_to_user_id(self): from aza_admin_control_shell import _resolve_account_login_name ac = {"user_id": "uid_99", "_uid": "uid_99"} self.assertEqual(_resolve_account_login_name(ac), "uid_99") def test_display_name_fallback_name_field(self): from aza_admin_control_shell import _resolve_account_display_name self.assertEqual(_resolve_account_display_name({"name": "Praxis Admin"}), "Praxis Admin") def test_license_no_user_assigned(self): from aza_admin_control_shell import _enrich_license_rows_with_users out = _enrich_license_rows_with_users( [{"license_key_plain": "AZA-UNKNOWN", "practice_id": "", "status": "active"}], {}, {}, ) self.assertEqual(out[0]["user_assignment_status"], "Kein Benutzer zugeordnet") self.assertEqual(out[0]["user_display_name"], "—") self.assertEqual(out[0]["user_login_name"], "—") def test_license_ambiguous_users(self): from aza_admin_control_shell import _enrich_license_rows_with_users accounts = { "u1": { "display_name": "A", "login_name": "a@x.ch", "email": "same@x.ch", "practice_id": "p1", "license_key": "KEY1", }, "u2": { "display_name": "B", "login_name": "b@x.ch", "email": "same@x.ch", "practice_id": "p1", "license_key": "KEY1", }, } licenses = [{"license_key_plain": "KEY1", "practice_id": "p1", "status": "active"}] out = _enrich_license_rows_with_users(licenses, accounts, {}) self.assertEqual(out[0]["user_assignment_status"], "Mehrdeutige Zuordnung") self.assertIn("A", out[0]["user_display_name"]) self.assertIn("B", out[0]["user_display_name"]) self.assertIn("a@x.ch", out[0]["user_login_name"]) self.assertIn("b@x.ch", out[0]["user_login_name"]) def test_license_tab_columns_include_login_name(self): path = os.path.join(os.path.dirname(__file__), "aza_admin_control_shell.py") with open(path, encoding="utf-8") as f: src = f.read() pop_block = src.split("def _populate_licenses", 1)[-1].split("\n def ", 1)[0] self.assertIn('"user_login_name"', pop_block) self.assertIn("Login Name:", src.split("def _on_license_select", 1)[-1]) def test_license_bg_colors_not_in_control_shell(self): path = os.path.join(os.path.dirname(__file__), "aza_admin_control_shell.py") with open(path, encoding="utf-8") as f: src = f.read() self.assertIn("_enrich_license_rows_with_users", src) self.assertIn("Kein Benutzer zugeordnet", src) self.assertNotIn("write(", src.split("def analyse_snapshot")[0]) if __name__ == "__main__": unittest.main()