Seed app/data/operatii-etichetate.json regenerat cu subagenti Haiku pe TOATE cele 17181 operatii distincte (ordine frecventa, 100%), inlocuind seed-ul Groq (3758). Validare Haiku vs Groq pe 157 op etichetate: la dezacorduri Haiku corect ~22/30, Groq ~0. Haiku prinde gunoiul ratat de Groq (ITP, chirie anvelope, nume piese fara actiune): NUL 2200 (12.8%) vs ~7.6% Groq; adaptare electronica OE-7 (nu OE-5), placute frana uzura OE-1 (nu OE-F avarie). US-001..006: prefiltru NUL determinist, etichetator offline, generator seed, seeder mapping_suggestions (in init_db, gated seed_operatii_enabled), embeddings indexeaza corpus etichetat, enrich NUL+kNN. Distributie seed: OE-1 80.1%, NUL 12.8%, OE-2 3.5%, restul rar (OE-4/3/7/8/R/I/5, AITLV, R-ODO). config: seed_operatii_enabled=True + embeddings_enabled=True implicit (SILVER populat + sugestii semantice; ambele suggestion-only, dezactivabile prin env). Suita: 1387 passed, 1 deselected (live). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
72 lines
3.1 KiB
Python
72 lines
3.1 KiB
Python
"""Configurare pytest la nivel de suita: izoleaza testele de `.env`-ul de dezvoltare.
|
|
|
|
In working-dir exista un `.env` pentru probe live (ex. `AUTOPASS_REQUIRE_API_KEY=true`,
|
|
`AUTOPASS_WORKER_USE_TEST_CREDS=true`, creds RAR de test) care e citit automat de
|
|
pydantic Settings. Fara izolare, acele flag-uri ar regla tacit comportamentul
|
|
testelor: 401 pe rutele protejate si creds <test> in loc de fallback-ul pe cont.
|
|
|
|
Fixam un default sigur pe variabilele de mediu — care au PRECEDENTA peste fisierul
|
|
`.env` in pydantic-settings — deci neutralizam doar valorile din fisier, nu si o
|
|
variabila exportata explicit in shell. Testele care chiar verifica enforcement-ul
|
|
(auth pornit, creds <test>) il seteaza punctual prin `monkeypatch`/`object.__setattr__`.
|
|
"""
|
|
|
|
import hashlib
|
|
import os
|
|
|
|
import pytest
|
|
|
|
os.environ.setdefault("AUTOPASS_REQUIRE_API_KEY", "false")
|
|
os.environ.setdefault("AUTOPASS_WORKER_USE_TEST_CREDS", "false")
|
|
# Embeddings e ON implicit in app (config.py), dar in teste il lasam OFF ca sa nu
|
|
# lazy-load-eze modelul de ~230MB la fiecare test care atinge editorul de mapari
|
|
# (suita rapida, fara download in CI). Testele de embeddings il pornesc punctual.
|
|
os.environ.setdefault("AUTOPASS_EMBEDDINGS_ENABLED", "false")
|
|
# Seed-ul de operatii etichetate (SILVER, PRD 5.18) e ON in app, dar OFF in teste:
|
|
# multe teste presupun mapping_suggestions GOL la init_db. Testele US-004/005/006 il
|
|
# pornesc punctual (object.__setattr__ pe settings sau apel direct la seeder).
|
|
os.environ.setdefault("AUTOPASS_SEED_OPERATII_ENABLED", "false")
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def _reset_embeddings_singleton():
|
|
"""Reseteaza singleton-ul global de embeddings intre teste (izolare de ordine).
|
|
|
|
`enrich_suggestions` foloseste `embeddings.has_corpus()` ca poarta; un test care
|
|
indexeaza corpusul pe singleton-ul global (ex. test_module_level_index_corpus)
|
|
altfel l-ar lasa populat -> teste ulterioare care cheama pending_unmapped ar primi
|
|
sugestii embedding spurioase. Resetam la None inainte si dupa fiecare test.
|
|
"""
|
|
try:
|
|
import app.embeddings as _emb
|
|
_emb._engine = None
|
|
except Exception:
|
|
pass
|
|
yield
|
|
try:
|
|
import app.embeddings as _emb
|
|
_emb._engine = None
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
def make_test_cui(seed: str = "") -> str:
|
|
"""Factory centralizat (D#14, PRD 5.12 US-001): genereaza un CUI de test unic din seed.
|
|
|
|
Folosit de fixture-urile de test care creeaza conturi via /signup sau create_account
|
|
si au nevoie de un CUI unic per test (altfel unicitatea CUI-ului bloca al doilea signup
|
|
cu acelasi seed in acelasi DB de test).
|
|
|
|
Formatul 'ROTE' + 8 hex-uri e suficient de unic per DB de test (izolata per test).
|
|
"""
|
|
h = hashlib.md5(seed.encode()).hexdigest()[:8].upper()
|
|
return f"ROTE{h}"
|
|
|
|
|
|
def pytest_configure(config):
|
|
"""Markeri custom. `live` = teste care ating endpoint-ul real RAR (opt-in,
|
|
skip implicit; vezi tests/test_live_rar.py). Excludere: `-m 'not live'`."""
|
|
config.addinivalue_line(
|
|
"markers", "live: test live pe RAR test (necesita AUTOPASS_LIVE_RAR=1 + creds reale)"
|
|
)
|