using EPAServeur.Context; using EPAServeur.IServices; using EPAServeur.Services; using IO.Swagger.ApiCollaborateur; using IO.Swagger.DTO; using Microsoft.EntityFrameworkCore; using NUnit.Framework; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EPAServeur.Tests.Services { [TestFixture] public class EpInformationTests { #region private EpContext context; private ICollaborateurService collaborateurService; #endregion #region Setup [SetUp] public void Setup() { // Utilisation d'une base de données en mémoire var optionBuider = new DbContextOptionsBuilder() .UseInMemoryDatabase("server_ep_test") .Options; context = new EpContext(optionBuider); context.Database.EnsureDeleted(); context.Database.EnsureCreated(); context.SaveChanges(); // Ajout du jeu de données pour les tests DataSeeder.AddEp(context); // Détache les entités du context car la base de données InMemory créé des conflits // entre les clés primaires lors d'un Update ou d'un Insert foreach (var entity in context.ChangeTracker.Entries()) { entity.State = EntityState.Detached; } collaborateurService = new CollaborateurService(new CollaborateurApi(), context); } #endregion #region Récupération des EP en cours [TestCase(1, 5)] //Tours [TestCase(2, 3)] //Orléans [TestCase(3, 6)] // Paris public async Task GetEpEnCours_UneBU(long? idBUs, int nbElements) { IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPEnCours(new List{ idBUs }, true, 1, 15, "", "", null, null); int count = await epInformationService.GetEPEnCoursCount(new List { idBUs }, true, 1, 15, "", "", null, null); Assert.AreEqual(count, nbElements); Assert.AreEqual(count, epInformationDTOs.Count()); foreach(EpInformationDTO ep in epInformationDTOs) { Assert.AreEqual(ep.Collaborateur.BusinessUnit.Id, idBUs); } } public async Task GetEpEnCours_OrleansTours() { IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPEnCours(new List { 1,2 }, true, 1, 15, "", "", null, null); int count = await epInformationService.GetEPEnCoursCount(new List { 1, 2 }, true, 1, 15, "", "", null, null); Assert.AreEqual(count, 8); Assert.AreEqual(count, epInformationDTOs.Count()); long? bu; foreach(EpInformationDTO ep in epInformationDTOs) { bu = ep.Collaborateur.BusinessUnit.Id; Assert.IsTrue(bu == 1 || bu == 2); } } //tri colonne [TestCase("agence")] [TestCase("collaborateur")] [TestCase("referent")] [TestCase("date")] [TestCase("typeep")] [TestCase("etatep")] public async Task GetEpEnCours_TriColonneASC(string tri) { IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPEnCours(new List { 1, 2 }, true, 1, 15, "", tri, null, null); EpInformationDTO ep1, ep2; int compare = 0; for(int i = 0; i < epInformationDTOs.Count()-1; ++i) { ep1 = epInformationDTOs.ElementAt(i); ep2 = epInformationDTOs.ElementAt(i+1); switch(tri) { case "agence": compare = ep1.Collaborateur.BusinessUnit.Nom.CompareTo(ep2.Collaborateur.BusinessUnit.Nom); break; case "collaborateur": compare = (ep1.Collaborateur.Nom + " " + ep1.Collaborateur.Prenom).CompareTo((ep2.Collaborateur.Nom + " " + ep2.Collaborateur.Prenom)); break; case "referent": compare = (ep1.Referent.Nom + " " + ep1.Referent.Prenom).CompareTo((ep2.Referent.Nom + " " + ep2.Referent.Prenom)); break; case "date": compare = ep1.DatePrevisionnelle.Value.CompareTo(ep2.DatePrevisionnelle.Value); break; case "typeep": compare = ep1.Type.CompareTo(ep2.Type); break; case "etatep": compare = ep1.Statut.CompareTo(ep2.Statut); break; } Assert.IsTrue(compare <= 0); } } //tri colonne [TestCase("agence")] [TestCase("collaborateur")] [TestCase("referent")] [TestCase("date")] [TestCase("typeep")] [TestCase("etatep")] public async Task GetEpEnCours_TriColonneDESC(string tri) { IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPEnCours(new List { 1, 2 }, false, 1, 15, "", tri, null, null); EpInformationDTO ep1, ep2; int compare = 0; for (int i = 0; i < epInformationDTOs.Count() - 1; ++i) { ep1 = epInformationDTOs.ElementAt(i); ep2 = epInformationDTOs.ElementAt(i + 1); switch (tri) { case "agence": compare = ep1.Collaborateur.BusinessUnit.Nom.CompareTo(ep2.Collaborateur.BusinessUnit.Nom); break; case "collaborateur": compare = (ep1.Collaborateur.Nom + " " + ep1.Collaborateur.Prenom).CompareTo(ep2.Collaborateur.Nom + " " + ep2.Collaborateur.Prenom); break; case "referent": compare = (ep1.Referent.Nom + " " + ep1.Referent.Prenom).CompareTo((ep2.Referent.Nom + " " + ep2.Referent.Prenom)); break; case "date": compare = ep1.DatePrevisionnelle.Value.CompareTo(ep2.DatePrevisionnelle.Value); break; case "typeep": compare = ep1.Type.CompareTo(ep2.Type); break; case "etatep": compare = ep1.Statut.CompareTo(ep2.Statut); break; } Assert.IsTrue(compare >= 0); } } //tris date [TestCase(01, 02, 2021)] [TestCase(01, 03, 2021)] [TestCase(01, 04, 2021)] public async Task GetEpEnCours_TriDateD1(int j, int m, int a) { DateTime date = new DateTime(a, m, j); IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPEnCours(new List { 1, 2 }, true, 1, 15, "", "", date, null); int count = await epInformationService.GetEPEnCoursCount(new List { 1, 2 }, true, 1, 15, "", "", date, null); Assert.AreEqual(epInformationDTOs.Count(), count); foreach(EpInformationDTO ep in epInformationDTOs) { Assert.IsTrue(date <= ep.DatePrevisionnelle.Value); } } [TestCase(01, 04, 2021)] [TestCase(01, 03, 2021)] [TestCase(31, 01, 2021)] public async Task GetEpEnCours_TriDateD2(int j, int m, int a) { DateTime date = new DateTime(a, m, j); IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPEnCours(new List { 1, 2 }, true, 1, 15, "", "", null, date); int count = await epInformationService.GetEPEnCoursCount(new List { 1, 2 }, true, 1, 15, "", "", null, date); Assert.AreEqual(epInformationDTOs.Count(), count); foreach (EpInformationDTO ep in epInformationDTOs) { Assert.IsTrue(date >= ep.DatePrevisionnelle.Value); } } [TestCase(01, 02, 2021, 28, 02, 2021)] [TestCase(01, 02, 2021, 01, 04, 2021)] [TestCase(15, 02, 2021, 15, 03, 2021)] [TestCase(01, 01, 2021, 31, 01, 2021)] [TestCase(01, 01, 2022, 31, 01, 2022)] public async Task GetEpEnCours_TriDateD1D2(int j1, int m1, int a1, int j2, int m2, int a2) { DateTime date1 = new DateTime(a1, m1, j1); DateTime date2 = new DateTime(a2, m2, j2); IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPEnCours(new List { 1, 2 }, true, 1, 15, "", "", date1, date2); int count = await epInformationService.GetEPEnCoursCount(new List { 1, 2 }, true, 1, 15, "", "", date1, date2); Assert.AreEqual(epInformationDTOs.Count(), count); foreach (EpInformationDTO ep in epInformationDTOs) { Assert.IsTrue(condition: date1 <= ep.DatePrevisionnelle.Value); Assert.IsTrue(date2 >= ep.DatePrevisionnelle.Value); } } //Tri texte [TestCase("")] public async Task GetEpEnCours_texte(string texte) { IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPEnCours(new List { 1, 2 }, true, 1, 15, texte, "", null, null); int count = await epInformationService.GetEPEnCoursCount(new List { 1, 2 }, true, 1, 15, texte, "", null, null); Assert.AreEqual(count, epInformationDTOs.Count()); foreach (EpInformationDTO ep in epInformationDTOs) { Assert.IsTrue((ep.Collaborateur.Nom + " " + ep.Collaborateur.Prenom).Contains(texte)); } } #endregion #region Récupération des EP signés [TestCase(1, 5)] //Tours [TestCase(2, 4)] //Orléans [TestCase(3, 5)] // Paris public async Task GetEpSignes_UneBU(long? idBUs, int nbElements) { IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPSignes(new List{ idBUs }, true, 1, 15, "", "", null, null); int count = await epInformationService.GetEPSignesCount(new List { idBUs }, true, 1, 15, "", "", null, null); Assert.AreEqual(count, nbElements); Assert.AreEqual(count, epInformationDTOs.Count()); foreach(EpInformationDTO ep in epInformationDTOs) { Assert.AreEqual(ep.Collaborateur.BusinessUnit.Id, idBUs); } } public async Task GetEpSignes_OrleansTours() { IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPSignes(new List { 1,2 }, true, 1, 15, "", "", null, null); int count = await epInformationService.GetEPSignesCount(new List { 1, 2 }, true, 1, 15, "", "", null, null); Assert.AreEqual(count, 8); Assert.AreEqual(count, epInformationDTOs.Count()); long? bu; foreach(EpInformationDTO ep in epInformationDTOs) { bu = ep.Collaborateur.BusinessUnit.Id; Assert.IsTrue(bu == 1 || bu == 2); } } //tri colonne [TestCase("agence")] [TestCase("collaborateur")] [TestCase("referent")] [TestCase("date")] [TestCase("typeep")] public async Task GetEpSignes_TriColonneASC(string tri) { IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPSignes(new List { 1, 2 }, true, 1, 15, "", tri, null, null); EpInformationDTO ep1, ep2; int compare = 0; for(int i = 0; i < epInformationDTOs.Count()-1; ++i) { ep1 = epInformationDTOs.ElementAt(i); ep2 = epInformationDTOs.ElementAt(i+1); switch(tri) { case "agence": compare = ep1.Collaborateur.BusinessUnit.Nom.CompareTo(ep2.Collaborateur.BusinessUnit.Nom); break; case "collaborateur": compare = (ep1.Collaborateur.Nom + " " + ep1.Collaborateur.Prenom).CompareTo((ep2.Collaborateur.Nom + " " + ep2.Collaborateur.Prenom)); break; case "referent": compare = (ep1.Referent.Nom + " " + ep1.Referent.Prenom).CompareTo((ep2.Referent.Nom + " " + ep2.Referent.Prenom)); break; case "date": compare = ep1.DatePrevisionnelle.Value.CompareTo(ep2.DatePrevisionnelle.Value); break; case "typeep": compare = ep1.Type.CompareTo(ep2.Type); break; } Assert.IsTrue(compare <= 0); } } //tri colonne [TestCase("agence")] [TestCase("collaborateur")] [TestCase("referent")] [TestCase("date")] [TestCase("typeep")] public async Task GetEpSignes_TriColonneDESC(string tri) { IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPSignes(new List { 1, 2 }, false, 1, 15, "", tri, null, null); EpInformationDTO ep1, ep2; int compare = 0; for (int i = 0; i < epInformationDTOs.Count() - 1; ++i) { ep1 = epInformationDTOs.ElementAt(i); ep2 = epInformationDTOs.ElementAt(i + 1); switch (tri) { case "agence": compare = ep1.Collaborateur.BusinessUnit.Nom.CompareTo(ep2.Collaborateur.BusinessUnit.Nom); break; case "collaborateur": compare = (ep1.Collaborateur.Nom + " " + ep1.Collaborateur.Prenom).CompareTo(ep2.Collaborateur.Nom + " " + ep2.Collaborateur.Prenom); break; case "referent": compare = (ep1.Referent.Nom + " " + ep1.Referent.Prenom).CompareTo((ep2.Referent.Nom + " " + ep2.Referent.Prenom)); break; case "date": compare = ep1.DatePrevisionnelle.Value.CompareTo(ep2.DatePrevisionnelle.Value); break; case "typeep": compare = ep1.Type.CompareTo(ep2.Type); break; case "etatep": compare = ep1.Statut.CompareTo(ep2.Statut); break; } Assert.IsTrue(compare >= 0); } } //tris date [TestCase(01, 01, 2018)] [TestCase(01, 01, 2019)] [TestCase(01, 01, 2020)] [TestCase(01, 01, 2021)] [TestCase(01, 01, 2022)] public async Task GetEpSignes_TriDateD1(int j, int m, int a) { DateTime date = new DateTime(a, m, j); IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPSignes(new List { 1, 2 }, true, 1, 15, "", "", date, null); int count = await epInformationService.GetEPSignesCount(new List { 1, 2 }, true, 1, 15, "", "", date, null); Assert.AreEqual(epInformationDTOs.Count(), count); foreach(EpInformationDTO ep in epInformationDTOs) { Assert.IsTrue(date <= ep.DatePrevisionnelle.Value); } } [TestCase(31, 12, 2019)] [TestCase(01, 01, 2019)] [TestCase(31, 07, 2018)] [TestCase(31, 07, 2017)] public async Task GetEpSignes_TriDateD2(int j, int m, int a) { DateTime date = new DateTime(a, m, j); IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPSignes(new List { 1, 2 }, true, 1, 15, "", "", null, date); int count = await epInformationService.GetEPSignesCount(new List { 1, 2 }, true, 1, 15, "", "", null, date); Assert.AreEqual(epInformationDTOs.Count(), count); foreach (EpInformationDTO ep in epInformationDTOs) { Assert.IsTrue(date >= ep.DatePrevisionnelle.Value); } } [TestCase(01, 07, 2021, 31, 12, 2021)] [TestCase(01, 09, 2018, 01, 12, 2019)] [TestCase(01, 01, 2018, 31, 12, 2019)] [TestCase(01, 01, 2017, 31, 12, 2017)] public async Task GetEpSignes_TriDateD1D2(int j1, int m1, int a1, int j2, int m2, int a2) { DateTime date1 = new DateTime(a1, m1, j1); DateTime date2 = new DateTime(a2, m2, j2); IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPSignes(new List { 1, 2 }, true, 1, 15, "", "", date1, date2); int count = await epInformationService.GetEPSignesCount(new List { 1, 2 }, true, 1, 15, "", "", date1, date2); Assert.AreEqual(epInformationDTOs.Count(), count); foreach (EpInformationDTO ep in epInformationDTOs) { Assert.IsTrue(condition: date1 <= ep.DatePrevisionnelle.Value); Assert.IsTrue(date2 >= ep.DatePrevisionnelle.Value); } } //Tri texte [TestCase("")] public async Task GetEpSignes_texte(string texte) { IEpInformationService epInformationService = new EpInformationService(context, collaborateurService); IEnumerable epInformationDTOs = await epInformationService.GetEPSignes(new List { 1, 2 }, true, 1, 15, texte, "", null, null); int count = await epInformationService.GetEPSignesCount(new List { 1, 2 }, true, 1, 15, texte, "", null, null); Assert.AreEqual(count, epInformationDTOs.Count()); foreach (EpInformationDTO ep in epInformationDTOs) { Assert.IsTrue((ep.Collaborateur.Nom + " " + ep.Collaborateur.Prenom).Contains(texte)); } } #endregion } }