using EPAServeur.Context; using EPAServeur.Exceptions; using EPAServeur.IServices; using EPAServeur.Services; using IO.Swagger.ApiCollaborateur; using IO.Swagger.DTO; using Microsoft.EntityFrameworkCore; using NUnit.Framework; using System; using System.Linq; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; namespace EPAServeur.Tests.Services { [TestFixture] public class CollaborateurServiceTests { #region private EpContext context; private ICollaborateurApi collaborateurApi; #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.AddNotes(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; } collaborateurApi = new CollaborateurApi(); } #endregion #region Tests getCollaborateur [TestCase("842650db-a548-4472-a3af-4c5fff3c1ab8")] [TestCase("301ba7f3-095e-4912-8998-a7c942dc5f23")] [TestCase("4f3fcd23-a1e4-4c9e-afa2-d06ca9216491")] public async Task GetCollaborateurById_Ok(Guid? id) { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); CollaborateurDTO collaborateurDTO = await collaborateurService.GetCollaborateurByIdAsync(id); Assert.IsNotNull(collaborateurDTO); Assert.AreEqual(collaborateurDTO.Id, id); } [TestCase("creola.nicolas@apside-groupe.com")] [TestCase("lamar.rousseau@apside-groupe.com")] [TestCase("coty.lemoine@apside-groupe.com")] public async Task GetCollaborateurByMail_Ok(string mail) { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); CollaborateurDTO collaborateurDTO = await collaborateurService.GetCollaborateurByMailAsync(mail); Assert.IsNotNull(collaborateurDTO); Assert.AreEqual(collaborateurDTO.MailApside, mail); } [TestCase("006226f6-51b2-4a02-a302-7447f7fccc04")] [TestCase("e5d36da4-df16-4d19-8a11-1ba2f6efc80c")] [TestCase("92b29b9c-40a4-4aa0-9412-bc97a379e52f")] public async Task GetCollaborateurById_CollaborateurNotFound(Guid? id) { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); AsyncTestDelegate exception = () => collaborateurService.GetCollaborateurByIdAsync(id); Assert.ThrowsAsync(typeof(CollaborateurNotFoundException), exception); } [TestCase("nicolas@apside.fr")] [TestCase("rousseau@apside.fr")] [TestCase("lemoine@apside.fr")] public async Task GetCollaborateurByMail_CollaborateurNotFound(string mail) { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); AsyncTestDelegate exception = () => collaborateurService.GetCollaborateurByMailAsync(mail); Assert.ThrowsAsync(typeof(CollaborateurNotFoundException), exception); } #endregion #region Tests GetCollaborateurs Roles [TestCase("RH")] [TestCase("Collaborateur")] [TestCase("Assistant")] [TestCase("Manager")] [TestCase("RA")] public async Task GetCollaborateurs_UnRole(string role) { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); List roles = new List(); roles.Add(role); IEnumerable collaborateurs = await collaborateurService.GetCollaborateursAsync(roles, null, true, 1, 50, "", "", null, null); int count = await collaborateurService.GetCollaborateursCountAsync(roles, null, "", null, null); Assert.AreEqual(count, collaborateurs.Count()); switch (role) { case "RH": Assert.AreEqual(count, 9); break; case "Collaborateur": Assert.AreEqual(count, 7); break; case "Assistant": Assert.AreEqual(count, 6); break; case "Manager": Assert.AreEqual(count, 10); break; case "RA": Assert.AreEqual(count, 5); break; } } [Test] public async Task GetCollaborateurs_RoleRH_RoleAssistant() { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); List roles = new List(); roles.Add("Assistant"); roles.Add("RH"); IEnumerable collaborateurs = await collaborateurService.GetCollaborateursAsync(roles, null, true, 1, 50, "", "", null, null); int count = await collaborateurService.GetCollaborateursCountAsync(roles, null, "", null, null); Assert.AreEqual(count, 15); Assert.AreEqual(count, collaborateurs.Count()); } [Test] public async Task GetCollaborateurs_RoleRA_RoleManager() { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); List roles = new List(); roles.Add("Manager"); roles.Add("RA"); IEnumerable collaborateurs = await collaborateurService.GetCollaborateursAsync(roles, null, true, 1, 50, "", "", null, null); int count = await collaborateurService.GetCollaborateursCountAsync(roles, null, "", null, null); Assert.AreEqual(count, collaborateurs.Count()); Assert.AreEqual(count, 15); } #endregion #region Test GetCollaborateurs Tri et Pagination [Test] public async Task GetCollaborateurs_Asc_Desc() { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); IEnumerable collaborateursAsc = await collaborateurService.GetCollaborateursAsync(null, null, true, 1, 50, "", "", null, null); IEnumerable collaborateursDesc = await collaborateurService.GetCollaborateursAsync(null, null, false, 1, 50, "", "", null, null); CollaborateurDTO collaborateurDTOFirstAsc = collaborateursAsc.First(); CollaborateurDTO collaborateurDTLastAsc = collaborateursAsc.Last(); CollaborateurDTO collaborateurDTOFirstDesc = collaborateursDesc.First(); CollaborateurDTO collaborateurDTLastDesc = collaborateursDesc.Last(); Assert.AreEqual(collaborateurDTOFirstAsc.Id, collaborateurDTLastDesc.Id); Assert.AreEqual(collaborateurDTLastAsc.Id, collaborateurDTOFirstDesc.Id); } [TestCase("ma")] [TestCase("z")] [TestCase("em")] [TestCase("")] public async Task GetCollaborateurs_Texte(string texte) { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); IEnumerable collaborateurs = await collaborateurService.GetCollaborateursAsync(null, null, true, 1, 50, texte, "", null, null); string nomprenom, prenomnom; foreach(CollaborateurDTO collaborateur in collaborateurs) { nomprenom = collaborateur.Nom.ToLower() + " " + collaborateur.Prenom.ToLower(); prenomnom = collaborateur.Prenom.ToLower() + " " + collaborateur.Nom.ToLower(); Assert.IsTrue(nomprenom.Contains(texte) || prenomnom.Contains(texte)); } } [TestCase(2015,1,1)] [TestCase(2016,1,1)] [TestCase(2017,1,1)] [TestCase(2018,1,1)] public async Task GetCollaborateurs_DateDebut(int annee, int mois, int jour) { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); DateTime dateDebut = new DateTime(annee, mois, jour); IEnumerable collaborateurs = await collaborateurService.GetCollaborateursAsync(null, null, true, 1, 50, "", "", dateDebut, null); foreach(CollaborateurDTO collaborateur in collaborateurs) { Assert.IsTrue(collaborateur.DateArrivee >= dateDebut); } } [TestCase(2020, 12, 31)] [TestCase(2019, 12, 31)] [TestCase(2018, 12, 31)] [TestCase(2017, 12, 31)] public async Task GetCollaborateurs_DateFin(int annee, int mois, int jour) { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); DateTime dateFin = new DateTime(annee, mois, jour); IEnumerable collaborateurs = await collaborateurService.GetCollaborateursAsync(null, null, true, 1, 50, "", "", null, dateFin); foreach (CollaborateurDTO collaborateur in collaborateurs) { Assert.IsTrue(collaborateur.DateArrivee < dateFin); } } [TestCase(2016,1,1,2018,12,31)] [TestCase(2017,6,1,2017,6,30)] [TestCase(2019,1,1,2019,12,31)] public async Task GetCollaborateurs_DateDebutDateFin(int anneeDeb, int moisDeb, int jourDeb, int anneeFin, int moisFin, int jourFin) { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); DateTime dateDebut= new DateTime(anneeDeb, moisDeb, jourDeb); DateTime dateFin = new DateTime(anneeFin, moisFin, jourFin); IEnumerable collaborateurs = await collaborateurService.GetCollaborateursAsync(null, null, true, 1, 50, "", "", dateDebut, dateFin); foreach (CollaborateurDTO collaborateur in collaborateurs) { Assert.IsTrue(collaborateur.DateArrivee >= dateDebut && collaborateur.DateArrivee < dateFin); } } [TestCase(1,15)] [TestCase(4,5)] [TestCase(2,15)] [TestCase(1,20)] [TestCase(1,37)] public async Task GetCollaborateur_Paginaion(int numPage, int parPage) { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); IEnumerable collaborateurs = await collaborateurService.GetCollaborateursAsync(null, null, true, numPage, parPage, "", "", null, null); Assert.AreEqual(collaborateurs.Count(), parPage); } [TestCase(2, 37, 0)] [TestCase(3, 15, 7)] [TestCase(8, 5, 2)] public async Task GetCollaborateur_Paginaion_2(int numPage, int parPage, int res) { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); IEnumerable collaborateurs = await collaborateurService.GetCollaborateursAsync(null, null, true, numPage, parPage, "", "", null, null); Assert.AreEqual(collaborateurs.Count(), res); } [TestCase(0, 4)] [TestCase(-1, 0)] [TestCase(-10, -10)] [TestCase(-10, 20)] [TestCase(-1, 37)] public async Task GetCollaborateur_PaginaionValeursParDefaut(int numPage, int parPage) { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); IEnumerable collaborateurs = await collaborateurService.GetCollaborateursAsync(null, null, true, numPage, parPage, "", "", null, null); if(parPage < 5) Assert.AreEqual(collaborateurs.Count(), 15); else Assert.AreEqual(collaborateurs.Count(), parPage); } [Test] public async Task GetCollaborateur_OrderByDateArrive() { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); IEnumerable collaborateurs = await collaborateurService.GetCollaborateursAsync(null, null, true, 1, 30, "", "datearrivee", null, null); DateTime d1, d2; for(int i = 0; i < collaborateurs.Count() -1; ++i) { d1 = collaborateurs.ElementAt(i).DateArrivee.Value; d2 = collaborateurs.ElementAt(i+1).DateArrivee.Value; Assert.AreEqual(DateTime.Compare(d1, d2),-1); } } [Test] public async Task GetCollaborateur_OrderByBU() { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); IEnumerable collaborateurs = await collaborateurService.GetCollaborateursAsync(null, null, true, 1, 30, "", "businessunit", null, null); string bu1, bu2; for (int i = 0; i < collaborateurs.Count() - 1; ++i) { bu1 = collaborateurs.ElementAt(i).BusinessUnit.Nom; bu2 = collaborateurs.ElementAt(i + 1).BusinessUnit.Nom; Console.WriteLine(bu1 + " " + bu2); Assert.IsTrue(string.Compare(bu1, bu2) <= 0); } } [Test] public async Task GetCollaborateur_OrderByNom() { ICollaborateurService collaborateurService = new CollaborateurService(collaborateurApi, context); IEnumerable collaborateurs = await collaborateurService.GetCollaborateursAsync(null, null, true, 1, 30, "", "collaborateur", null, null); string nom1, nom2; for (int i = 0; i < collaborateurs.Count() - 1; ++i) { nom1 = collaborateurs.ElementAt(i).Nom; nom2 = collaborateurs.ElementAt(i+1).Nom; Assert.IsTrue(string.Compare(nom1, nom2) <= 0); } } #endregion } }