Spaces:
Runtime error
Runtime error
Commit History
-
Etape 6 : isolation des tests corrigee — 300 tests passent
Trois defauts d'isolation, dont un qui masquait tous les autres. 1. Boucles d'evenements desalignees (cause de ~40 HTTP 500) asyncio_default_fixture_loop_scope = session placait les fixtures dans une boucle differente de celle des tests. Les connexions asyncpg creees par les fixtures y etaient "attached to a different loop" ; les routes attrapaient l'exception et renvoyaient 500, ce qui donnait l'illusion de bugs applicatifs. -> portee de boucle alignee (function), moteur async cree par test, migration Alembic isolee dans une fixture SYNCHRONE de session (psycopg2, donc independante des boucles) pour ne pas la rejouer a chaque test. 2. Sequence PostgreSQL non realignee apres semis Inserer les 12 categories avec des ids explicites ne fait pas avancer categories_id_seq : le prochain id auto-genere repartait a 1 et heurtait la premiere categorie. -> setval apres le semis. 3. Purge seulement en sortie de test Une interruption laissait la base sale …9729782
-
Etape 4 : harnais de tests sur PostgreSQL reel
Le conftest utilisait SQLite en memoire. C'etait intenable : le coeur du produit est du SQL PostgreSQL brut (websearch_to_tsquery, ts_rank_cd, DISTINCT ON, = ANY(), similarity(), extension vector) et les objets dont il depend (search_vector, index GIN, triggers, query_cache, embedding_cache) n'existent QUE dans les migrations, jamais dans Base.metadata. create_all ne pouvait pas produire un schema utilisable — une suite verte sur SQLite aurait certifie du code qui renvoie 500 en production. - conftest reecrit : moteur de session construit par `alembic upgrade head` sur une vraie base, isolation par TRUNCATE ... RESTART IDENTITY CASCADE. L'isolation transactionnelle a ete essayee et documentee comme ecartee : les SAVEPOINT du dialecte asyncpg refusent de s'executer dans une transaction ouverte manuellement, et rollback_only casse les tests qui relisent leurs propres ecritures. - Marquage `integration` automatique selon les fixtures demandees, plutot que declare dans 21 fich…0fdac35 -
Etape 0 : l'application et la suite de tests redemarrent
Trois blocages empechaient tout : l'app ne s'importait pas et pytest ne collectait rien. 1. SDK Gemini incompatible gemini_service.py importait google-genai (nouveau) et embedding_service.py google.generativeai (ancien), alors que seul l'ancien etait declare : ImportError au chargement de app.main. -> embedding_service.py porte sur google-genai (genai.Client / embed_content / result.embeddings[].values) ; requirements et pyproject alignes. 2. email-validator absent EmailStr est resolu a la construction des classes : sans lui, l'import de admin.py et schemas/user.py echouait. -> pydantic[email]. 3. SyntaxError dans la suite de tests test_ocr_service.py:42 : caracteres accentues dans un litteral bytes, ce qui faisait echouer la collecte de TOUTE la suite. -> str + .encode("latin-1"). Ameliorations au passage : - generate_embedding accepte task_type ; les requetes utilisent RETRIEVAL_QUERY au lieu de RETRIEVAL_DOCUMENT (la recherche est asymetrique). Le…0833e39
-
chore: initial standalone backend for JuriX API (Render)
9cf9a2a