gateway/tests/demo/test_demo_bootstrap.py
ValueOn AG b6be8f391e fixes
2026-04-23 23:09:38 +02:00

140 lines
6.7 KiB
Python

"""
T-BOOT: Bootstrap idempotency and demo state verification.
Tests that the demo config can be loaded twice without errors
and that all expected objects exist afterwards.
"""
import pytest
from modules.datamodels.datamodelUam import Mandate, UserInDB
from modules.datamodels.datamodelFeatures import FeatureInstance
from modules.datamodels.datamodelMembership import UserMandate
from tests.demo.conftest import _getFeatureInstances
class TestDemoBootstrap:
def test_loadIsIdempotent(self, db, demoConfig):
"""Loading the demo config twice must not raise errors."""
summary1 = demoConfig.load(db)
assert "errors" not in summary1 or len(summary1.get("errors", [])) == 0, f"First load errors: {summary1['errors']}"
summary2 = demoConfig.load(db)
assert "errors" not in summary2 or len(summary2.get("errors", [])) == 0, f"Second load errors: {summary2['errors']}"
def test_mandateHappylifeExists(self, db):
records = db.getRecordset(Mandate, recordFilter={"name": "happylife"})
assert len(records) == 1
assert records[0].get("label") == "HappyLife AG"
assert records[0].get("enabled") is True
def test_mandateAlpinaExists(self, db):
records = db.getRecordset(Mandate, recordFilter={"name": "alpina-treuhand"})
assert len(records) == 1
assert records[0].get("label") == "Alpina Treuhand AG"
def test_userPatrickExists(self, db):
records = db.getRecordset(UserInDB, recordFilter={"username": "patrick.helvetia"})
assert len(records) == 1
user = records[0]
assert user.get("email") == "p.motsch@poweron.swiss"
assert user.get("isSysAdmin") is True
assert user.get("language") == "en"
def test_userMembershipBothMandates(self, db, demoUser, mandateHappylife, mandateAlpina):
userId = demoUser.get("id")
for mandate in [mandateHappylife, mandateAlpina]:
mid = mandate.get("id")
memberships = db.getRecordset(UserMandate, recordFilter={"userId": userId, "mandateId": mid})
assert len(memberships) >= 1, f"User not member of mandate {mandate.get('label')}"
@pytest.mark.parametrize("featureCode", ["workspace", "trustee", "graphicalEditor", "neutralization"])
def test_happylifeFeaturesExist(self, db, mandateHappylife, featureCode):
mid = mandateHappylife.get("id")
instances = _getFeatureInstances(db, mid, featureCode)
assert len(instances) >= 1, f"Feature '{featureCode}' missing in HappyLife AG"
@pytest.mark.parametrize("featureCode", ["workspace", "trustee", "graphicalEditor", "neutralization"])
def test_alpinaFeaturesExist(self, db, mandateAlpina, featureCode):
mid = mandateAlpina.get("id")
instances = _getFeatureInstances(db, mid, featureCode)
assert len(instances) >= 1, f"Feature '{featureCode}' missing in Alpina Treuhand AG"
def test_alpinaNoChatbot(self, db, mandateAlpina):
"""Alpina should NOT have a chatbot instance."""
mid = mandateAlpina.get("id")
instances = _getFeatureInstances(db, mid, "chatbot")
assert len(instances) == 0, "Alpina Treuhand should not have chatbot"
def test_happylifeNoChatbot(self, db, mandateHappylife):
"""HappyLife also should NOT have a chatbot instance — chatbot was
removed from the InvestorDemo on 2026-04-20 (see changelog)."""
mid = mandateHappylife.get("id")
instances = _getFeatureInstances(db, mid, "chatbot")
assert len(instances) == 0, "HappyLife should no longer have chatbot (removed 2026-04-20)"
class TestDemoBootstrapRma:
def test_trusteeRmaConfigHappylife(self, db, mandateHappylife):
from modules.features.trustee.datamodelFeatureTrustee import TrusteeAccountingConfig
mid = mandateHappylife.get("id")
instances = _getFeatureInstances(db, mid, "trustee")
assert instances, "No trustee instance in HappyLife"
iid = instances[0].get("id")
configs = db.getRecordset(TrusteeAccountingConfig, recordFilter={"featureInstanceId": iid})
assert len(configs) >= 1, "No RMA config for HappyLife trustee"
assert configs[0].get("connectorType") == "rma"
assert configs[0].get("isActive") is True
def test_trusteeRmaConfigAlpina(self, db, mandateAlpina):
from modules.features.trustee.datamodelFeatureTrustee import TrusteeAccountingConfig
mid = mandateAlpina.get("id")
instances = _getFeatureInstances(db, mid, "trustee")
assert instances, "No trustee instance in Alpina"
iid = instances[0].get("id")
configs = db.getRecordset(TrusteeAccountingConfig, recordFilter={"featureInstanceId": iid})
assert len(configs) >= 1, "No RMA config for Alpina trustee"
assert configs[0].get("connectorType") == "rma"
class TestDemoBootstrapNeutralization:
def test_neutralizationConfigHappylife(self, db, mandateHappylife):
from modules.features.neutralization.datamodelFeatureNeutralizer import DataNeutraliserConfig
mid = mandateHappylife.get("id")
instances = _getFeatureInstances(db, mid, "neutralization")
assert instances
iid = instances[0].get("id")
configs = db.getRecordset(DataNeutraliserConfig, recordFilter={"featureInstanceId": iid})
assert len(configs) >= 1, "No neutralization config for HappyLife"
assert configs[0].get("enabled") is True
def test_neutralizationConfigAlpina(self, db, mandateAlpina):
from modules.features.neutralization.datamodelFeatureNeutralizer import DataNeutraliserConfig
mid = mandateAlpina.get("id")
instances = _getFeatureInstances(db, mid, "neutralization")
assert instances
iid = instances[0].get("id")
configs = db.getRecordset(DataNeutraliserConfig, recordFilter={"featureInstanceId": iid})
assert len(configs) >= 1, "No neutralization config for Alpina"
class TestDemoRemoveAndReload:
def test_removeAndReload(self, db, demoConfig):
"""Remove all demo data, verify gone, then reload."""
removeSummary = demoConfig.remove(db)
assert len(removeSummary.get("errors", [])) == 0, f"Remove errors: {removeSummary['errors']}"
mandates = db.getRecordset(Mandate, recordFilter={"name": "happylife"})
assert len(mandates) == 0, "HappyLife mandate should be gone after remove"
users = db.getRecordset(UserInDB, recordFilter={"username": "patrick.helvetia"})
assert len(users) == 0, "User should be gone after remove"
loadSummary = demoConfig.load(db)
assert len(loadSummary.get("errors", [])) == 0, f"Reload errors: {loadSummary['errors']}"
mandates = db.getRecordset(Mandate, recordFilter={"name": "happylife"})
assert len(mandates) == 1, "HappyLife mandate should exist after reload"