"""Tests pour le viewer Flask.""" import json import os import pytest from pathlib import Path from unittest.mock import patch from src.viewer.app import create_app, compute_group_stats, severity_badge, format_duration, format_cpam_text from src.viewer.pdf_redactor import load_entities_from_report, redact_pdf, highlight_text from src.config import DossierMedical, Diagnostic, ActeCCAM @pytest.fixture def app(): with patch.dict(os.environ, {"T2A_DEMO_USER": "", "T2A_DEMO_PASS": ""}): app = create_app() app.config["TESTING"] = True yield app @pytest.fixture def client(app): return app.test_client() class TestGroupStats: def test_group_stats(self): items = [ { "dossier": DossierMedical( diagnostics_associes=[ Diagnostic(texte="HTA", cim10_suggestion="I10"), Diagnostic(texte="Diabète", cim10_suggestion="E11.9", est_cma=True), ], actes_ccam=[ ActeCCAM(texte="Cholé", code_ccam_suggestion="HMFC004"), ], alertes_codage=["Alerte 1", "Alerte 2"], ), }, { "dossier": DossierMedical( diagnostics_associes=[ Diagnostic(texte="Obésité", cim10_suggestion="E66.0"), ], actes_ccam=[ ActeCCAM(texte="TDM", code_ccam_suggestion="ZCQK002"), ], alertes_codage=[], ), }, ] stats = compute_group_stats(items) assert stats["das_count"] == 3 assert stats["actes_count"] == 2 assert stats["alertes_count"] == 2 assert stats["cma_count"] == 1 def test_group_stats_empty(self): stats = compute_group_stats([]) assert stats["das_count"] == 0 assert stats["alertes_count"] == 0 class TestSeverityBadgeFilter: def test_severe(self): result = severity_badge("severe") assert "Sévère" in result assert "#dc2626" in result def test_modere(self): result = severity_badge("modere") assert "Modéré" in result def test_leger(self): result = severity_badge("leger") assert "Léger" in result def test_none(self): result = severity_badge(None) assert result == "" def test_unknown(self): result = severity_badge("inconnu") assert result == "" class TestFormatDuration: def test_none(self): assert format_duration(None) == "" def test_seconds_only(self): assert format_duration(45.3) == "45.3s" def test_minutes(self): assert format_duration(150.0) == "2min 30s" def test_exact_minutes(self): assert format_duration(120.0) == "2min" def test_large_duration(self): assert format_duration(1257.65) == "20min 57s" class TestIndexPageLoads: def test_index_page_loads(self, client): response = client.get("/") assert response.status_code == 200 assert b"Dossiers" in response.data class TestFormatCpamText: def test_plain_text(self): result = format_cpam_text("Un simple paragraphe.") assert "Premier argument" in result assert "
  • Deuxième argument
  • " in result def test_mixed_text_and_bullets(self): text = "Introduction\n- Point A\n- Point B\nConclusion" result = format_cpam_text(text) assert "Point A" in result assert "Conclusion" in result def test_none_input(self): result = format_cpam_text(None) assert result == "" def test_empty_input(self): result = format_cpam_text("") assert result == "" def test_html_escaping(self): result = format_cpam_text("Test ") assert "