Ctrl K
ComunidadGuías…

tests/test_reload_doc.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""Tests du endpoint /api/reload-doc (réindexation à chaud)."""

import sys
from pathlib import Path

import pytest
from httpx import ASGITransport, AsyncClient

sys.path.insert(0, str(Path(__file__).resolve().parents[1]))

from app import main as app_main  # noqa: E402
from app.main import app  # noqa: E402


@pytest.fixture
def client():
    return AsyncClient(transport=ASGITransport(app=app), base_url="http://test")


async def test_reload_doc_reindexe_et_compte(client, monkeypatch):
    calls = []

    async def fake_index(memory):
        calls.append(memory)
        return 57

    monkeypatch.setattr(app_main, "index_knowledge", fake_index)
    response = await client.post(
        "/api/reload-doc",
        headers={"X-Vektor-Token": app_main.get_settings().vektor_api_token},
    )
    assert response.status_code == 200
    assert "57 extraits" in response.json()["report"]
    assert calls and calls[0] is app_main.memory  # sur la vraie mémoire


async def test_reload_doc_echec_reponse_claire_et_pas_de_perte(client, monkeypatch):
    async def boom(memory):
        raise RuntimeError("postgres down")

    monkeypatch.setattr(app_main, "index_knowledge", boom)
    response = await client.post(
        "/api/reload-doc",
        headers={"X-Vektor-Token": app_main.get_settings().vektor_api_token},
    )
    assert response.status_code == 500
    assert "index précédent conservé" in response.json()["detail"]


async def test_reload_doc_sans_token_refuse(client):
    response = await client.post("/api/reload-doc")
    assert response.status_code == 401


async def test_reload_doc_est_un_post_pas_un_get(client):
    response = await client.get(
        "/api/reload-doc",
        headers={"X-Vektor-Token": app_main.get_settings().vektor_api_token},
    )
    assert response.status_code == 405