from scripts.vault.model import Consumer, FileEntry, PackageInfo, Provider, WiringReport from scripts.vault.render import ( BANNIERE, render_index, render_package, render_wiring, slug, ) def _paquet(): return PackageInfo( key="backend/adapters/inference", kind="backend", files=[ FileEntry(path="backend/adapters/inference/z.py", loc=10), FileEntry(path="backend/adapters/inference/a.py", loc=5), ], imports_out={"backend/core/ports", "backend/core/domain"}, imports_in={"backend/api/animetix"}, ) def test_slug_remplace_les_separateurs(): assert slug("backend/adapters/inference") == "backend-adapters-inference" def test_la_banniere_ouvre_chaque_note_generee(): assert render_package(_paquet()).startswith(BANNIERE) def test_les_fichiers_sont_tries_par_chemin(): rendu = render_package(_paquet()) assert rendu.index("a.py") < rendu.index("z.py") def test_les_dependances_sont_triees_et_en_wikiliens(): rendu = render_package(_paquet()) assert "[[backend-core-domain]]" in rendu assert rendu.index("backend-core-domain") < rendu.index("backend-core-ports") def test_une_section_vide_dit_rien(): vide = PackageInfo(key="backend/core/utils", kind="backend") assert "- (rien)" in render_package(vide) def test_le_total_de_lignes_est_affiche(): assert "15 lignes" in render_package(_paquet()) def test_le_rendu_est_stable(): assert render_package(_paquet()) == render_package(_paquet()) def test_le_cablage_liste_providers_et_consommateurs(): rapport = WiringReport( providers=[ Provider( chemin="core.game_service", nature="Singleton", cible="GameService" ) ], consumers=[ Consumer( fichier="backend/api/animetix/api/explore.py", provider="core.feed_composer", ) ], ) rendu = render_wiring(rapport) assert "core.game_service" in rendu assert "GameService" in rendu assert "core.feed_composer" in rendu assert rendu.startswith(BANNIERE) def test_l_index_liste_les_paquets_tries_par_couche(): rendu = render_index( [ PackageInfo(key="frontend/src/features/manga-reader", kind="frontend"), PackageInfo(key="backend/core/domain", kind="backend"), ] ) assert rendu.index("backend-core-domain") < rendu.index( "frontend-src-features-manga-reader" )