118 lines
5.1 KiB
Python
Executable File
118 lines
5.1 KiB
Python
Executable File
import asyncio
|
|
import sys
|
|
import os
|
|
|
|
# Útvonal beállítása
|
|
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
|
|
|
|
# --- JAVÍTÁS 1: A Helyes Aszinkron Session Importálása ---
|
|
from app.db.session import AsyncSessionLocal
|
|
# ---------------------------------------------------------
|
|
|
|
from app.models.user import User
|
|
from app.models.social import ServiceProvider, Competition, ModerationStatus
|
|
from app.services.social_service import vote_for_provider
|
|
from sqlalchemy import text
|
|
from datetime import datetime, timedelta
|
|
|
|
async def run_simulation():
|
|
# --- JAVÍTÁS 2: Itt is az AsyncSessionLocal-t használjuk ---
|
|
async with AsyncSessionLocal() as db:
|
|
# -----------------------------------------------------------
|
|
print("--- 1. TAKARÍTÁS (Előző tesztadatok törlése) ---")
|
|
# Kaszkádolt törlés a data sémában
|
|
await db.execute(text("TRUNCATE TABLE data.user_scores, data.votes, data.service_providers, data.competitions, data.users RESTART IDENTITY CASCADE"))
|
|
await db.commit()
|
|
|
|
print("\n--- 2. SZEREPLŐK LÉTREHOZÁSA ---")
|
|
# Admin
|
|
admin = User(email="admin@test.com", password_hash="hash", full_name="Admin", is_superuser=True)
|
|
# Jófiú (aki valós boltokat tölt fel)
|
|
good_user = User(email="good@test.com", password_hash="hash", full_name="Good Guy", reputation_score=5)
|
|
# Rosszfiú (aki fake boltokat tölt fel)
|
|
bad_user = User(email="bad@test.com", password_hash="hash", full_name="Spammer", reputation_score=-8) # Közel a banhoz
|
|
# Szavazóközönség
|
|
voter1 = User(email="voter1@test.com", password_hash="hash", full_name="Voter 1")
|
|
voter2 = User(email="voter2@test.com", password_hash="hash", full_name="Voter 2")
|
|
voter3 = User(email="voter3@test.com", password_hash="hash", full_name="Voter 3")
|
|
voter4 = User(email="voter4@test.com", password_hash="hash", full_name="Voter 4")
|
|
voter5 = User(email="voter5@test.com", password_hash="hash", full_name="Voter 5")
|
|
|
|
db.add_all([admin, good_user, bad_user, voter1, voter2, voter3, voter4, voter5])
|
|
await db.commit()
|
|
|
|
# ID-k lekérése
|
|
for u in [good_user, bad_user, voter1, voter2, voter3, voter4, voter5]:
|
|
await db.refresh(u)
|
|
|
|
print("\n--- 3. VERSENY INDÍTÁSA ---")
|
|
race = Competition(
|
|
name="Nagy Januári Verseny",
|
|
description="Töltsd fel a legtöbb boltot!",
|
|
start_date=datetime.utcnow() - timedelta(days=1),
|
|
end_date=datetime.utcnow() + timedelta(days=30),
|
|
is_active=True
|
|
)
|
|
db.add(race)
|
|
await db.commit()
|
|
await db.refresh(race)
|
|
|
|
print("\n--- 4. SZCENÁRIÓ A: A JÓ FELHASZNÁLÓ ---")
|
|
# Good Guy feltölt egy boltot
|
|
good_shop = ServiceProvider(
|
|
name="Korrekt Gumiszerviz",
|
|
address="Fő utca 1.",
|
|
added_by_user_id=good_user.id,
|
|
status=ModerationStatus.pending
|
|
)
|
|
db.add(good_shop)
|
|
await db.commit()
|
|
await db.refresh(good_shop)
|
|
|
|
# A tömeg megszavazza (Kell 5 pont az elfogadáshoz)
|
|
print(f"Szavazás a '{good_shop.name}' boltra...")
|
|
await vote_for_provider(db, voter1.id, good_shop.id, 1)
|
|
await vote_for_provider(db, voter2.id, good_shop.id, 1)
|
|
await vote_for_provider(db, voter3.id, good_shop.id, 1)
|
|
await vote_for_provider(db, voter4.id, good_shop.id, 1)
|
|
await vote_for_provider(db, voter5.id, good_shop.id, 1) # Itt éri el az 5-öt!
|
|
|
|
# Eredmény ellenőrzése
|
|
await db.refresh(good_user)
|
|
print(f"Good Guy Hírneve (Elvárt: 6): {good_user.reputation_score}")
|
|
|
|
# Pontszám ellenőrzése
|
|
points = await db.execute(text(f"SELECT points FROM data.user_scores WHERE user_id={good_user.id}"))
|
|
scalar_points = points.scalar()
|
|
print(f"Good Guy Verseny Pontjai (Elvárt: 10): {scalar_points}")
|
|
|
|
print("\n--- 5. SZCENÁRIÓ B: A ROSSZ FELHASZNÁLÓ (AUTO-BAN TESZT) ---")
|
|
# Bad Guy feltölt egy fake boltot
|
|
fake_shop = ServiceProvider(
|
|
name="KAMU Bolt",
|
|
address="Nincs ilyen utca",
|
|
added_by_user_id=bad_user.id,
|
|
status=ModerationStatus.pending
|
|
)
|
|
db.add(fake_shop)
|
|
await db.commit()
|
|
await db.refresh(fake_shop)
|
|
|
|
# A tömeg leszavazza (Kell -3 az elutasításhoz)
|
|
print(f"Szavazás a '{fake_shop.name}' boltra...")
|
|
await vote_for_provider(db, voter1.id, fake_shop.id, -1)
|
|
await vote_for_provider(db, voter2.id, fake_shop.id, -1)
|
|
await vote_for_provider(db, voter3.id, fake_shop.id, -1) # Itt éri el a -3-at!
|
|
|
|
# Eredmény ellenőrzése
|
|
await db.refresh(bad_user)
|
|
print(f"Bad User Hírneve (Elvárt: -10): {bad_user.reputation_score}")
|
|
print(f"Bad User Aktív? (Elvárt: False/Banned): {bad_user.is_active}")
|
|
|
|
if not bad_user.is_active:
|
|
print("✅ SIKER: A rendszer automatikusan kitiltotta a csalót!")
|
|
else:
|
|
print("❌ HIBA: A felhasználó még mindig aktív.")
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(run_simulation()) |