Initial commit: Robot ökoszisztéma v2.0 - Stabilizált jármű és szerviz robotok
This commit is contained in:
91
backend/app/tests_internal/test_gamification_flow.py
Executable file
91
backend/app/tests_internal/test_gamification_flow.py
Executable file
@@ -0,0 +1,91 @@
|
||||
# /opt/docker/dev/service_finder/backend/app/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.system 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())
|
||||
Reference in New Issue
Block a user