File size: 3,849 Bytes
0406bd2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
"""
Tests unitaires pour le projet Amazon Sentiment Analysis
Teste les fonctions de traitement et de génération
"""

import sys
import os

# Import des modules à tester
from data_processing import clean_text, label_to_sentiment, make_fake_email


def test_clean_text():
    """Test de la fonction de nettoyage de texte"""
    print("\n=== TEST : clean_text ===")
    
    # Test 1 : Texte avec ponctuation
    text1 = "Super produit !!! Je recommande."
    result1 = clean_text(text1)
    assert "super" in result1
    assert "produit" in result1
    assert "!" not in result1
    print(f"✅ Test 1 réussi : '{text1}' → '{result1}'")
    
    # Test 2 : Texte avec chiffres
    text2 = "Livraison en 24h, excellent !"
    result2 = clean_text(text2)
    assert "24" not in result2
    print(f"✅ Test 2 réussi : '{text2}' → '{result2}'")
    
    # Test 3 : Stopwords supprimés
    text3 = "Je suis très content de cet achat"
    result3 = clean_text(text3)
    assert "je" not in result3  # stopword supprimé
    assert "content" in result3
    print(f"✅ Test 3 réussi : '{text3}' → '{result3}'")
    
    print("✅ Tous les tests clean_text réussis !")


def test_label_to_sentiment():
    """Test de la conversion label → sentiment"""
    print("\n=== TEST : label_to_sentiment ===")
    
    # Test labels négatifs (1-2 étoiles)
    assert label_to_sentiment(1) == "negatif"
    assert label_to_sentiment(2) == "negatif"
    print("✅ Labels 1-2 → négatif")
    
    # Test labels positifs (3-5 étoiles)
    assert label_to_sentiment(3) == "positif"
    assert label_to_sentiment(4) == "positif"
    assert label_to_sentiment(5) == "positif"
    print("✅ Labels 3-5 → positif")
    
    # Test valeur invalide
    assert label_to_sentiment("invalid") == "negatif"  # Par défaut
    print("✅ Valeur invalide gérée")
    
    print("✅ Tous les tests label_to_sentiment réussis !")


def test_make_fake_email():
    """Test de la génération d'emails factices"""
    print("\n=== TEST : make_fake_email ===")
    
    # Test format
    email1 = make_fake_email(1)
    assert email1 == "client00001@example.com"
    print(f"✅ Email 1 : {email1}")
    
    email42 = make_fake_email(42)
    assert email42 == "client00042@example.com"
    assert "@example.com" in email42
    print(f"✅ Email 42 : {email42}")
    
    print("✅ Tous les tests make_fake_email réussis !")


def test_generer_response_mock():
    """
    Test simulé de la génération de réponse (sans charger le modèle)
    Vérifie que le prompt est bien construit
    """
    print("\n=== TEST : build_reply_prompt ===")
    
    from generate_response import build_reply_prompt
    
    review = "Produit cassé"
    prompt = build_reply_prompt(review)
    
    # Vérifications
    assert "service client" in prompt.lower()
    assert "Produit cassé" in prompt
    assert "poli et professionnel" in prompt
    
    print("✅ Prompt correctement construit")
    print(f"Extrait : {prompt[:100]}...")


def run_all_tests():
    """Lance tous les tests"""
    print("=" * 80)
    print("🧪 LANCEMENT DES TESTS UNITAIRES")
    print("=" * 80)
    
    try:
        test_clean_text()
        test_label_to_sentiment()
        test_make_fake_email()
        test_generer_response_mock()
        
        print("\n" + "=" * 80)
        print("🎉 TOUS LES TESTS ONT RÉUSSI !")
        print("=" * 80)
        return True
        
    except AssertionError as e:
        print("\n" + "=" * 80)
        print(f"❌ ÉCHEC DES TESTS : {e}")
        print("=" * 80)
        return False
    except Exception as e:
        print("\n" + "=" * 80)
        print(f"❌ ERREUR LORS DES TESTS : {e}")
        print("=" * 80)
        return False


if __name__ == "__main__":
    success = run_all_tests()
    sys.exit(0 if success else 1)