44
55import pytest
66from parse .fichier_log_apache import FichierLogApache
7+ from analyse .filtre_log_apache import FiltreLogApache
78from analyse .analyseur_log_apache import AnalyseurLogApache
89
910
1011# Tests unitaires
1112
12- @pytest .mark .parametrize ("fichier, nombre_par_top" , [
13- (False , 3 ),
14- (FichierLogApache ("test.log" ), False )
13+ @pytest .mark .parametrize ("fichier, filtre, nombre_par_top" , [
14+ (False , FiltreLogApache (None , None ), 3 ),
15+ (FichierLogApache ("test.log" ), False , 3 ),
16+ (FichierLogApache ("test.log" ), FiltreLogApache (None , None ), False )
1517])
16- def test_analyseur_log_exception_type_invalide (fichier , nombre_par_top ):
18+ def test_analyseur_log_exception_type_invalide (fichier , filtre , nombre_par_top ):
1719 """
1820 Vérifie que la classe AnalyseurLogApache lève une :class:`TypeError` si les types des
1921 paramètres du constructeur sont invalides.
2022
2123 Scénarios testés:
2224 - Type incorrect pour le paramètre ``fichier``.
25+ - Type incorrect pour le paramètre ``filtre``.
2326 - Type incorrect pour le paramètre ``nombre_par_top``.
2427
2528 Asserts:
@@ -30,7 +33,7 @@ def test_analyseur_log_exception_type_invalide(fichier, nombre_par_top):
3033 nombre_par_top (any): Nombre maximum d'éléments dans le top classement.
3134 """
3235 with pytest .raises (TypeError ):
33- analyseur = AnalyseurLogApache (fichier , nombre_par_top )
36+ analyseur = AnalyseurLogApache (fichier , filtre , nombre_par_top )
3437
3538def test_analyseur_log_exception_valeur_nombre_par_top_invalide ():
3639 """
@@ -44,7 +47,9 @@ def test_analyseur_log_exception_valeur_nombre_par_top_invalide():
4447 - Une exception :class:`ValueError` est levée.
4548 """
4649 with pytest .raises (ValueError ):
47- analyseur = AnalyseurLogApache (FichierLogApache ("test.log" ), - 4 )
50+ analyseur = AnalyseurLogApache (FichierLogApache ("test.log" ),
51+ FiltreLogApache (None , None ),
52+ - 4 )
4853
4954@pytest .mark .parametrize ("liste_elements, nom_element, mode_top_classement" , [
5055 (0 , "test" , True ),
@@ -189,7 +194,7 @@ def test_analyseur_top_urls_valide(analyseur_log_apache):
189194 assert top_urls [1 ]["total" ] == 2
190195 assert top_urls [1 ]["taux" ] == 40.0
191196
192- def test_analyseur_repartition_code_statut_htpp_valide (analyseur_log_apache ):
197+ def test_analyseur_repartition_code_statut_http_valide (analyseur_log_apache ):
193198 """
194199 Vérifie que ``get_total_par_code_statut_http`` retourne la répartition correcte des codes HTTP.
195200
@@ -241,6 +246,45 @@ def test_analyseur_get_total_entrees_valide(analyseur_log_apache,
241246 fichier_log_apache .entrees = [entree_log_apache ] * nombre_entrees
242247 assert analyseur_log_apache .get_total_entrees () == nombre_entrees
243248
249+ @pytest .mark .parametrize ("nombre_entrees_valides" , [
250+ (0 ), (3 ), (100 )
251+ ])
252+ def test_analyseur_get_entrees_passent_filtre_valide (mocker ,
253+ analyseur_log_apache ,
254+ entree_log_apache ,
255+ nombre_entrees_valides ):
256+ """
257+ Vérifie que ``_get_entrees_passent_filtre`` retourne la liste des entrées
258+ qui passent le filtre.
259+
260+ Scénarios testés:
261+ - Passage d'entrée à la méthode ``_get_entrees_passent_filtre``.
262+
263+ Asserts:
264+ - Le nombre d'entrées retourné est égale au nombre de True retourné.
265+
266+ Args:
267+ mocker (any): Fixture pour simuler des attributs et retours de méthode.
268+ analyseur_log_apache (AnalyseurLogApache): Fixture pour l'instance
269+ de la classe :class:`AnalyseurLogApache`.
270+ entree_log_apache (EntreeLogApache): Fixture pour l'instance
271+ de la classe :class:`EntreeLogApache`.
272+ nombre_entrees_valides (int): Le nombre d'entrées valides que retourne la méthode.
273+ """
274+ analyseur_log_apache .fichier = mocker .MagicMock ()
275+ analyseur_log_apache .fichier .entrees = [entree_log_apache ] * (nombre_entrees_valides * 2 )
276+
277+ retour_methode = [True ] * nombre_entrees_valides
278+ retour_methode += [False ] * nombre_entrees_valides
279+
280+ analyseur_log_apache .filtre = mocker .MagicMock ()
281+ analyseur_log_apache .filtre .entree_passe_filtre .side_effect = retour_methode
282+
283+ entrees_filtre = analyseur_log_apache ._get_entrees_passent_filtre ()
284+
285+ assert entrees_filtre == [entree_log_apache ] * nombre_entrees_valides
286+ assert len (entrees_filtre ) == nombre_entrees_valides
287+
244288def test_analyseur_get_analyse_complete_valide (analyseur_log_apache ):
245289 """
246290 Vérifie que ``get_analyse_complete`` retourne un rapport de l'analyse correct
@@ -255,16 +299,13 @@ def test_analyseur_get_analyse_complete_valide(analyseur_log_apache):
255299 Args:
256300 analyseur_log_apache (AnalyseurLogApache): Fixture pour l'instance
257301 de la classe :class:`AnalyseurLogApache`.
258- fichier_log_apache (FichierLogApache): Fixture pour l'instance
259- de la classe :class:`FichierLogApache`.
260- entree_log_apache (EntreeLogApache): Fixture pour l'instance
261- de la classe :class:`EntreeLogApache`.
262- nombre_entrees (int): Le nombre total d'entrées dans le fichier.
263302 """
264303 analyse = analyseur_log_apache .get_analyse_complete ()
265304 assert analyse ["chemin" ] == analyseur_log_apache .fichier .chemin
305+ assert analyse ["total_entrees" ] == analyseur_log_apache .get_total_entrees ()
306+ assert analyse ["filtre" ] == analyseur_log_apache .filtre .get_dict_filtre ()
266307 statistiques = analyse ["statistiques" ]
267- assert statistiques ["total_entrees " ] == analyseur_log_apache .get_total_entrees ()
308+ assert statistiques ["total_entrees_filtre " ] == analyseur_log_apache .get_total_entrees_filtre ()
268309 statistiques_requetes = statistiques ["requetes" ]
269310 assert statistiques_requetes ["top_urls" ] == analyseur_log_apache .get_top_urls ()
270311 assert (statistiques_requetes ["repartition_code_statut_http" ]
0 commit comments