# /opt/docker/dev/service_finder/backend/app/tests_internal/test_gamification_flow.py import asyncio import os import sys import logging from sqlalchemy import select from dotenv import load_dotenv # Környezeti változók betöltése load_dotenv() # MB2.0 Importok from app.database import AsyncSessionLocal from app.models.identity import User from app.models import UserStats, PointsLedger from app.services.social_service import SocialService from app.schemas.social import ServiceProviderCreate # Naplózás beállítása logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] Sentinel-Test: %(message)s') logger = logging.getLogger("Gamification-Test") async def run_test(): logger.info("🚀 Gamifikációs integrációs folyamat tesztelése...") async with AsyncSessionLocal() as db: try: # 1. LOGIKA: Teszt felhasználó lekérése az identity sémából result = await db.execute(select(User).limit(1)) user = result.scalars().first() if not user: logger.error("❌ Hiba: Nincs felhasználó az adatbázisban. Futtasd a seed_system.py-t!") return logger.info(f"👤 Aktív teszt alany: {user.email}") # 2. LOGIKA: Új szolgáltató rögzítése (Trigger az XP szerzéshez) # A SocialService.create_service_provider automatikusan hívja a GamificationService-t unique_id = os.urandom(2).hex() test_provider = ServiceProviderCreate( name=f"Robot Szerviz {unique_id}", address="Alchemist utca 12.", category="service" ) logger.info(f"🛠️ Esemény kiváltása: '{test_provider.name}' rögzítése...") new_provider = await SocialService.create_service_provider(db, test_provider, user.id) # Commit kényszerítése, hogy a háttérfolyamatok rögzüljenek await db.commit() logger.info(f"✅ Szolgáltató elfogadva (ID: {new_provider.id})") # 3. LOGIKA: Eredmények ellenőrzése a Ledgerben (Főkönyv) # Újra lekérjük a statisztikákat a commit után stats_res = await db.execute(select(UserStats).where(UserStats.user_id == user.id)) stats = stats_res.scalar_one_or_none() ledger_res = await db.execute( select(PointsLedger) .where(PointsLedger.user_id == user.id) .order_by(PointsLedger.created_at.desc()) .limit(1) ) last_entry = ledger_res.scalars().first() print("\n" + "═"*40) print("📊 INTEGRÁCIÓS JELENTÉS:") if stats: print(f"🏆 Aktuális XP: {stats.total_xp}") print(f"📈 Szint: {stats.current_level}") else: print("⚠️ UserStats rekord nem található!") if last_entry: print(f"📝 Tranzakció oka: {last_entry.reason}") print(f"💰 XP változás: +{last_entry.points_change}") print("═"*40 + "\n") if stats and stats.total_xp > 0: logger.info("✅ SIKER: A gamifikációs lánc éles és működik!") else: logger.warning("❌ HIBA: A pontszámítás nem történt meg.") except Exception as e: logger.error(f"💥 Kritikus hiba a teszt közben: {e}") import traceback traceback.print_exc() if __name__ == "__main__": asyncio.run(run_test())