Инициализировать репозиторий «Дейл»
Первый коммит: модульный монолит ядра (.NET 10) и gRPC-сервисы ai/ml/telegram, фронтенд Vue 3/Vite/Tailwind, документация (ТЗ, инструкция пользователя, техдокументация, код-стайл), бэклог, скрипты развёртывания и архив прототипа LeadRadar.
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
"""Временный 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")
|
||||
Reference in New Issue
Block a user