"""Unit-Tests für Account-Lifecycle und Capability-Helfer (ohne DB).""" import pytest from fastapi import HTTPException from account_lifecycle import ( account_state_satisfies, assert_min_account_state, resolve_account_state, ) from capabilities import club_roles_in_club from tenant_context import TenantContext def test_resolve_account_state_platform_admin(): assert ( resolve_account_state(email_verified=False, global_role="superadmin", has_active_membership=False) == "platform_admin" ) def test_resolve_account_state_unverified(): assert ( resolve_account_state(email_verified=False, global_role="trainer", has_active_membership=True) == "unverified" ) def test_resolve_account_state_pending_club(): assert ( resolve_account_state(email_verified=True, global_role="user", has_active_membership=False) == "verified_pending_club" ) def test_resolve_account_state_active_member(): assert ( resolve_account_state(email_verified=True, global_role="trainer", has_active_membership=True) == "active_member" ) def test_account_state_satisfies(): assert account_state_satisfies("active_member", "active_member") assert account_state_satisfies("active_member", "verified_pending_club") assert not account_state_satisfies("verified_pending_club", "active_member") assert account_state_satisfies("platform_admin", "active_member") def test_assert_min_account_state_blocks(monkeypatch): monkeypatch.setenv("ACCOUNT_GATE_ENFORCE", "1") tenant = TenantContext( profile_id=1, global_role="user", effective_club_id=None, club_ids=frozenset(), memberships=[], account_state="verified_pending_club", ) with pytest.raises(HTTPException) as exc: assert_min_account_state(tenant, "active_member") assert exc.value.status_code == 403 def test_assert_min_account_state_off(monkeypatch): monkeypatch.setenv("ACCOUNT_GATE_ENFORCE", "0") tenant = TenantContext( profile_id=1, global_role="user", effective_club_id=None, club_ids=frozenset(), memberships=[], account_state="verified_pending_club", ) assert_min_account_state(tenant, "active_member") def test_club_roles_in_club(): tenant = TenantContext( profile_id=1, global_role="trainer", effective_club_id=5, club_ids=frozenset({5}), memberships=[{"id": 5, "roles": ["trainer", "club_admin"]}], ) assert club_roles_in_club(tenant, 5) == ["trainer", "club_admin"] assert club_roles_in_club(tenant, 99) == []