"""Tests Sprint 25 — refactor web frontend miroir du Sprint 17. Sprint 17 a découpé le rapport HTML monolithique en 10 fichiers Jinja2. Sprint 25 fait pareil pour la SPA web : l'ancien ``_HTML_TEMPLATE`` de ~1500 lignes string Python (3000+ lignes au total avec le JS) dans ``picarones/web/app.py`` est remplacé par : picarones/web/templates/ ├── base.html.j2 ├── _ascii_banner.html ├── _header_nav.html ├── _view_benchmark.html ├── _view_reports.html ├── _view_engines.html ├── _view_import.html └── _modals.html picarones/web/static/ ├── retro.css (existait déjà) └── web-app.js (extrait du `` inline avec du code dans la page rendue — uniquement des `` inline avec du code # --------------------------------------------------------------------------- class TestNoInlineScriptCode: """Sprint 25 a extrait tout le JS dans /static/web-app.js. La page rendue ne doit plus contenir un bloc ```` qui embarque du code (les ```` restent autorisés).""" def test_no_large_inline_script_block(self): from picarones.interfaces.web._legacy.routers.home import render_index as _render_index html = _render_index("fr") # Capture tout le contenu entre . pattern = re.compile( r"]*\bsrc=)[^>]*>(.*?)", re.DOTALL, ) for body in pattern.findall(html): # Quelques bytes blancs sont tolérés (ex. ) stripped = body.strip() assert len(stripped) < 200, ( "Un bloc