Files
service-finder/test_hierarchical_params.py
2026-03-13 10:22:41 +00:00

119 lines
4.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
Teszt szkript a hierarchikus System Parameters működésének ellenőrzéséhez.
Futtatás: docker exec sf_api python /app/test_hierarchical_params.py
"""
import asyncio
import sys
import os
sys.path.insert(0, '/app')
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker
from app.models.system import SystemParameter, ParameterScope
from app.services.system_service import system_service
DATABASE_URL = os.getenv("DATABASE_URL", "postgresql+asyncpg://postgres:postgres@postgres:5432/service_finder")
async def test_hierarchical():
engine = create_async_engine(DATABASE_URL, echo=False)
async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
async with async_session() as db:
# Töröljük a teszt paramétereket, ha vannak
await db.execute(
SystemParameter.__table__.delete().where(SystemParameter.key == "test.hierarchical")
)
await db.commit()
# 1. GLOBAL paraméter létrehozása
global_param = SystemParameter(
key="test.hierarchical",
value={"message": "global value"},
scope_level=ParameterScope.GLOBAL,
scope_id=None,
category="test",
is_active=True,
)
db.add(global_param)
# 2. COUNTRY paraméter létrehozása (HU)
country_param = SystemParameter(
key="test.hierarchical",
value={"message": "country HU value"},
scope_level=ParameterScope.COUNTRY,
scope_id="HU",
category="test",
is_active=True,
)
db.add(country_param)
# 3. REGION paraméter létrehozása (budapest)
region_param = SystemParameter(
key="test.hierarchical",
value={"message": "region budapest value"},
scope_level=ParameterScope.REGION,
scope_id="budapest",
category="test",
is_active=True,
)
db.add(region_param)
# 4. USER paraméter létrehozása (user_123)
user_param = SystemParameter(
key="test.hierarchical",
value={"message": "user user_123 value"},
scope_level=ParameterScope.USER,
scope_id="user_123",
category="test",
is_active=True,
)
db.add(user_param)
await db.commit()
# Teszt: csak global scope (nincs user, region, country)
value = await system_service.get_scoped_parameter(db, "test.hierarchical", default=None)
print(f"Global only: {value}")
assert value["message"] == "global value"
# COUNTRY scope (HU)
value = await system_service.get_scoped_parameter(db, "test.hierarchical", country_code="HU", default=None)
print(f"Country HU: {value}")
assert value["message"] == "country HU value"
# REGION scope (budapest) a region a country feletti prioritás? A prioritási sorrend: User > Region > Country > Global
# Ha region_id megadva, de country_code is, akkor region elsőbbséget élvez.
value = await system_service.get_scoped_parameter(db, "test.hierarchical", region_id="budapest", country_code="HU", default=None)
print(f"Region budapest (with country HU): {value}")
assert value["message"] == "region budapest value"
# USER scope (user_123) legmagasabb prioritás
value = await system_service.get_scoped_parameter(db, "test.hierarchical", user_id="user_123", region_id="budapest", country_code="HU", default=None)
print(f"User user_123 (with region and country): {value}")
assert value["message"] == "user user_123 value"
# Nem létező user, de létező region
value = await system_service.get_scoped_parameter(db, "test.hierarchical", user_id="nonexistent", region_id="budapest", country_code="HU", default=None)
print(f"Non-existent user, region budapest: {value}")
assert value["message"] == "region budapest value"
# Nem létező region, de létező country
value = await system_service.get_scoped_parameter(db, "test.hierarchical", region_id="nonexistent", country_code="HU", default=None)
print(f"Non-existent region, country HU: {value}")
assert value["message"] == "country HU value"
# Semmi specifikus global
value = await system_service.get_scoped_parameter(db, "test.hierarchical", default=None)
print(f"Fallback to global: {value}")
assert value["message"] == "global value"
# Törlés
await db.execute(
SystemParameter.__table__.delete().where(SystemParameter.key == "test.hierarchical")
)
await db.commit()
print("✅ Minden teszt sikeres!")
if __name__ == "__main__":
asyncio.run(test_hierarchical())