Files
Deal/archive/leadradar-legacy/backend/devtests/boot_test.py
T
Rustam Khalimov 713d554dc2 Нормализовать переводы строк в LF
Решение по TD-STYLE-ANALYZERS: LF — инструменты проекта (Python/Node) пишут LF,
CRLF-.sh не работают на Linux CI (sh scripts/ci.sh), большинство файлов уже были
LF. Добавлен .gitattributes (* text=auto eol=lf, бинарные исключения),
.editorconfig переведён на lf, 1029 файлов конвертированы, git add --renormalize.
Из индекса убраны закравшиеся archive/**/__pycache__/*.pyc.
2026-09-11 19:01:42 +03:00

58 lines
2.4 KiB
Python

"""Временный 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")