""" Smoke test for BOT/render_recap.py in --mode player. Usage: source ../SHARED/.venv/bin/activate && python BOT/tests/smoke_player_recap.py """ import sqlite3 import os import subprocess import sys import tempfile from pathlib import Path _storage_env = os.environ.get("STORAGE_VOL_PATH", "").strip() if not _storage_env: raise RuntimeError("STORAGE_VOL_PATH must be set") STORAGE = Path(_storage_env) SEASON_START = "1772348400" SEASON_END = "1777852799" SEASON = "2026-II" def pick_uid() -> str: conn = sqlite3.connect(f"file:{STORAGE/'sq_battles.db'}?mode=ro", uri=True) cur = conn.execute( "SELECT UID FROM player_games_hist " "WHERE endtime_unix BETWEEN ? AND ? " "GROUP BY UID ORDER BY COUNT(*) DESC LIMIT 1", (int(SEASON_START), int(SEASON_END)), ) row = cur.fetchone() conn.close() return row[0] if row else "" def run_smoke(uid: str, theme: str = "dark", lang: str = "en") -> int: with tempfile.TemporaryDirectory() as tmp: out = Path(tmp) / f"player-{theme}-{lang}.png" cmd = [ sys.executable, "BOT/render_recap.py", "--mode", "player", "--uid", uid, "--season", SEASON, "--season-start", SEASON_START, "--season-end", SEASON_END, "--theme", theme, "--lang", lang, "--out", str(out), ] print("Running:", " ".join(cmd)) result = subprocess.run(cmd, capture_output=True, text=True) print("stdout:", result.stdout) print("stderr:", result.stderr) if result.returncode != 0: print(f"FAIL: exit={result.returncode}") return result.returncode size = out.stat().st_size if out.exists() else 0 if size < 10_000: print(f"FAIL: suspicious size {size} bytes at {out}") return 1 print(f"OK: wrote {size} bytes ({theme}/{lang})") return 0 def main() -> int: uid = pick_uid() if not uid: print("FAIL: no UID with season activity available for smoke test") return 1 print(f"Using UID {uid}") code = 0 for theme in ("light", "dark"): for lang in ("en", "ru"): code |= run_smoke(uid, theme=theme, lang=lang) return code if __name__ == "__main__": sys.exit(main())