From 154b22a1148320778c0a40f0d5bd6d244b74e964 Mon Sep 17 00:00:00 2001 From: "titouan.louvet" Date: Sat, 10 Jun 2023 16:55:43 +0200 Subject: [PATCH] Added test and doxygen --- .../Banquale/Views/TransactionsPage.xaml.cs | 7 - src/Banquale/Model/IPersistenceManager.cs | 79 +++++++--- src/Banquale/UnitTest/AccountTest.cs | 101 ++++++------- src/Banquale/UnitTest/ConsultantTest.cs | 62 +++++++- src/Banquale/UnitTest/CustomerTest.cs | 140 +++++++++--------- 5 files changed, 230 insertions(+), 159 deletions(-) diff --git a/src/Banquale/Banquale/Views/TransactionsPage.xaml.cs b/src/Banquale/Banquale/Views/TransactionsPage.xaml.cs index 4047d88..9405dd7 100644 --- a/src/Banquale/Banquale/Views/TransactionsPage.xaml.cs +++ b/src/Banquale/Banquale/Views/TransactionsPage.xaml.cs @@ -58,14 +58,7 @@ namespace Banquale.Views /// async void Categ_Clicked(System.Object sender, System.EventArgs e) { -<<<<<<< HEAD await Shell.Current.Navigation.PushAsync(new CategoryPage()); -======= - Mgr.SelectedAccount.Balance += Mgr.SelectedTransaction.Sum; - Mgr.SelectedAccount.TransactionsList.Remove(Mgr.SelectedTransaction); - await DisplayAlert("Opposition", "La demande d'opposition à été réalisé avec succés", "OK"); - await Shell.Current.Navigation.PopAsync(); ->>>>>>> 093cffc19bc037cd518567f105548bd33f8fe902 } /// diff --git a/src/Banquale/Model/IPersistenceManager.cs b/src/Banquale/Model/IPersistenceManager.cs index 0233b44..cf90dcc 100644 --- a/src/Banquale/Model/IPersistenceManager.cs +++ b/src/Banquale/Model/IPersistenceManager.cs @@ -1,28 +1,65 @@ -/// \file -/// \brief Définition de l'interface IPersistenceManager. -/// \author PEREDERII Antoine, LOUVET Titouan - +using Xunit; +using Moq; using System; using System.Collections.Generic; +using Model; -namespace Model +namespace UnitTest { - /// - /// Interface pour la gestion de la persistance des données. - /// - public interface IPersistenceManager + public class PersistenceManagerTests { - /// - /// Charge les données depuis une source de persistance. - /// - /// Un tuple contenant le hashSet des clients et le consultant. - public (HashSet, Consultant) DataLoad(); - - /// - /// Enregistre les données dans une source de persistance. - /// - /// La liste des clients à enregistrer. - /// Le consultant à enregistrer. - void DataSave(HashSet cu, Consultant co); + [Fact] + public void DataLoad_ValidData_ReturnsTuple() + { + // Arrange + Mock persistenceManagerMock = new Mock(); + HashSet customers = new HashSet(); + Consultant consultant = new Consultant("Cons", "Gérard", "123456"); + persistenceManagerMock.Setup(x => x.DataLoad()).Returns((customers, consultant)); + + // Act + (HashSet, Consultant) result = persistenceManagerMock.Object.DataLoad(); + + // Assert + Assert.NotNull(result); + Assert.Equal(customers, result.Item1); + Assert.Equal(consultant, result.Item2); + } + + [Theory] + [InlineData(typeof(HashSet), typeof(Consultant))] + public void DataSave_ValidData_CallsDataSave(Type customerType, Type consultantType) + { + // Arrange + Mock persistenceManagerMock = new Mock(); + HashSet customers = new HashSet(); + Consultant consultant = new Consultant("Cons", "Gérard", "123456"); + + // Act + persistenceManagerMock.Object.DataSave(customers, consultant); + + // Assert + persistenceManagerMock.Verify(x => x.DataSave(It.IsAny>(), It.IsAny()), Times.Once); + } + + public static TheoryData, Consultant> TestData => + new TheoryData, Consultant> + { + { new HashSet(), new Consultant("Cons", "Gérard", "123456") }, + }; + + [Theory] + [MemberData(nameof(TestData))] + public void DataSave_ValidData_MemberData(HashSet customers, Consultant consultant) + { + // Arrange + Mock persistenceManagerMock = new Mock(); + + // Act + persistenceManagerMock.Object.DataSave(customers, consultant); + + // Assert + persistenceManagerMock.Verify(x => x.DataSave(customers, consultant), Times.Once); + } } } diff --git a/src/Banquale/UnitTest/AccountTest.cs b/src/Banquale/UnitTest/AccountTest.cs index 72a113b..b333e5e 100644 --- a/src/Banquale/UnitTest/AccountTest.cs +++ b/src/Banquale/UnitTest/AccountTest.cs @@ -1,70 +1,63 @@ -/// \file -/// \brief Fichier de test pour la classe Account. -/// \author Votre nom - -using Model; +using Xunit; using System; -using System.ComponentModel; -using System.Diagnostics; -using System.Runtime.Serialization; -namespace UnitTest +namespace Model.Tests { - /// - /// Classe de test pour la classe Account. - /// - public class AccountTest + public class AccountTests { - /// - /// Méthode principale du test. - /// [Fact] - public void TestAnAccount() + public void Account_Initialization_Test() { - // Création de deux comptes - Account account1 = new Account(1000, "John Doe", "FR123456789"); - Account account2 = new Account(500, "Jane Smith", "FR987654321"); - - // Affichage des informations des comptes - Console.WriteLine("Compte 1:"); - Console.WriteLine($"Nom: {account1.Name}"); - Console.WriteLine($"IBAN: {account1.IBANHide}"); - Console.WriteLine($"Solde: {account1.Balance}"); + // Initialisation + double initialBalance = 1000.0; + string accountName = "Gérard"; + string accountIBAN = "FR7612345678901234567895003"; + + // Account + Account account = new Account(initialBalance, accountName, accountIBAN); + + // Assert + Assert.Equal(initialBalance, account.Balance); + Assert.Equal(accountName, account.Name); + Assert.Equal(accountIBAN, account.IBAN); + } - Console.WriteLine("\nCompte 2:"); - Console.WriteLine($"Nom: {account2.Name}"); - Console.WriteLine($"IBAN: {account2.IBANHide}"); - Console.WriteLine($"Solde: {account2.Balance}"); + [Theory] + [InlineData(1000.0, 500.0, true, 500.0)] // Debit transaction + [InlineData(1000.0, 500.0, false, 1500.0)] // Credit transaction + public void Account_DoTransactions_Test(double initialBalance, double transactionAmount, bool isDebit, double expectedBalance) + { + // Initialisation + Account account = new Account(initialBalance, "Gérard", "FR7612345678901234567895003"); + Account otherAccount = new Account(0.0, "Gérarde", "FR76987654321098765432109876004"); - // Effectuer une transaction entre les comptes - double amount = 200; - Console.WriteLine($"\nEffectuer une transaction de {amount} du compte 1 vers le compte 2..."); - account1.DoTransactions(account2, amount, true); + // Account + account.DoTransactions(otherAccount, transactionAmount, isDebit); - // Affichage des informations des comptes après la transaction - Console.WriteLine("\nAprès la transaction:"); - Console.WriteLine("Compte 1:"); - Console.WriteLine($"Nom: {account1.Name}"); - Console.WriteLine($"IBAN: {account1.IBANHide}"); - Console.WriteLine($"Solde: {account1.Balance}"); + // Assert + Assert.Equal(expectedBalance, account.Balance); + } - Console.WriteLine("\nCompte 2:"); - Console.WriteLine($"Nom: {account2.Name}"); - Console.WriteLine($"IBAN: {account2.IBANHide}"); - Console.WriteLine($"Solde: {account2.Balance}"); + public static TheoryData TestData => + new TheoryData + { + { 1000.0, 500.0, true, 500.0 }, // Debit transaction + { 1000.0, 500.0, false, 1500.0 }, // Credit transaction + }; - // Demander de l'aide - string helpSubject = "Besoin d'aide"; - string helpDescription = "Je rencontre un problème avec mon compte."; - Message helpMessage = Account.AskForHelp(helpSubject, helpDescription); - Console.WriteLine($"\nDemande d'aide envoyée : {helpMessage}"); + [Theory] + [MemberData(nameof(TestData))] + public void Account_DoTransactions_MemberData_Test(double initialBalance, double transactionAmount, bool isDebit, double expectedBalance) + { + // Initialisation + Account account = new Account(initialBalance, "Gérard", "FR7612345678901234567895003"); + Account otherAccount = new Account(0.0, "Gérarde", "FR76987654321098765432109876004"); - // Comparaison de deux comptes - Console.WriteLine("\nComparaison des comptes..."); - bool areEqual = account1.Equals(account2); - Console.WriteLine($"Les comptes sont-ils égaux ? {areEqual}"); + // Account + account.DoTransactions(otherAccount, transactionAmount, isDebit); - //Console.ReadLine(); + // Assert + Assert.Equal(expectedBalance, account.Balance); } } } diff --git a/src/Banquale/UnitTest/ConsultantTest.cs b/src/Banquale/UnitTest/ConsultantTest.cs index 08ac219..103130a 100644 --- a/src/Banquale/UnitTest/ConsultantTest.cs +++ b/src/Banquale/UnitTest/ConsultantTest.cs @@ -1,12 +1,13 @@ -using System; +/// \file +/// \brief Définition des tests pour la classe Consultant. +/// \author PEREDERII Antoine, LOUVET Titouan + +using Xunit; +using System; using Model; namespace UnitTest { - /// \file - /// \brief Fichier de tests pour la classe Consultant. - /// \author Votre nom - /// /// Classe de tests pour la classe Consultant. /// @@ -18,9 +19,9 @@ namespace UnitTest [Fact] public void Constructor_MessagesListInitialized() { - // Arrange - string name = "Doe"; - string firstName = "John"; + // Initialisation + string name = "Cons"; + string firstName = "Gérard"; string password = "123456"; // Act @@ -30,5 +31,50 @@ namespace UnitTest Assert.NotNull(consultant.MessagesList); Assert.Empty(consultant.MessagesList); } + + /// + /// Teste si la liste des messages du consultant est initialisée correctement en utilisant InlineData. + /// + /// Nom du consultant. + /// Prénom du consultant. + /// Mot de passe du consultant. + [Theory] + [InlineData("Cons", "Gérard", "123456")] + public void Constructor_MessagesListInitialized_InlineData(string name, string firstName, string password) + { + // Act + Consultant consultant = new Consultant(name, firstName, password); + + // Assert + Assert.NotNull(consultant.MessagesList); + Assert.Empty(consultant.MessagesList); + } + + /// + /// Fournit les données pour le test de l'initialisation de la liste des messages du consultant. + /// + public static TheoryData TestData => + new TheoryData + { + { "Cons", "Gérard", "123456" }, + }; + + /// + /// Teste si la liste des messages du consultant est initialisée correctement en utilisant MemberData. + /// + /// Nom du consultant. + /// Prénom du consultant. + /// Mot de passe du consultant. + [Theory] + [MemberData(nameof(TestData))] + public void Constructor_MessagesListInitialized_MemberData(string name, string firstName, string password) + { + // Act + Consultant consultant = new Consultant(name, firstName, password); + + // Assert + Assert.NotNull(consultant.MessagesList); + Assert.Empty(consultant.MessagesList); + } } } diff --git a/src/Banquale/UnitTest/CustomerTest.cs b/src/Banquale/UnitTest/CustomerTest.cs index 18f3b53..5fcb3d4 100644 --- a/src/Banquale/UnitTest/CustomerTest.cs +++ b/src/Banquale/UnitTest/CustomerTest.cs @@ -1,78 +1,80 @@ -//using System; -//using Model; +/// \file +/// \brief Définition des tests pour la classe Customer. +/// \author PEREDERII Antoine, LOUVET Titouan -//namespace UnitTest -//{ -// /// \file -// /// \brief Fichier de tests pour la classe Customer. -// /// \author Votre nom +using Xunit; +using System; +using Model; -// /// -// /// Classe de tests pour la classe Customer. -// /// -// public class CustomerTests -// { -// /// -// /// Teste si la liste des comptes du client est initialisée correctement. -// /// -// [Fact] -// public void Constructor_AccountsListInitialized() -// { -// // Arrange -// string name = "Doe"; -// string firstName = "John"; -// string password = "123456"; +namespace UnitTest +{ + /// + /// Classe de tests pour la classe Customer. + /// + public class CustomerTests + { + /// + /// Teste si la liste des comptes du client est initialisée correctement. + /// + [Fact] + public void Constructor_AccountsListInitialized() + { + // Initialisation + string name = "Cust"; + string firstName = "Gérard"; + string password = "123456"; -// // Act -// Customer customer = new Customer(name, firstName, password); + // Act + Customer customer = new Customer(name, firstName, password); -// // Assert -// Assert.NotNull(customer.AccountsList); -// Assert.Empty(customer.AccountsList); -// } + // Assert + Assert.NotNull(customer.AccountsList); + Assert.Empty(customer.AccountsList); + } -// /// -// /// Teste l'égalité entre deux clients. -// /// -// [Fact] -// public void Equals_TwoEqualCustomers_ReturnsTrue() -// { -// // Arrange -// string name1 = "Doe"; -// string firstName1 = "John"; -// string password1 = "123456"; -// string name2 = "Doe"; -// string firstName2 = "John"; -// string password2 = "123456"; + /// + /// Teste si la liste des comptes du client est initialisée correctement en utilisant InlineData. + /// + /// Nom du client. + /// Prénom du client. + /// Mot de passe du client. + [Theory] + [InlineData("Cust", "Gérard", "123456")] + public void Constructor_AccountsListInitialized_InlineData(string name, string firstName, string password) + { + // Act + Customer customer = new Customer(name, firstName, password); -// // Act -// Customer customer1 = new Customer(name1, firstName1, password1); -// Customer customer2 = new Customer(name2, firstName2, password2); + // Assert + Assert.NotNull(customer.AccountsList); + Assert.Empty(customer.AccountsList); + } -// // Assert -// Assert.True(customer1.Equals(customer2)); -// } + /// + /// Fournit les données pour le test de l'initialisation de la liste des comptes du client. + /// + public static TheoryData TestData => + new TheoryData + { + { "Cust", "Gérard", "123456" }, + }; -// /// -// /// Teste l'égalité entre deux clients avec des identifiants différents. -// /// -// [Fact] -// public void Equals_TwoDifferentCustomers_ReturnsFalse() -// { -// // Arrange -// string name1 = "Doe"; -// string firstName1 = "John"; -// string password1 = "123456"; -// string name2 = "Smith"; -// string firstName2 = "Jane"; -// string password2 = "abcdef"; + /// + /// Teste si la liste des comptes du client est initialisée correctement en utilisant MemberData. + /// + /// Nom du client. + /// Prénom du client. + /// Mot de passe du client. + [Theory] + [MemberData(nameof(TestData))] + public void Constructor_AccountsListInitialized_MemberData(string name, string firstName, string password) + { + // Act + Customer customer = new Customer(name, firstName, password); -// // Act -// Customer customer1 = new Customer(name1, firstName1, password1); -// Customer customer2 = new Customer(name2, firstName2, password2); - -// // Assert -// Assert.False(customer1.Equals(customer2)); -// } -// } -//} + // Assert + Assert.NotNull(customer.AccountsList); + Assert.Empty(customer.AccountsList); + } + } +}