57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
"""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
|