1+ """
2+ Module des tests unitaires pour l'exporteur de données.
3+ """
4+
5+ import pytest
6+ from json import load
7+ from export .exporteur import Exporteur , ExportationException
8+
9+ @pytest .mark .parametrize ("chemin_sortie" , [
10+ (0 ), (None ), ([])
11+ ])
12+ def test_exporteur_type_chemin_invalide (chemin_sortie ):
13+ """
14+ Vérifie que la classe renvoie une erreur lorsque un argument de type invalide
15+ est passé dans le constructeur.
16+
17+ Scénarios testés:
18+ - Type incorrect pour le paramètre ``chemin_sortie``.
19+
20+ Asserts:
21+ - Une exception :class:`TypeError` est levée.
22+
23+ Args:
24+ chemin_sortie (any): Le chemin de sortie utilisé dans le constructeur.
25+ """
26+ with pytest .raises (TypeError ):
27+ exporteur = Exporteur (chemin_sortie )
28+
29+ def test_exporteur_emplacement_inexistant ():
30+ """
31+ Vérifie que la classe renvoie une erreur lorsque un chemin de fichier invalide
32+ est passé dans le constructeur.
33+
34+ Scénarios testés:
35+ - Chemin invalide pour le paramètre ``chemin_sortie``.
36+
37+ Asserts:
38+ - Une exception :class:`ExportationException` est levée.
39+ """
40+ with pytest .raises (ExportationException ):
41+ exporteur = Exporteur ("dossier/inexistant/sortie.json" )
42+
43+ @pytest .mark .parametrize ("donnees" , [
44+ (0 ), (None ), ([])
45+ ])
46+ def test_exportateur_export_json_type_donnees_invalide (exporteur , donnees ):
47+ """
48+ Vérifie que la classe renvoie une erreur lorsque un argument de type invalide
49+ est passé dans la méthode ``export_vers_json``.
50+
51+ Scénarios testés:
52+ - Type incorrect pour le paramètre ``données``.
53+
54+ Asserts:
55+ - Une exception :class:`TypeError` est levée.
56+
57+ Args:
58+ exporteur (Exporteur) : Fixture pour l'instance de la classe :class:`Exporteur`.
59+ donnees (any): Les données à exporter.
60+ """
61+ with pytest .raises (TypeError ):
62+ exporteur .export_vers_json ("type invalide" )
63+
64+ @pytest .mark .parametrize ("exception" , [
65+ (PermissionError ("Pas les droits" )),
66+ (FileNotFoundError ("Fichier non trouvé." )),
67+ (Exception ("Toutes exceptions" ))
68+ ])
69+ def test_exportateur_export_json_exception_exportation (exporteur , mocker , exception ):
70+ """
71+ Vérifie que la classe renvoie l'exception :class:`ExportationException` lorsque
72+ une erreur apparait durant l'exportation des données.
73+
74+ Scénarios testés:
75+ - Une exception :class:`PermissionError` survient.
76+ - Une exception :class:`FileNotFoundError` survient.
77+ - Une exception :class:`Exception` survient.
78+
79+ Asserts:
80+ - Une exception :class:`ExportationException` est levée.
81+
82+ Args:
83+ exporteur (Exporteur) : Fixture pour l'instance de la classe :class:`Exporteur`.
84+ mocker (any): Une fixture pour simuler des exceptions.
85+ donnees (any): Les données à exporter.
86+ """
87+ mocker .patch ("builtins.open" , side_effect = exception )
88+ with pytest .raises (ExportationException ):
89+ exporteur .export_vers_json ({})
90+
91+ def test_exportateur_exportation_json_valide (exporteur , fichier_json ):
92+ """
93+ Vérifie que la méthode ``export_vers_json`` exporte correctement les données
94+ vers une fichier.
95+
96+ Scénarios testés:
97+ - Exportation d'un dictionnaire lambda.
98+
99+ Asserts:
100+ - Le fichier est bien crée.
101+ - Les données dans le fichier sont conformes à celles fournies.
102+
103+ Args:
104+ exporteur (Exporteur) : Fixture pour l'instance de la classe :class:`Exporteur`.
105+ fichier_json (Path): Le chemin du fichier.
106+ """
107+ donnees = {"cle" : {"valeur" : [1 , 2 , 3 ]}}
108+ exporteur .export_vers_json (donnees )
109+ assert fichier_json .exists ()
110+ with open (fichier_json , "r" ) as exportation :
111+ contenu_exportation = load (exportation )
112+ assert contenu_exportation == donnees
0 commit comments