141 lines
5.5 KiB
Python
141 lines
5.5 KiB
Python
|
|
# -*- 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()
|