test: hard-fail the suite when the tenant resolves to production
Session-scoped autouse guard in tests/conftest.py refuses to run any test (pytest.exit, returncode 1) when the effective tenant resolves to the production tenant jpmschweitzer - the same guard library-desk applies on its side. _initialize_app now depends on the guard so the refusal happens before any initialization. Suite-level assertions pin that the live session runs under the llm_tester namespaces: Qdrant memories_llm_tester collection and Redis session:llm_tester:* keys. The biographer/memory unit tests already run fully mocked (no shared-service writes); the e2e isolation tests already used llm_tester - their constants now derive from the shared TEST_TENANT/PRODUCTION_TENANT config constants so a drift fails loudly instead of silently splitting. Verified: ENVIRONMENT=production pytest run exits 1 with the TENANT GUARD message and zero tests executed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -141,6 +141,44 @@ class TestRequestContextGuard:
|
||||
assert get_user() == "alice"
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
class TestSuiteRunsUnderTestTenant:
|
||||
"""
|
||||
The live test session itself must resolve to the test tenant.
|
||||
|
||||
The session guard in tests/conftest.py hard-fails the suite when the
|
||||
effective tenant is the production tenant; these tests assert the
|
||||
namespaces every shared-service touch would use (Qdrant memories
|
||||
collection, Redis session keys) are the llm_tester ones.
|
||||
"""
|
||||
|
||||
def test_effective_tenant_is_not_production(self):
|
||||
from src.core.context import get_default_user
|
||||
|
||||
assert get_default_user() != PRODUCTION_TENANT
|
||||
|
||||
def test_effective_tenant_is_the_reserved_test_tenant(self):
|
||||
from src.core.context import get_default_user
|
||||
|
||||
assert get_default_user() == TEST_TENANT
|
||||
|
||||
def test_memories_collection_namespace_is_test_tenant(self):
|
||||
from src.core.context import get_default_user
|
||||
from src.core.multi_tenancy import get_memory_collection_name
|
||||
|
||||
assert (
|
||||
get_memory_collection_name(get_default_user())
|
||||
== f"memories_{TEST_TENANT}"
|
||||
)
|
||||
|
||||
def test_redis_session_namespace_is_test_tenant(self):
|
||||
from src.core.context import get_default_user
|
||||
from src.core.multi_tenancy import get_session_key
|
||||
|
||||
key = get_session_key(get_default_user(), "conv_test")
|
||||
assert key.startswith(f"session:{TEST_TENANT}:")
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
class TestStartupTenantGuardLog:
|
||||
"""One loud startup log line states the effective tenant."""
|
||||
|
||||
Reference in New Issue
Block a user