"""Tests unitaires du module Fichiers — UT-06 à UT-08 (décomposition en 8 étapes).""" import io import pytest from werkzeug.datastructures import FileStorage from services import fichier_service def _file_storage(content=b"contenu de test", filename="rapport.pdf", mimetype="application/pdf"): return FileStorage(stream=io.BytesIO(content), filename=filename, content_type=mimetype) def test_ut06_fichier_trop_grand(): fs = _file_storage(content=b"x" * 100) with pytest.raises(fichier_service.FileValidationError): fichier_service.step2_check_size(fs, max_size=50) def test_ut06b_fichier_vide(): fs = _file_storage(content=b"") with pytest.raises(fichier_service.FileValidationError): fichier_service.step2_check_size(fs) def test_ut07_extension_interdite(): with pytest.raises(fichier_service.FileValidationError): fichier_service.step4_check_extension("script.exe") def test_ut07b_extension_autorisee(): ext = fichier_service.step4_check_extension("rapport.pdf") assert ext == "pdf" def test_ut08_nom_genere_est_unique(): name1 = fichier_service.step5_generate_safe_name("pdf") name2 = fichier_service.step5_generate_safe_name("pdf") assert name1 != name2 assert name1.endswith(".pdf") def test_ut08b_presence_fichier_absent(): with pytest.raises(fichier_service.FileValidationError): fichier_service.step1_check_presence(None) def test_upload_complet_end_to_end(db, tmp_path, monkeypatch): """Vérifie l'enchaînement complet des 8 étapes avec un fichier valide.""" from config import Config monkeypatch.setattr(Config, "UPLOAD_DIR", str(tmp_path)) fs = _file_storage(content=b"%PDF-1.4 contenu factice", filename="doc.pdf", mimetype="application/pdf") fichier_id = fichier_service.handle_upload(db, fs, "sub-1", ip="127.0.0.1") assert fichier_id is not None