""" Tests unitaires pour utils/preprocessing.py Ce module teste: - preprocess_product_text(): nettoyage et préparation du texte - validate_text_input(): validation des entrées texte - clean_html(): suppression des balises HTML """ import pytest import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).parent.parent.parent)) from utils.preprocessing import ( preprocess_product_text, validate_text_input, ) # ============================================================================= # TESTS preprocess_product_text() # ============================================================================= @pytest.mark.unit class TestPreprocessProductText: """Tests pour la fonction preprocess_product_text().""" def test_returns_string(self, sample_designation, sample_description): """Retourne une string.""" result = preprocess_product_text(sample_designation, sample_description) assert isinstance(result, str) def test_combines_designation_and_description(self): """Combine désignation et description.""" designation = "iPhone 15" description = "Smartphone Apple" result = preprocess_product_text(designation, description) # Le résultat doit contenir des éléments des deux result_lower = result.lower() assert "iphone" in result_lower or "15" in result_lower assert "smartphone" in result_lower or "apple" in result_lower def test_handles_empty_description(self): """Gère description vide.""" result = preprocess_product_text("iPhone 15", "") assert isinstance(result, str) assert len(result) > 0 def test_handles_empty_designation(self): """Gère désignation vide.""" result = preprocess_product_text("", "Smartphone Apple") assert isinstance(result, str) def test_handles_both_empty(self): """Gère les deux vides.""" result = preprocess_product_text("", "") assert isinstance(result, str) def test_handles_none_description(self): """Gère description None.""" result = preprocess_product_text("iPhone 15", None) assert isinstance(result, str) def test_handles_none_designation(self): """Gère désignation None.""" result = preprocess_product_text(None, "Smartphone") assert isinstance(result, str) def test_handles_both_none(self): """Gère les deux None.""" result = preprocess_product_text(None, None) assert isinstance(result, str) def test_removes_html_tags(self): """Supprime les balises HTML.""" designation = "

iPhone 15

" result = preprocess_product_text(designation, "") assert "

" not in result assert "

" not in result assert "" not in result assert "" not in result def test_removes_script_tags(self): """Supprime les balises script (sécurité).""" designation = "iPhone" result = preprocess_product_text(designation, "") assert "