60 lines
2.8 KiB
Python
60 lines
2.8 KiB
Python
"""
|
|
T-UC1: Trustee — Spesenverarbeitung.
|
|
|
|
Verifies that the trustee feature instances are correctly configured
|
|
with RMA accounting and that system workflow templates exist.
|
|
"""
|
|
|
|
import pytest
|
|
from tests.demo.conftest import _getFeatureInstances
|
|
|
|
|
|
class TestTrusteeSetup:
|
|
|
|
def test_trusteeInstancesExist(self, db, mandateHappylife, mandateAlpina):
|
|
"""Both mandates must have a trustee instance."""
|
|
for mandate in [mandateHappylife, mandateAlpina]:
|
|
mid = mandate.get("id")
|
|
instances = _getFeatureInstances(db, mid, "trustee")
|
|
assert len(instances) >= 1, f"No trustee in {mandate.get('label')}"
|
|
|
|
def test_rmaCredentialsEncrypted(self, db, mandateHappylife):
|
|
"""RMA config must have non-empty encrypted credentials."""
|
|
from modules.features.trustee.datamodelFeatureTrustee import TrusteeAccountingConfig
|
|
mid = mandateHappylife.get("id")
|
|
instances = _getFeatureInstances(db, mid, "trustee")
|
|
iid = instances[0].get("id")
|
|
configs = db.getRecordset(TrusteeAccountingConfig, recordFilter={"featureInstanceId": iid})
|
|
assert configs
|
|
enc = configs[0].get("encryptedConfig", "")
|
|
assert enc and len(enc) > 10, "encryptedConfig should be a non-trivial encrypted blob"
|
|
|
|
def test_rmaCredentialsDecryptable(self, db, mandateHappylife):
|
|
"""Encrypted RMA config must be decryptable and contain expected keys."""
|
|
import json
|
|
from modules.features.trustee.datamodelFeatureTrustee import TrusteeAccountingConfig
|
|
from modules.shared.configuration import decryptValue
|
|
mid = mandateHappylife.get("id")
|
|
instances = _getFeatureInstances(db, mid, "trustee")
|
|
iid = instances[0].get("id")
|
|
configs = db.getRecordset(TrusteeAccountingConfig, recordFilter={"featureInstanceId": iid})
|
|
enc = configs[0].get("encryptedConfig", "")
|
|
plain = json.loads(decryptValue(enc, userId="system", keyName="accountingConfig"))
|
|
assert "apiBaseUrl" in plain
|
|
assert "clientName" in plain
|
|
assert "apiKey" in plain
|
|
assert plain["apiKey"], "apiKey should not be empty"
|
|
|
|
|
|
class TestSystemWorkflowTemplates:
|
|
|
|
def test_systemTemplatesExist(self, db):
|
|
"""System workflow templates should exist (created by system bootstrap, not demo config)."""
|
|
from modules.features.graphicalEditor.datamodelFeatureGraphicalEditor import AutoWorkflow
|
|
try:
|
|
templates = db.getRecordset(AutoWorkflow, recordFilter={"isTemplate": True, "templateScope": "system"})
|
|
except Exception:
|
|
pytest.skip("AutoWorkflow table not accessible from app DB")
|
|
return
|
|
if len(templates) == 0:
|
|
pytest.skip("No system workflow templates — run full system bootstrap first")
|