diff --git a/src/DataContractPersistance/DataContractXML.cs b/src/DataContractPersistance/DataContractXML.cs
index 86dde9a..3339c29 100644
--- a/src/DataContractPersistance/DataContractXML.cs
+++ b/src/DataContractPersistance/DataContractXML.cs
@@ -1,84 +1,84 @@
-using Models;
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.Linq;
-using System.Runtime.Serialization;
-using System.Text;
-using System.Threading.Tasks;
-using System.Xml;
-
-namespace DataContractPersistance
-{
- ///
- /// Implémentation de l'interface IPersistanceManager utilisant la sérialisation avec DataContract.
- ///
- public class DataContractXml : IPersistanceManager
- {
- ///
- /// Obtient ou définit le nom du fichier de sauvegarde XML.
- ///
- public string FileName { get; set; } = "SauvegardeDonnees.xml";
-
- ///
- /// Obtient ou définit le chemin du fichier de sauvegarde xml.
- ///
- public string FilePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory);
-
- ///
- /// Charge les données sauvegardées à partir du fichier xml.
- ///
- /// Un tuple contenant la liste des oeuvres et la liste des utilisateurs.
- public (ObservableCollection, List) chargeDonne()
- {
- var serializer = new DataContractSerializer(typeof(DataToPersist));
- DataToPersist? data;
-
- if (File.Exists(Path.Combine(FilePath, FileName))) // Vérifiez si le fichier existe
- {
- using (Stream s = File.OpenRead(Path.Combine(FilePath, FileName)))
- {
- data = serializer.ReadObject(s) as DataToPersist;
- }
- }
- else
- {
- data = new DataToPersist(); // Si le fichier n'existe pas, créez une nouvelle liste
- }
-
-
+using Models;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Diagnostics;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+
+namespace DataContractPersistance
+{
+ ///
+ /// Implémentation de l'interface IPersistanceManager utilisant la sérialisation avec DataContract.
+ ///
+ public class DataContractXml : IPersistanceManager
+ {
+ ///
+ /// Obtient ou définit le nom du fichier de sauvegarde XML.
+ ///
+ public string FileName { get; set; } = "SauvegardeDonnees.xml";
+
+ ///
+ /// Obtient ou définit le chemin du fichier de sauvegarde xml.
+ ///
+ public string FilePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory);
+
+ ///
+ /// Charge les données sauvegardées à partir du fichier xml.
+ ///
+ /// Un tuple contenant la liste des oeuvres et la liste des utilisateurs.
+ public (ObservableCollection, List) chargeDonne()
+ {
+ var serializer = new DataContractSerializer(typeof(DataToPersist));
+ DataToPersist? data;
+
+ if (File.Exists(Path.Combine(FilePath, FileName))) // Vérifiez si le fichier existe
+ {
+ using (Stream s = File.OpenRead(Path.Combine(FilePath, FileName)))
+ {
+ data = serializer.ReadObject(s) as DataToPersist;
+ }
+ }
+ else
+ {
+ data = new DataToPersist(); // Si le fichier n'existe pas, créez une nouvelle liste
+ }
+
+
return (data!.Oeuvres, data.Utilisateurs);
-
- }
-
- ///
- /// Sauvegarde les données dans le fichier XML.
- ///
- /// La liste des oeuvres à sauvegarder.
- /// La liste des utilisateurs à sauvegarder.
- public void sauvegarder(ObservableCollection o, List u)
- {
- var serializer = new DataContractSerializer(typeof(DataToPersist));
-
- if (!Directory.Exists(FilePath))
- {
- Debug.WriteLine("Directory doesn't exist.");
- Directory.CreateDirectory(FilePath);
- }
-
- DataToPersist data = new DataToPersist();
- data.Oeuvres = o;
- data.Utilisateurs = u;
-
- var settings = new XmlWriterSettings() { Indent = true };
- using (TextWriter tw = File.CreateText(Path.Combine(FilePath, FileName)))
- {
- using (XmlWriter w = XmlWriter.Create(tw, settings))
- {
- serializer.WriteObject(w, data); // Version d'enregistrement des données avec indentation.
- }
- }
- }
- }
-}
+
+ }
+
+ ///
+ /// Sauvegarde les données dans le fichier XML.
+ ///
+ /// La liste des oeuvres à sauvegarder.
+ /// La liste des utilisateurs à sauvegarder.
+ public void sauvegarder(ObservableCollection o, List u)
+ {
+ var serializer = new DataContractSerializer(typeof(DataToPersist));
+
+ if (!Directory.Exists(FilePath))
+ {
+ Debug.WriteLine("Directory doesn't exist.");
+ Directory.CreateDirectory(FilePath);
+ }
+
+ DataToPersist data = new DataToPersist();
+ data.Oeuvres = o;
+ data.Utilisateurs = u;
+
+ var settings = new XmlWriterSettings() { Indent = true };
+ using (TextWriter tw = File.CreateText(Path.Combine(FilePath, FileName)))
+ {
+ using (XmlWriter w = XmlWriter.Create(tw, settings))
+ {
+ serializer.WriteObject(w, data); // Version d'enregistrement des données avec indentation.
+ }
+ }
+ }
+ }
+}
diff --git a/src/MangaMap/MangaMap.csproj b/src/MangaMap/MangaMap.csproj
index ca7d14b..d3f4e1d 100644
--- a/src/MangaMap/MangaMap.csproj
+++ b/src/MangaMap/MangaMap.csproj
@@ -11,6 +11,16 @@
true
enable
+
+
MangaMap
diff --git a/src/Models/Manager.cs b/src/Models/Manager.cs
index fc1ebed..42f90d3 100644
--- a/src/Models/Manager.cs
+++ b/src/Models/Manager.cs
@@ -27,7 +27,7 @@ namespace Models
///
/// Obtient la liste des utilisateurs de l'application.
///
- public List Utilisateurs { get; private set; }
+ public List Utilisateurs { get; set; }
private ObservableCollection ?oeuvres;
diff --git a/src/Models/Utilisateur.cs b/src/Models/Utilisateur.cs
index ca3883b..2274f77 100644
--- a/src/Models/Utilisateur.cs
+++ b/src/Models/Utilisateur.cs
@@ -18,13 +18,13 @@ namespace Models
/// Obtient ou définit le nom de l'utilisateur.
///
[DataMember]
- public string? nom { get; private set; }
+ public string? nom { get; set; }
///
/// Obtient ou définit le prénom de l'utilisateur.
///
[DataMember]
- public string? prenom { get; private set; }
+ public string? prenom { get; set; }
///
/// Obtient ou définit l'âge de l'utilisateur.
diff --git a/src/UnitTests/UnitTestDataContractJson.cs b/src/UnitTests/UnitTestDataContractJson.cs
new file mode 100644
index 0000000..28aec10
--- /dev/null
+++ b/src/UnitTests/UnitTestDataContractJson.cs
@@ -0,0 +1,41 @@
+using DataContractPersistance;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace UnitTests
+{
+ public class UnitTestDataContractJson
+ {
+ ///
+ /// Vérifie que la propriété FileName a la valeur par défaut "SauvegardeDonnees.json".
+ ///
+ public class DataContractXmlTests
+ {
+ [Fact]
+ public void FileName_Should_HaveDefaultValue()
+ {
+ // Arrange
+ var dataContractXml = new DataContractJson();
+
+ // Assert
+ Assert.Equal("SauvegardeDonnees.json", dataContractXml.FileName);
+ }
+
+ ///
+ /// Vérifie que la propriété FilePath a la valeur par défaut correspondant au répertoire de base de l'application.
+ ///
+ [Fact]
+ public void FilePath_Should_HaveDefaultValue()
+ {
+ // Arrange
+ var dataContractXml = new DataContractJson();
+
+ // Assert
+ Assert.Equal(Path.Combine(AppDomain.CurrentDomain.BaseDirectory), dataContractXml.FilePath);
+ }
+ }
+ }
+}
diff --git a/src/UnitTests/UnitTestDataContractXml.cs b/src/UnitTests/UnitTestDataContractXml.cs
new file mode 100644
index 0000000..c14a85c
--- /dev/null
+++ b/src/UnitTests/UnitTestDataContractXml.cs
@@ -0,0 +1,46 @@
+using DataContractPersistance;
+using Models;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+
+namespace UnitTests
+{
+ public class UnitTestDataContractXml
+ {
+ public class DataContractXmlTests
+ {
+
+ ///
+ /// Vérifie que la propriété FileName a la valeur par défaut "SauvegardeDonnees.xml".
+ ///
+ [Fact]
+ public void FileName_Should_HaveDefaultValue()
+ {
+ // Arrange
+ var dataContractXml = new DataContractXml();
+
+ // Assert
+ Assert.Equal("SauvegardeDonnees.xml", dataContractXml.FileName);
+ }
+
+ ///
+ /// Vérifie que la propriété FilePath a la valeur par défaut correspondant au répertoire de base de l'application.
+ ///
+ [Fact]
+ public void FilePath_Should_HaveDefaultValue()
+ {
+ // Arrange
+ var dataContractXml = new DataContractXml();
+
+ // Assert
+ Assert.Equal(Path.Combine(AppDomain.CurrentDomain.BaseDirectory), dataContractXml.FilePath);
+ }
+ }
+ }
+}
diff --git a/src/UnitTests/UnitTestDataToPersist.cs b/src/UnitTests/UnitTestDataToPersist.cs
new file mode 100644
index 0000000..d39e862
--- /dev/null
+++ b/src/UnitTests/UnitTestDataToPersist.cs
@@ -0,0 +1,80 @@
+using DataContractPersistance;
+using Models;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace UnitTests
+{
+ public class UnitTestDataToPersist
+ {
+ ///
+ /// Vérifie que la propriété Oeuvres est initialisée et est une instance de ObservableCollection.
+ ///
+ [Fact]
+ public void Oeuvres_Should_BeInitialized()
+ {
+ // Arrange
+ var dataToPersist = new DataToPersist();
+
+ // Assert
+ Assert.NotNull(dataToPersist.Oeuvres);
+ Assert.IsType>(dataToPersist.Oeuvres);
+ }
+
+ ///
+ /// Vérifie que la propriété Utilisateurs est initialisée et est une instance de List.
+ ///
+ [Fact]
+ public void Utilisateurs_Should_BeInitialized()
+ {
+ // Arrange
+ var dataToPersist = new DataToPersist();
+
+ // Assert
+ Assert.NotNull(dataToPersist.Utilisateurs);
+ Assert.IsType>(dataToPersist.Utilisateurs);
+ }
+
+ ///
+ /// Vérifie que la propriété Oeuvres peut être assignée avec une autre collection d'œuvres et que la valeur assignée est correcte.
+ ///
+ [Fact]
+ public void Oeuvres_Should_BeAssignable()
+ {
+ // Arrange
+ var dataToPersist = new DataToPersist();
+ var oeuvres = new ObservableCollection
+ {
+ new Oeuvre("Evangelion", new List { "Action", "Future" }, "TV", "C'est une bonne série", 4, 150, "evangelion.jpg"),
+ new Oeuvre("[Oshi No Ko]", new List { "Action", "Future" }, "DVD", "A la fin il meurt", 2, 24, "oshinoko.png"),
+ };
+
+ // Act
+ dataToPersist.Oeuvres = oeuvres;
+
+ // Assert
+ Assert.Equal(oeuvres, dataToPersist.Oeuvres);
+ }
+
+ ///
+ /// vérifie que la propriété Utilisateurs peut être assignée avec une autre liste d'utilisateurs et que la valeur assignée est correcte.
+ ///
+ [Fact]
+ public void Utilisateurs_Should_BeAssignable()
+ {
+ // Arrange
+ var dataToPersist = new DataToPersist();
+ var utilisateurs = new List { new Utilisateur(), new Utilisateur() };
+
+ // Act
+ dataToPersist.Utilisateurs = utilisateurs;
+
+ // Assert
+ Assert.Equal(utilisateurs, dataToPersist.Utilisateurs);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/UnitTests/UnitTestManager.cs b/src/UnitTests/UnitTestManager.cs
new file mode 100644
index 0000000..9de6ba5
--- /dev/null
+++ b/src/UnitTests/UnitTestManager.cs
@@ -0,0 +1,91 @@
+using Models;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Stub;
+using DataContractPersistance;
+
+namespace UnitTests
+{
+ public class UnitTestManager
+ {
+ [Fact]
+ public void Charger_Should_LoadDataFromPersistanceManager_Stub()
+ {
+ // Arrange
+ var persistanceStub = new Stub.Stub();
+ var manager = new Manager(persistanceStub);
+ var oeuvres = new ObservableCollection
+ {
+ new Oeuvre("Evangelion", new List { "Action", "Future" }, "TV", "C'est une bonne série", 4, 150, "evangelion.jpg"),
+ new Oeuvre("[Oshi No Ko]", new List { "Action", "Future" }, "DVD", "A la fin il meurt", 2, 24, "oshinoko.png"),
+ };
+ var utilisateurs = new List { new Utilisateur(), new Utilisateur() };
+
+ // Act
+ manager.charger();
+
+ // Assert
+ var evangelion = oeuvres[0];
+ Assert.Equal("Evangelion", evangelion.Nom);
+ Assert.Collection(evangelion.Genre,
+ genre => Assert.Equal("Action", genre),
+ genre => Assert.Equal("Future", genre));
+ Assert.Equal("TV", evangelion.Type);
+ Assert.Equal("C'est une bonne série", evangelion.Description);
+ Assert.Equal(4, evangelion.Note);
+ Assert.Equal(150, evangelion.NbEpisodes);
+ Assert.Equal("evangelion.jpg", evangelion.Affiche);
+ }
+
+ [Fact]
+ public void Charger_Should_LoadDataFromPersistanceManager_DataContractXml()
+ {
+ // Arrange
+ var persistanceXml = new DataContractPersistance.DataContractXml();
+ var manager = new Manager(persistanceXml);
+ var oeuvres = new ObservableCollection
+ {
+ new Oeuvre("Evangelion", new List { "Action", "Future" }, "TV", "C'est une bonne série", 4, 150, "evangelion.jpg"),
+ new Oeuvre("[Oshi No Ko]", new List { "Action", "Future" }, "DVD", "A la fin il meurt", 2, 24, "oshinoko.png"),
+ };
+ var utilisateurs = new List { new Utilisateur(), new Utilisateur() };
+
+ // Act
+ manager.charger();
+
+ // Assert
+ Assert.NotNull(manager.Oeuvres);
+ Assert.NotNull(manager.Utilisateurs);
+ Assert.Equal(oeuvres.Count, manager.Oeuvres.Count);
+ Assert.Equal(utilisateurs.Count, manager.Utilisateurs.Count);
+ }
+
+ [Fact]
+ public void Sauvegarder_Should_SaveDataUsingPersistanceManager_DataContractXml()
+ {
+ // Arrange
+ var persistanceXml = new DataContractPersistance.DataContractXml();
+ var manager = new Manager(persistanceXml);
+ var oeuvres = new ObservableCollection
+ {
+ new Oeuvre("Evangelion", new List { "Action", "Future" }, "TV", "C'est une bonne série", 4, 150, "evangelion.jpg"),
+ new Oeuvre("[Oshi No Ko]", new List { "Action", "Future" }, "DVD", "A la fin il meurt", 2, 24, "oshinoko.png"),
+ };
+ var utilisateurs = new List { new Utilisateur(), new Utilisateur() };
+
+ manager.Oeuvres = oeuvres;
+ manager.Utilisateurs = utilisateurs;
+
+ // Act
+ manager.sauvegarder();
+
+ // Assert
+ // Vérifiez manuellement que les données ont été sauvegardées correctement.
+ // Vous pouvez consulter le fichier XML de sauvegarde ou utiliser d'autres moyens pour vérifier cela.
+ }
+ }
+}
diff --git a/src/UnitTests/UnitTestOeuvre.cs b/src/UnitTests/UnitTestOeuvre.cs
index 5449031..306083b 100644
--- a/src/UnitTests/UnitTestOeuvre.cs
+++ b/src/UnitTests/UnitTestOeuvre.cs
@@ -9,24 +9,17 @@ namespace UnitTests
{
public class UnitTestOeuvre
{
- [Fact]
- public void Oeuvre_Constructor_WithAllParameters_ShouldSetPropertiesCorrectly()
+ [Theory]
+ [InlineData("[Oshi No Ko]", new string[] { "Action", "Drama", "Fantasy" }, "TV Series", "A thrilling anime series.", 9, 25, "oshinoko.png")]
+ public void Oeuvre_Constructor_WithAllParameters_ShouldSetPropertiesCorrectly(
+ string nom, string[] genres, string type, string description, int note, int nbEpisodes, string affiche)
{
- // Arrange
- string nom = "[Oshi No Ko]";
- List genre = new List { "Action", "Drama", "Fantasy" };
- string type = "TV Series";
- string description = "A thrilling anime series.";
- int note = 9;
- int nbEpisodes = 25;
- string affiche = "oshinoko.png";
-
- // Act
- Oeuvre oeuvre = new Oeuvre(nom, genre, type, description, note, nbEpisodes, affiche);
+ // Arrange & Act
+ Oeuvre oeuvre = new Oeuvre(nom, new List(genres), type, description, note, nbEpisodes, affiche);
// Assert
Assert.Equal(nom, oeuvre.Nom);
- Assert.Equal(genre, oeuvre.Genre);
+ Assert.Equal(new List(genres), oeuvre.Genre);
Assert.Equal(type, oeuvre.Type);
Assert.Equal(description, oeuvre.Description);
Assert.Equal(note, oeuvre.Note);
@@ -34,17 +27,12 @@ namespace UnitTests
Assert.Equal(affiche, oeuvre.Affiche);
}
- [Fact]
- public void Oeuvre_Constructor_WithRequiredParameters_ShouldSetPropertiesCorrectly()
+ [Theory]
+ [InlineData("One Piece", "TV Series", "An epic adventure.", 1000, "onepiece.jpg")]
+ public void Oeuvre_Constructor_WithRequiredParameters_ShouldSetPropertiesCorrectly(
+ string nom, string type, string description, int nbEpisodes, string affiche)
{
- // Arrange
- string nom = "One Piece";
- string type = "TV Series";
- string description = "An epic adventure.";
- int nbEpisodes = 1000;
- string affiche = "onepiece.jpg";
-
- // Act
+ // Arrange & Act
Oeuvre oeuvre = new Oeuvre(nom, type, description, nbEpisodes, affiche);
// Assert
@@ -57,12 +45,14 @@ namespace UnitTests
Assert.Equal(affiche, oeuvre.Affiche);
}
- [Fact]
- public void AjouterEpisode_ShouldIncreaseNbEpisodesByGivenAmount()
+ [Theory]
+ [InlineData("Naruto", "TV Series", "A ninja's journey.", 220, "evangelion.jpg", 50)]
+ [InlineData("Dragon Ball", "TV Series", "A Saiyan's story.", 291, "evangelion.jpg", 20)]
+ public void AjouterEpisode_ShouldIncreaseNbEpisodesByGivenAmount(
+ string nom, string type, string description, int nbEpisodes, string affiche, int nbEpisodesToAdd)
{
// Arrange
- Oeuvre oeuvre = new Oeuvre("Naruto", "TV Series", "A ninja's journey.", 220, "evangelion.jpg");
- int nbEpisodesToAdd = 50;
+ Oeuvre oeuvre = new Oeuvre(nom, type, description, nbEpisodes, affiche);
int expectedNbEpisodes = oeuvre.NbEpisodes + nbEpisodesToAdd;
// Act
@@ -71,6 +61,5 @@ namespace UnitTests
// Assert
Assert.Equal(expectedNbEpisodes, oeuvre.NbEpisodes);
}
-
}
}
diff --git a/src/UnitTests/UnitTestUtilisateur.cs b/src/UnitTests/UnitTestUtilisateur.cs
index 7f903a3..e83e6c3 100644
--- a/src/UnitTests/UnitTestUtilisateur.cs
+++ b/src/UnitTests/UnitTestUtilisateur.cs
@@ -4,54 +4,46 @@ namespace UnitTests
{
public class UnitTestUtilisateur
{
- [Fact]
- public void TestUtilisateur()
+ [Theory]
+ [InlineData("test@test.com", "pseudo", "mdp", "John", "Doe", 30)]
+ [InlineData("test2@test.com", "pseudo2", "mdp2", "Jane", "Smith", 25)]
+ public void Utilisateur_Constructor_SetsPropertiesCorrectly(string email, string pseudo, string mdp, string nom, string prenom, int age)
{
- // Arrange
- Utilisateur utilisateur = new Utilisateur("test@test.com", "pseudo", "mdp", "John", "Doe", 30);
-
- // Act
- utilisateur.SupprimerUtilisateur();
+ // Arrange & Act
+ Utilisateur utilisateur = new Utilisateur(email, pseudo, mdp, nom, prenom, age);
// Assert
- Assert.Null(utilisateur.nom);
- Assert.Null(utilisateur.prenom);
- Assert.Equal(0, utilisateur.age);
+ Assert.Equal(email, utilisateur.Email);
+ Assert.Equal(pseudo, utilisateur.Pseudo);
+ Assert.Equal(mdp, utilisateur.MotDePasse);
+ Assert.Equal(nom, utilisateur.nom);
+ Assert.Equal(prenom, utilisateur.prenom);
+ Assert.Equal(age, utilisateur.age);
}
- [Fact]
- public void Utilisateur_DefaultConstructor_SetsPropertiesToDefaultValues()
+ // Utilisez [MemberData] pour des jeux de données dynamiques
+ [Theory]
+ [MemberData(nameof(UtilisateursTestData.GetTestData), MemberType = typeof(UtilisateursTestData))]
+ public void Utilisateur_SupprimerUtilisateur_SetsPropertiesToNull(Utilisateur utilisateur)
{
- // Arrange & Act
- Utilisateur utilisateur = new Utilisateur();
+ // Arrange (pas besoin de l'acte car l'objet est fourni par les données)
+
+ // Act
+ utilisateur.SupprimerUtilisateur();
// Assert
Assert.Null(utilisateur.nom);
Assert.Null(utilisateur.prenom);
Assert.Equal(0, utilisateur.age);
}
+ }
- [Fact]
- public void Utilisateur_Constructor_SetsPropertiesCorrectly()
+ public class UtilisateursTestData
+ {
+ public static IEnumerable