"""Временный boot-тест №2: шифрование, FTS, demo, check-message, recompute.""" import os import sys import tempfile # devtests/ лежит внутри backend/ — кладём в path сам backend tmp = tempfile.mkdtemp(prefix="leadradar_boot2_") os.environ["LEADRADAR_DATA"] = tmp os.environ["LEADRADAR_DEMO"] = "1" sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from fastapi.testclient import TestClient # noqa: E402 from app.main import app # noqa: E402 from app.services import rates as R # noqa: E402 def seed_lead(client): # ручной лид через demo-эндпоинт (не требует ИИ/телеграма) r = client.post("/api/demo/simulate-lead") assert r.status_code == 200, r.text return r.json() with TestClient(app) as client: assert client.get("/api/health").status_code == 200 assert client.post("/api/auth/login", json={"login": "admin", "password": "admin"}).status_code == 200 # шифрование настроек aiConfigs (класс провайдера) s = client.patch("/api/settings", json={"aiConfigs": {"deepseek": {"apiKey": "sk-abcdefgh1234"}}}) assert s.status_code == 200, s.text pub = client.get("/api/settings").json() assert pub["aiConfigs"]["deepseek"]["keySet"] is True, pub["aiConfigs"] # FTS rebuild f = client.post("/api/admin/fts/rebuild") assert f.status_code == 200 and f.json()["ready"] is True, f.text # демо-лид + поиск lead = seed_lead(client) assert lead.get("id"), lead q = client.get("/api/search", params={"q": "Python"}).json() assert isinstance(q["leads"], list) # check-message (этап 1: стоп-фразы без ИИ) cm = client.post("/api/admin/check-message", json={"text": "Ищу работу на неделю, вот моё резюме и портфолио"}) assert cm.status_code == 200 and cm.json()["passed"] is False and cm.json()["stage1"]["pass"] is False, cm.text # пересчёт конверсий при смене валюты (архивные не трогаем) R.save_rates({"RUB": 1.0, "USD": 100.0}, "mock") client.patch("/api/settings", json={"targetCurrency": "RUB", "conversionOn": True}) refreshed = client.get("/api/settings").json() assert refreshed["targetCurrency"] == "RUB" tick = client.post("/api/admin/tick") assert tick.status_code == 200 print("BOOT2 OK")