using EPAServeur.Context; using EPAServeur.Exceptions; using EPAServeur.IServices; using EPAServeur.Models.EP; using EPAServeur.Models.Formation; using EPAServeur.Services; using IO.Swagger.ApiCollaborateur; using IO.Swagger.DTO; using IO.Swagger.Enum; using Microsoft.EntityFrameworkCore; using NUnit.Framework; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace EPAServeur.Tests.Services { [TestFixture] public class DemandeFormationServiceTests { #region Variables private EpContext epContext; private ICollaborateurApi collaborateurApi; private ICollaborateurService collaborateurService; private ITransformDTO transformDTO; #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; epContext = new EpContext(optionBuider); collaborateurApi = new CollaborateurApi(); transformDTO = new TransformDTO(); collaborateurService = new CollaborateurService(collaborateurApi, epContext, transformDTO); epContext.Database.EnsureDeleted(); epContext.Database.EnsureCreated(); epContext.SaveChanges(); // Ajout du jeu de données pour les tests DataSeeder.AddFormations(epContext); // 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 epContext.ChangeTracker.Entries()) { entity.State = EntityState.Detached; } } #endregion #region Tests GetDemandesFormationAsync [TestCase(new EtatDemande[] { EtatDemande.EnAttente, EtatDemande.Validee, EtatDemande.Rejetee }, new long[] { 1, 2 }, true, 1, 20, "gaillard", null, null, null)] [TestCase(new EtatDemande[] { EtatDemande.EnAttente, EtatDemande.Validee, EtatDemande.Rejetee }, new long[] { 1 }, false, 1, 5, "gaillard", null, null, null)] [TestCase(null, null, null, 2, 10, null, null, null, null)] [TestCase(null, new long[] { 1 }, null, 1, 10, null, null, null, null)] [TestCase(new EtatDemande[] { EtatDemande.Rejetee }, null, null, 1, 10, "gai", null, null, null)] [TestCase(new EtatDemande[] { EtatDemande.EnAttente, EtatDemande.Validee, EtatDemande.Rejetee }, new long[] { }, null, 1, 50, "gai", null, null, null)] public async Task GetDemandesFormationAsync_PasseDesParamsValides_RetourneDesDemandesDeFormations(EtatDemande[] arrEtatDemandes, long[] arrIdBUs, bool? asc, int? numPage, int? parPAge, string texte, string tri, DateTime? dateDebut, DateTime? dateFin) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); List idBUs; List etatDemandes; if (arrEtatDemandes != null) etatDemandes = arrEtatDemandes.ToList(); else etatDemandes = null; if (arrIdBUs != null) idBUs = arrIdBUs.Select(idBu => (long?)idBu).ToList(); else idBUs = null; // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(etatDemandes, idBUs, asc, numPage, parPAge, texte, tri, dateDebut, dateFin); // Assert Assert.Less(0, demandeFormationDTOs.Count()); } [TestCase(1, 5)] [TestCase(1, 10)] public async Task GetDemandesFormationAsync_PasseEnParamNumPageEtParPage_RetourneLaPremierePageDesFormations(int? numPage, int? parPage) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, numPage, parPage, null, null, null, null); // Assert Assert.AreEqual(parPage, demandeFormationDTOs.Count()); } [TestCase(2, 5)] [TestCase(2, 6)] [TestCase(2, 10)] [TestCase(2, 15)] public async Task GetDemandesFormationAsync_PasseEnParamNumPageEtParPage_RetourneLaDeuxiemePageDesFormations(int? numPage, int? parPage) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); int nbDemandeFormationDeuxiemePage; switch (parPage) { case 5: nbDemandeFormationDeuxiemePage = 5; break; case 6: nbDemandeFormationDeuxiemePage = 6; break; case 10: nbDemandeFormationDeuxiemePage = 2; break; default: nbDemandeFormationDeuxiemePage = 0; break; } // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, numPage, parPage, null, null, null, null); // Assert Assert.AreEqual(nbDemandeFormationDeuxiemePage, demandeFormationDTOs.Count()); } [TestCase(true, "businessunit")] public async Task GetDemandesFormationAsync_PasseEnParamAscEtTri_RetourneDesDemandesDeFormationsOrdonnanceeParBuCroissante(bool? asc, string tri) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual("Orléans", demandeFormationDTOs.First().Collaborateur.BusinessUnit.Nom); Assert.AreEqual("Tours", demandeFormationDTOs.Last().Collaborateur.BusinessUnit.Nom); } [TestCase(false, "businessunit")] public async Task GetDemandesFormationAsync_PasseEnParamAscEtTri_RetourneDesDemandesDeFormationsOrdonnanceeParBuDecroissante(bool? asc, string tri) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual("Tours", demandeFormationDTOs.First().Collaborateur.BusinessUnit.Nom); Assert.AreEqual("Orléans", demandeFormationDTOs.Last().Collaborateur.BusinessUnit.Nom); } [TestCase(true, "collaborateur")] [TestCase(true, null)] [TestCase(true, "toto")] public async Task GetDemandesFormationAsync_PasseEnParamAscEtTri_RetourneDesDemandesDeFormationsOrdonnanceeParNomDuCollaborateurCroissant(bool? asc, string tri) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual("Gaillard", demandeFormationDTOs.First().Collaborateur.Nom); Assert.AreEqual("Vasseur", demandeFormationDTOs.Last().Collaborateur.Nom); } [TestCase(false, "collaborateur")] [TestCase(false, null)] [TestCase(false, "toto")] public async Task GetDemandesFormationAsync_PasseEnParamAscEtTri_RetourneDesDemandesDeFormationsOrdonnanceeParNomDuCollaborateurDecroissant(bool? asc, string tri) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual("Vasseur", demandeFormationDTOs.First().Collaborateur.Nom); Assert.AreEqual("Gaillard", demandeFormationDTOs.Last().Collaborateur.Nom); } [TestCase(true, "datedemande")] public async Task GetDemandesFormationAsync_PasseEnParamAscEtTri_RetourneDesDemandesDeFormationsOrdonnanceeParDateDemandeCroissante(bool? asc, string tri) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual(new DateTime(2020, 1, 22, 9, 0, 0), demandeFormationDTOs.First().DateDemande); Assert.AreEqual(new DateTime(2020, 12, 22, 9, 0, 0), demandeFormationDTOs.Last().DateDemande); } [TestCase(false, "datedemande")] public async Task GetDemandesFormationAsync_PasseEnParamAscEtTri_RetourneDesDemandesDeFormationsOrdonnanceeParDateDemandeDecroissante(bool? asc, string tri) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual(new DateTime(2020, 12, 22, 9, 0, 0), demandeFormationDTOs.First().DateDemande); Assert.AreEqual(new DateTime(2020, 1, 22, 9, 0, 0), demandeFormationDTOs.Last().DateDemande); } [TestCase(true, "demanderh")] public async Task GetDemandesFormationAsync_PasseEnParamAscEtTri_RetourneDesDemandesDeFormationsOrdonnanceeParDemandeRHCroissant(bool? asc, string tri) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); // Assert Assert.IsFalse(demandeFormationDTOs.First().DemandeRH); Assert.IsTrue(demandeFormationDTOs.Last().DemandeRH); } [TestCase(false, "demanderh")] public async Task GetDemandesFormationAsync_PasseEnParamAscEtTri_RetourneDesDemandesDeFormationsOrdonnanceeParDemandeRHDecroissant(bool? asc, string tri) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); // Assert Assert.IsTrue(demandeFormationDTOs.First().DemandeRH); Assert.IsFalse(demandeFormationDTOs.Last().DemandeRH); } [TestCase(true, "etat")] public async Task GetDemandesFormationAsync_PasseEnParamAscEtTri_RetourneDesDemandesDeFormationsOrdonnanceeParEtatCroissant(bool? asc, string tri) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual(EtatDemande.EnAttente, demandeFormationDTOs.First().EtatDemande); Assert.AreEqual(EtatDemande.Rejetee, demandeFormationDTOs.Last().EtatDemande); } [TestCase(false, "etat")] public async Task GetDemandesFormationAsync_PasseEnParamAscEtTri_RetourneDesDemandesDeFormationsOrdonnanceeParEtatDecroissant(bool? asc, string tri) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual(EtatDemande.Rejetee, demandeFormationDTOs.First().EtatDemande); Assert.AreEqual(EtatDemande.EnAttente, demandeFormationDTOs.Last().EtatDemande); } [TestCase(true, "datereponse")] public async Task GetDemandesFormationAsync_PasseEnParamAscEtTri_RetourneDesDemandesDeFormationsOrdonnanceeParDateDerniereReponseCroissante(bool? asc, string tri) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); // Assert Assert.IsNull(demandeFormationDTOs.First().DateDerniereReponse); Assert.AreEqual(new DateTime(2020, 12, 27, 9, 0, 0), demandeFormationDTOs.Last().DateDerniereReponse); } [TestCase(false, "datereponse")] public async Task GetDemandesFormationAsync_PasseEnParamAscEtTri_RetourneDesDemandesDeFormationsOrdonnanceeParDateDerniereReponseDecroissante(bool? asc, string tri) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual(new DateTime(2020, 12, 27, 9, 0, 0), demandeFormationDTOs.First().DateDerniereReponse); Assert.IsNull(demandeFormationDTOs.Last().DateDerniereReponse); } [TestCase("2020-06-19")] public async Task GetDemandesFormationAsync_PasseEnParamUneDateDeDebut_RetourneDesDemandesDeFormationsAvecUneDateDeDebutSuperieur(DateTime dateDebut) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, null, null, null, null, dateDebut, null); // Assert Assert.IsTrue(demandeFormationDTOs.Any(d => d.DateDemande >= dateDebut)); } [TestCase("2020-05-01")] public async Task GetDemandesFormationAsync_PasseEnParamUneDateDeFin_RetourneDesDemandesDeFormationsAvecUneDateDeFinInferieur(DateTime dateFin) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, null, null, null, null, null, dateFin); // Assert Assert.IsTrue(demandeFormationDTOs.Any(d => d.DateDemande <= dateFin)); } [TestCase("2020-10-01", "2020-12-01")] public async Task GetDemandesFormationAsync_PasseEnParamUneDateDeDebutEtUneDateDeFin_RetourneDesDemandesDeFormationsAvecUneDateDeDebutSuperieurUneDateDeFinInferieur(DateTime dateDebut, DateTime dateFin) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, null, null, null, null, dateDebut, dateFin); // Assert Assert.IsTrue(demandeFormationDTOs.Any(d => d.DateDemande >= dateDebut && d.DateDemande <= dateFin)); } [TestCase("2020-11-01", "2020-10-01")] public async Task GetDemandesFormationAsync_PasseEnParamUneDateDeDebutSuperieurEtUneDateDeFinInferieur_RetourneZeroDemandeDeFormation(DateTime dateDebut, DateTime dateFin) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, null, null, null, null, dateDebut, dateFin); // Assert Assert.Zero(demandeFormationDTOs.Count()); } [TestCase(new long[] { 1, 2 }, "azerty", null, null)] [TestCase(new long[] { -1 }, "gaillard", null, null)] [TestCase(null, null, "2021-11-01", null)] [TestCase(null, null, null, "2019-11-01")] public async Task GetDemandesFormationAsync_PasseDesParamsInvalides_RetourneZeroDemandeDeFormation(long[] arrIdBUs, string texte, DateTime? dateDebut, DateTime? dateFin) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); List idBUs; if (arrIdBUs != null) idBUs = arrIdBUs.Select(idBu => (long?)idBu).ToList(); else idBUs = null; // Act IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, idBUs, null, null, null, texte, null, dateDebut, dateFin); // Assert Assert.Zero(demandeFormationDTOs.Count()); } #endregion #region Tests GetDemandesFormationCountAsync [TestCase(new long[] { 1, 2 }, null, null, null)] [TestCase(null, "gaillard", null, null)] [TestCase(null, null, "2020-10-01", "2020-12-01")] [TestCase(null, null, "2020-11-01", null)] [TestCase(null, null, null, "2020-11-01")] [TestCase(null, null, null, null)] public async Task GetDemandesFormationCountAsync_PasseDesParamsValides_RetourneLeNombreTotalDeDemandesDeFormation(long[] arrIdBUs, string texte, DateTime? dateDebut, DateTime? dateFin) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); List idBUs; if (arrIdBUs != null) idBUs = arrIdBUs.Select(idBu => (long?)idBu).ToList(); else idBUs = null; // Act long count = await demandeFormationService.GetDemandesFormationCountAsync(null, idBUs, texte, dateDebut, dateFin); // Assert Assert.Less(0, count); } [TestCase(new long[] { 1, 2 }, "azerty", null, null)] [TestCase(new long[] { -1 }, "demande", null, null)] [TestCase(null, null, "2021-11-01", null)] [TestCase(null, null, null, "2019-11-01")] public async Task GetDemandesFormationCountAsync_PasseDesParamsInvalides_RetourneZero(long[] arrIdBUs, string texte, DateTime? dateDebut, DateTime? dateFin) { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); List idBUs; if (arrIdBUs != null) idBUs = arrIdBUs.Select(idBu => (long?)idBu).ToList(); else idBUs = null; // Act long count = await demandeFormationService.GetDemandesFormationCountAsync(null, idBUs, texte, dateDebut, dateFin); // Assert Assert.AreEqual(0, count); } #endregion #region Tests GetOriginesDemandeFormationAsync [Test] public async Task GetOriginesDemandeFormationAsync_RetourneToutesLesOriginesDeDemandeDeFormation() { // Arrange DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act IEnumerable origineDemandeFormationDTOs = await demandeFormationService.GetOriginesDemandeFormationAsync(); // Assert Assert.IsNotNull(origineDemandeFormationDTOs); Assert.AreEqual(5, origineDemandeFormationDTOs.Count()); // Nombre total d'origines de demande de formation dans la classe DataSeeder le 2020-03-08 } #endregion #region Tests AddDemandeFormationAsync [Test] public async Task AddDemandeFormationAsync_AjouteUneDemandeDeFormationValide_DemandeDeFormationAjouteeAvecSucces() { // Arrange OrigineDemandeFormationDTO origineDemandeFormationApside = new OrigineDemandeFormationDTO { Id = 5, Libelle = "Demande Apside" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("842650db-a548-4472-a3af-4c5fff3c1ab8"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Lemoine", Prenom = "Coty", MailApside = "coty.lemoine@apside-groupe.com", DateArrivee = new DateTime(2017, 2, 10, 20, 37, 58, 741), DateDepart = null, }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Libelle = "Formation React", Description = "Demande de formation React avec Redux", DemandeRH = true, DateDemande = DateTime.Now, EtatDemande = EtatDemande.EnAttente, Origine = origineDemandeFormationApside, Collaborateur = collaborateur, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act DemandeFormationDTO demandeDeFormationAjoute = await demandeFormationService.AddDemandeFormationAsync(demandeFormation); // Vérifie si la nouvelle demande de formation est bien liée au prochain EP du collaborateur Lemoine Coty Ep ep = await epContext.Ep.FirstOrDefaultAsync(e => e.IdEP == 12); bool exist = ep.DemandesFormation.Any(d => d.IdDemandeFormation == 13); // Assert Assert.IsNotNull(demandeDeFormationAjoute); Assert.AreEqual(13, demandeDeFormationAjoute.Id); Assert.AreEqual(demandeFormation.Libelle, demandeDeFormationAjoute.Libelle); Assert.AreEqual(demandeFormation.Description, demandeDeFormationAjoute.Description); Assert.AreEqual(demandeFormation.DemandeRH, demandeDeFormationAjoute.DemandeRH); Assert.AreEqual(demandeFormation.DateDemande, demandeDeFormationAjoute.DateDemande); Assert.AreEqual(demandeFormation.EtatDemande, demandeDeFormationAjoute.EtatDemande); Assert.AreEqual(demandeFormation.Origine, demandeDeFormationAjoute.Origine); Assert.AreEqual(demandeFormation.Collaborateur.Id, demandeDeFormationAjoute.Collaborateur.Id); Assert.AreEqual(demandeFormation.Collaborateur.Nom, demandeDeFormationAjoute.Collaborateur.Nom); Assert.AreEqual(demandeFormation.Collaborateur.Prenom, demandeDeFormationAjoute.Collaborateur.Prenom); Assert.IsTrue(exist); } [Test] public void AddDemandeFormationAsync_AjouteUneDemandeDeFormationNull_LeveUneDemandeFormationInvalidException() { // Arrange DemandeFormationDTO demandeFormation = null; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.AddDemandeFormationAsync(demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationInvalidException), throwException); } [TestCase("", "Demande de formation React avec Redux", true, "2021-03-10")] [TestCase("Formation React", "", true, "2021-03-10")] [TestCase("Formation React", "Demande de formation React avec Redux", null, "2021-03-10")] [TestCase("Formation React", "Demande de formation React avec Redux", true, null)] public void AddDemandeFormationAsync_AjouteUneDemandeDeFormationAvecDesProprietesInvalides_LeveUneDemandeFormationInvalidException(string libelle, string description, bool? demandeRH, DateTime? dateDemande) { // Arrange OrigineDemandeFormationDTO origineDemandeFormationApside = new OrigineDemandeFormationDTO { Id = 5, Libelle = "Demande Apside" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("842650db-a548-4472-a3af-4c5fff3c1ab8"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Lemoine", Prenom = "Coty", MailApside = "coty.lemoine@apside-groupe.com", DateArrivee = new DateTime(2017, 2, 10, 20, 37, 58, 741), DateDepart = null, }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Libelle = libelle, Description = description, DemandeRH = demandeRH, DateDemande = dateDemande, EtatDemande = EtatDemande.EnAttente, Origine = origineDemandeFormationApside, Collaborateur = collaborateur, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.AddDemandeFormationAsync(demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationInvalidException), throwException); } [Test] public void AddDemandeFormationAsync__AjouteUneDemandeDeFormationQuiNestPasEnAttente_LeveUneDemandeFormationInvalidException() { // Arrange OrigineDemandeFormationDTO origineDemandeFormationApside = new OrigineDemandeFormationDTO { Id = 5, Libelle = "Demande Apside" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("842650db-a548-4472-a3af-4c5fff3c1ab8"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Lemoine", Prenom = "Coty", MailApside = "coty.lemoine@apside-groupe.com", DateArrivee = new DateTime(2017, 2, 10, 20, 37, 58, 741), DateDepart = null, }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Libelle = "Formation React", Description = "Demande de formation React avec Redux", DemandeRH = true, DateDemande = DateTime.Now, EtatDemande = EtatDemande.Validee, Origine = origineDemandeFormationApside, Collaborateur = collaborateur, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.AddDemandeFormationAsync(demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationInvalidException), throwException); } [Test] public void AddDemandeFormationAsync_AjouteUneDemandeDeFormationAvecUnCollaborateurNull_LeveUneDemandeFormationInvalidException() { // Arrange OrigineDemandeFormationDTO origineDemandeFormationApside = new OrigineDemandeFormationDTO { Id = 5, Libelle = "Demande Apside" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = null; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Libelle = "Formation React", Description = "Demande de formation React avec Redux", DemandeRH = true, DateDemande = DateTime.Now, EtatDemande = EtatDemande.EnAttente, Origine = origineDemandeFormationApside, Collaborateur = collaborateur, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.AddDemandeFormationAsync(demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationInvalidException), throwException); } [Test] public void AddDemandeFormationAsync_AjouteUneDemandeDeFormationAvecUnIdCollaborateurNull_LeveUneDemandeFormationInvalidException() { // Arrange OrigineDemandeFormationDTO origineDemandeFormationApside = new OrigineDemandeFormationDTO { Id = 5, Libelle = "Demande Apside" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = null, BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Lemoine", Prenom = "Coty", MailApside = "coty.lemoine@apside-groupe.com", DateArrivee = new DateTime(2017, 2, 10, 20, 37, 58, 741), DateDepart = null, }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Libelle = "Formation React", Description = "Demande de formation React avec Redux", DemandeRH = true, DateDemande = DateTime.Now, EtatDemande = EtatDemande.EnAttente, Origine = origineDemandeFormationApside, Collaborateur = collaborateur, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.AddDemandeFormationAsync(demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationInvalidException), throwException); } [Test] public void AddDemandeFormationAsync_AjouteUneDemandeDeFormationAvecUneOrigineNull_LeveUneDemandeFormationInvalidException() { // Arrange OrigineDemandeFormationDTO origineDemandeFormationApside = null; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("842650db-a548-4472-a3af-4c5fff3c1ab8"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Lemoine", Prenom = "Coty", MailApside = "coty.lemoine@apside-groupe.com", DateArrivee = new DateTime(2017, 2, 10, 20, 37, 58, 741), DateDepart = null, }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Libelle = "Formation React", Description = "Demande de formation React avec Redux", DemandeRH = true, DateDemande = DateTime.Now, EtatDemande = EtatDemande.EnAttente, Origine = origineDemandeFormationApside, Collaborateur = collaborateur, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.AddDemandeFormationAsync(demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationInvalidException), throwException); } [Test] public void AddDemandeFormationAsync_AjouteUneDemandeDeFormationAvecUnIdOrigineNull_LeveUneDemandeFormationInvalidException() { // Arrange OrigineDemandeFormationDTO origineDemandeFormationApside = new OrigineDemandeFormationDTO { Id = null, Libelle = "Demande Apside" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("842650db-a548-4472-a3af-4c5fff3c1ab8"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Lemoine", Prenom = "Coty", MailApside = "coty.lemoine@apside-groupe.com", DateArrivee = new DateTime(2017, 2, 10, 20, 37, 58, 741), DateDepart = null, }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Libelle = "Formation React", Description = "Demande de formation React avec Redux", DemandeRH = true, DateDemande = DateTime.Now, EtatDemande = EtatDemande.EnAttente, Origine = origineDemandeFormationApside, Collaborateur = collaborateur, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.AddDemandeFormationAsync(demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationInvalidException), throwException); } [Test] public void AddDemandeFormationAsync_AjouteUneDemandeDeFormationQuiEstLieeAUnEpSigne_LeveUneDemandeFormationInvalidException() { // Arrange OrigineDemandeFormationDTO origineDemandeFormationApside = new OrigineDemandeFormationDTO { Id = 5, Libelle = "Demande Apside" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("301ba7f3-095e-4912-8998-a7c942dc5f23"), BusinessUnit = new BusinessUnitDTO { Id = 1, Nom = "Tours", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Rousseau", Prenom = "Lamar", MailApside = "lamar.rousseau@apside-groupe.com", DateArrivee = new DateTime(2020, 8, 1, 13, 21, 39, 799), DateDepart = null, }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Libelle = "Formation React", Description = "Demande de formation React avec Redux", DemandeRH = true, DateDemande = DateTime.Now, EtatDemande = EtatDemande.EnAttente, Origine = origineDemandeFormationApside, Collaborateur = collaborateur, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.AddDemandeFormationAsync(demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationInvalidException), throwException); } #endregion #region Tests UpdateDemandeFormationAsync [Test] public async Task UpdateDemandeFormationAsync_AccepteUneDemandeDeDemandeFormationEtAjouteLeParticipantALaListeDesParticipantsVide_DemandeAccepteeAvecSucces() { // Arrange long idDemandeFormation = 1; int nbParticipant = 0; OrigineDemandeFormationDTO origineDemandeFormationApside = new OrigineDemandeFormationDTO { Id = 5, Libelle = "Demande Apside" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("842650db-a548-4472-a3af-4c5fff3c1ab8"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Lemoine", Prenom = "Coty", MailApside = "coty.lemoine@apside-groupe.com", DateArrivee = new DateTime(2017, 2, 10, 20, 37, 58, 741), DateDepart = null, }; FormationDetailsDTO formation = new FormationDetailsDTO { Id = 1, Intitule = "Formation Mainframe Complète", DateDebut = new DateTime(2020, 1, 25, 10, 0, 0), DateFin = new DateTime(2020, 1, 27), Organisme = "Organisme1", Origine = new OrigineFormationDTO { Id = 2, Libelle = "Exigence client" }, Statut = new StatutFormationDTO { Id = 1, Libelle = "Planifiée" }, EstCertifiee = false, NbParticipations = nbParticipant }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Id = idDemandeFormation, Libelle = "Formation Cobol", Description = "Demande de formation Cobol avec Mainframe", DemandeRH = false, DateDemande = new DateTime(2020, 1, 22, 9, 0, 0), EtatDemande = EtatDemande.Validee, Origine = origineDemandeFormationApside, Collaborateur = collaborateur, Formation = formation, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act DemandeFormationDTO demandeFormationAcceptee = await demandeFormationService.UpdateDemandeFormationAsync(idDemandeFormation, demandeFormation); bool participationFormationCree = await epContext.ParticipationFormation.Include(p => p.DemandeFormation).AnyAsync(p => p.DemandeFormation.IdDemandeFormation == idDemandeFormation); // Assert Assert.IsNotNull(demandeFormationAcceptee); Assert.AreEqual(idDemandeFormation, demandeFormationAcceptee.Id); Assert.AreEqual(demandeFormation.Libelle, demandeFormationAcceptee.Libelle); Assert.AreEqual(demandeFormation.Description, demandeFormationAcceptee.Description); Assert.AreEqual(demandeFormation.EtatDemande, demandeFormationAcceptee.EtatDemande); Assert.IsNotNull(demandeFormationAcceptee.DateDerniereReponse); Assert.IsTrue(participationFormationCree); Assert.Less(nbParticipant, demandeFormationAcceptee.Formation.NbParticipations); } [Test] public async Task UpdateDemandeFormationAsync_AccepteUneDemandeDeDemandeFormationEtAjouteLeParticipantALaListeDesParticipantsNonVide_DemandeAccepteeAvecSucces() { // Arrange long idDemandeFormation = 3; int nbParticipant = 1; OrigineDemandeFormationDTO origineDemandeFormationClient = new OrigineDemandeFormationDTO { Id = 3, Libelle = "Exigence Client" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("a0f40e2a-cc03-4032-a627-5389e1281c64"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Vasseur", Prenom = "Florencio", MailApside = "florencio.vasseur@apside-groupe.com", DateArrivee = new DateTime(2016, 1, 15, 10, 22, 30, 778), DateDepart = null, }; FormationDetailsDTO formation = new FormationDetailsDTO { Id = 3, Intitule = "Apprendre C# et le développement de logiciels avec WPF", DateDebut = new DateTime(2020, 5, 25, 14, 0, 0), DateFin = new DateTime(2020, 5, 27), Organisme = "Organisme2", Origine = new OrigineFormationDTO { Id = 3, Libelle = "Exigence Apside" }, Statut = new StatutFormationDTO { Id = 1, Libelle = "Planifiée" }, EstCertifiee = true, NbParticipations = nbParticipant }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Id = idDemandeFormation, Libelle = "Formation C#", Description = "Demande de formation C# avec WPF", DemandeRH = false, DateDemande = new DateTime(2020, 3, 22, 9, 0, 0), EtatDemande = EtatDemande.Validee, Origine = origineDemandeFormationClient, Collaborateur = collaborateur, Formation = formation, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act DemandeFormationDTO demandeFormationAcceptee = await demandeFormationService.UpdateDemandeFormationAsync(idDemandeFormation, demandeFormation); bool participationFormationCree = await epContext.ParticipationFormation.Include(p => p.DemandeFormation).AnyAsync(p => p.DemandeFormation.IdDemandeFormation == idDemandeFormation); // Assert Assert.IsNotNull(demandeFormationAcceptee); Assert.AreEqual(idDemandeFormation, demandeFormationAcceptee.Id); Assert.AreEqual(demandeFormation.Libelle, demandeFormationAcceptee.Libelle); Assert.AreEqual(demandeFormation.Description, demandeFormationAcceptee.Description); Assert.AreEqual(demandeFormation.EtatDemande, demandeFormationAcceptee.EtatDemande); Assert.IsNotNull(demandeFormationAcceptee.DateDerniereReponse); Assert.IsTrue(participationFormationCree); Assert.Less(nbParticipant, demandeFormationAcceptee.Formation.NbParticipations); } [Test] public void UpdateDemandeFormationAsync_MettreAJourUneDemandeEnAttente_LeveUneDemandeFormationInvalidException() { // Arrange long idDemandeFormation = 1; int nbParticipant = 0; OrigineDemandeFormationDTO origineDemandeFormationApside = new OrigineDemandeFormationDTO { Id = 5, Libelle = "Demande Apside" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("842650db-a548-4472-a3af-4c5fff3c1ab8"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Lemoine", Prenom = "Coty", MailApside = "coty.lemoine@apside-groupe.com", DateArrivee = new DateTime(2017, 2, 10, 20, 37, 58, 741), DateDepart = null, }; FormationDetailsDTO formation = new FormationDetailsDTO { Id = 1, Intitule = "Formation Mainframe Complète", DateDebut = new DateTime(2020, 1, 25, 10, 0, 0), DateFin = new DateTime(2020, 1, 27), Organisme = "Organisme1", Origine = new OrigineFormationDTO { Id = 2, Libelle = "Exigence client" }, Statut = new StatutFormationDTO { Id = 1, Libelle = "Planifiée" }, EstCertifiee = false, NbParticipations = nbParticipant }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Id = idDemandeFormation, Libelle = "Formation Cobol", Description = "Demande de formation Cobol avec Mainframe", DemandeRH = false, DateDemande = new DateTime(2020, 1, 22, 9, 0, 0), EtatDemande = EtatDemande.EnAttente, Origine = origineDemandeFormationApside, Collaborateur = collaborateur, Formation = formation, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.UpdateDemandeFormationAsync(idDemandeFormation, demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationInvalidException), throwException); } [Test] public void UpdateDemandeFormationAsync_AccepteUneDemandeAvecUnIdIncorrecte_LeveUneDemandeFormationIncompatibleIdException() { // Arrange long idDemandeFormation = 1; long idDemandeFormationIncorrecte = 0; int nbParticipant = 1; OrigineDemandeFormationDTO origineDemandeFormationClient = new OrigineDemandeFormationDTO { Id = 3, Libelle = "Exigence Client" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("a0f40e2a-cc03-4032-a627-5389e1281c64"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Vasseur", Prenom = "Florencio", MailApside = "florencio.vasseur@apside-groupe.com", DateArrivee = new DateTime(2016, 1, 15, 10, 22, 30, 778), DateDepart = null, }; FormationDetailsDTO formation = new FormationDetailsDTO { Id = 3, Intitule = "Apprendre C# et le développement de logiciels avec WPF", DateDebut = new DateTime(2020, 5, 25, 14, 0, 0), DateFin = new DateTime(2020, 5, 27), Organisme = "Organisme2", Origine = new OrigineFormationDTO { Id = 3, Libelle = "Exigence Apside" }, Statut = new StatutFormationDTO { Id = 1, Libelle = "Planifiée" }, EstCertifiee = true, NbParticipations = nbParticipant }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Id = idDemandeFormationIncorrecte, Libelle = "Formation C#", Description = "Demande de formation C# avec WPF", DemandeRH = false, DateDemande = new DateTime(2020, 3, 22, 9, 0, 0), EtatDemande = EtatDemande.Validee, Origine = origineDemandeFormationClient, Collaborateur = collaborateur, Formation = formation, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.UpdateDemandeFormationAsync(idDemandeFormation, demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationIncompatibleIdException), throwException); } [Test] public void UpdateDemandeFormationAsync_AccepteUneDemandeAvecUnIdDemandeFormationNull_LeveUneDemandeFormationIncompatibleIdException() { // Arrange long idDemandeFormation = 1; long? idDemandeFormationIncorrecte = null; int nbParticipant = 1; OrigineDemandeFormationDTO origineDemandeFormationClient = new OrigineDemandeFormationDTO { Id = 3, Libelle = "Exigence Client" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("a0f40e2a-cc03-4032-a627-5389e1281c64"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Vasseur", Prenom = "Florencio", MailApside = "florencio.vasseur@apside-groupe.com", DateArrivee = new DateTime(2016, 1, 15, 10, 22, 30, 778), DateDepart = null, }; FormationDetailsDTO formation = new FormationDetailsDTO { Id = 3, Intitule = "Apprendre C# et le développement de logiciels avec WPF", DateDebut = new DateTime(2020, 5, 25, 14, 0, 0), DateFin = new DateTime(2020, 5, 27), Organisme = "Organisme2", Origine = new OrigineFormationDTO { Id = 3, Libelle = "Exigence Apside" }, Statut = new StatutFormationDTO { Id = 1, Libelle = "Planifiée" }, EstCertifiee = true, NbParticipations = nbParticipant }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Id = idDemandeFormationIncorrecte, Libelle = "Formation C#", Description = "Demande de formation C# avec WPF", DemandeRH = false, DateDemande = new DateTime(2020, 3, 22, 9, 0, 0), EtatDemande = EtatDemande.Validee, Origine = origineDemandeFormationClient, Collaborateur = collaborateur, Formation = formation, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.UpdateDemandeFormationAsync(idDemandeFormation, demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationIncompatibleIdException), throwException); } [Test] public void UpdateDemandeFormationAsync_AccepteUneDemandeInexistante_LeveUneDemandeFormationNotFoundException() { // Arrange long idDemandeFormation = 0; int nbParticipant = 1; OrigineDemandeFormationDTO origineDemandeFormationClient = new OrigineDemandeFormationDTO { Id = 3, Libelle = "Exigence Client" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("a0f40e2a-cc03-4032-a627-5389e1281c64"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Vasseur", Prenom = "Florencio", MailApside = "florencio.vasseur@apside-groupe.com", DateArrivee = new DateTime(2016, 1, 15, 10, 22, 30, 778), DateDepart = null, }; FormationDetailsDTO formation = new FormationDetailsDTO { Id = 3, Intitule = "Apprendre C# et le développement de logiciels avec WPF", DateDebut = new DateTime(2020, 5, 25, 14, 0, 0), DateFin = new DateTime(2020, 5, 27), Organisme = "Organisme2", Origine = new OrigineFormationDTO { Id = 3, Libelle = "Exigence Apside" }, Statut = new StatutFormationDTO { Id = 1, Libelle = "Planifiée" }, EstCertifiee = true, NbParticipations = nbParticipant }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Id = idDemandeFormation, Libelle = "Formation C#", Description = "Demande de formation C# avec WPF", DemandeRH = false, DateDemande = new DateTime(2020, 3, 22, 9, 0, 0), EtatDemande = EtatDemande.Validee, Origine = origineDemandeFormationClient, Collaborateur = collaborateur, Formation = formation, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.UpdateDemandeFormationAsync(idDemandeFormation, demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationNotFoundException), throwException); } [Test] public void UpdateDemandeFormationAsync_AccepteUneDemandeAvecUneFormationNull_LeveUneDemandeFormationInvalidException() { // Arrange long idDemandeFormation = 3; OrigineDemandeFormationDTO origineDemandeFormationClient = new OrigineDemandeFormationDTO { Id = 3, Libelle = "Exigence Client" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("a0f40e2a-cc03-4032-a627-5389e1281c64"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Vasseur", Prenom = "Florencio", MailApside = "florencio.vasseur@apside-groupe.com", DateArrivee = new DateTime(2016, 1, 15, 10, 22, 30, 778), DateDepart = null, }; FormationDetailsDTO formation = null; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Id = idDemandeFormation, Libelle = "Formation C#", Description = "Demande de formation C# avec WPF", DemandeRH = false, DateDemande = new DateTime(2020, 3, 22, 9, 0, 0), EtatDemande = EtatDemande.Validee, Origine = origineDemandeFormationClient, Collaborateur = collaborateur, Formation = formation, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.UpdateDemandeFormationAsync(idDemandeFormation, demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationInvalidException), throwException); } [Test] public void UpdateDemandeFormationAsync_AccepteUneDemandeAvecUnIdFormationNull_LeveUneDemandeFormationInvalidException() { // Arrange long idDemandeFormation = 3; long? idFormation = null; int nbParticipant = 1; OrigineDemandeFormationDTO origineDemandeFormationClient = new OrigineDemandeFormationDTO { Id = 3, Libelle = "Exigence Client" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("a0f40e2a-cc03-4032-a627-5389e1281c64"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Vasseur", Prenom = "Florencio", MailApside = "florencio.vasseur@apside-groupe.com", DateArrivee = new DateTime(2016, 1, 15, 10, 22, 30, 778), DateDepart = null, }; FormationDetailsDTO formation = new FormationDetailsDTO { Id = idFormation, Intitule = "Apprendre C# et le développement de logiciels avec WPF", DateDebut = new DateTime(2020, 5, 25, 14, 0, 0), DateFin = new DateTime(2020, 5, 27), Organisme = "Organisme2", Origine = new OrigineFormationDTO { Id = 3, Libelle = "Exigence Apside" }, Statut = new StatutFormationDTO { Id = 1, Libelle = "Planifiée" }, EstCertifiee = true, NbParticipations = nbParticipant }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Id = idDemandeFormation, Libelle = "Formation C#", Description = "Demande de formation C# avec WPF", DemandeRH = false, DateDemande = new DateTime(2020, 3, 22, 9, 0, 0), EtatDemande = EtatDemande.Validee, Origine = origineDemandeFormationClient, Collaborateur = collaborateur, Formation = formation, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.UpdateDemandeFormationAsync(idDemandeFormation, demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationInvalidException), throwException); } [Test] public async Task UpdateDemandeFormationAsync_RefuseUneDemandeDeFormationEnAttente_DemandeRefuseeAvecSucces() { // Arrange long idDemandeFormation = 1; OrigineDemandeFormationDTO origineDemandeFormationApside = new OrigineDemandeFormationDTO { Id = 5, Libelle = "Demande Apside" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("842650db-a548-4472-a3af-4c5fff3c1ab8"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Lemoine", Prenom = "Coty", MailApside = "coty.lemoine@apside-groupe.com", DateArrivee = new DateTime(2017, 2, 10, 20, 37, 58, 741), DateDepart = null, }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Id = idDemandeFormation, Libelle = "Formation Cobol", Description = "Demande de formation Cobol avec Mainframe", DemandeRH = false, DateDemande = new DateTime(2020, 1, 22, 9, 0, 0), EtatDemande = EtatDemande.Rejetee, CommentaireRefus= "Formation indisponible pour le moment", Origine = origineDemandeFormationApside, Collaborateur = collaborateur }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act DemandeFormationDTO demandeFormationAcceptee = await demandeFormationService.UpdateDemandeFormationAsync(idDemandeFormation, demandeFormation); bool participationFormationExistante = await epContext.ParticipationFormation.Include(p => p.DemandeFormation).AnyAsync(p => p.DemandeFormation.IdDemandeFormation == idDemandeFormation); // Assert Assert.IsNotNull(demandeFormationAcceptee); Assert.AreEqual(idDemandeFormation, demandeFormationAcceptee.Id); Assert.AreEqual(demandeFormation.Libelle, demandeFormationAcceptee.Libelle); Assert.AreEqual(demandeFormation.Description, demandeFormationAcceptee.Description); Assert.AreEqual(demandeFormation.EtatDemande, demandeFormationAcceptee.EtatDemande); Assert.IsNotNull(demandeFormationAcceptee.DateDerniereReponse); Assert.IsFalse(participationFormationExistante); } [Test] public async Task UpdateDemandeFormationAsync_RefuseUneDemandeDeFormationAccepteeEtSupprimeLaParticipation_DemandeRefuseeAvecSucces() { // Arrange long idDemandeFormation = 5; int nbParticipant = 1; OrigineDemandeFormationDTO origineDemandeFormationEP = new OrigineDemandeFormationDTO { Id = 2, Libelle = "Demande EP" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("842650db-a548-4472-a3af-4c5fff3c1ab8"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Lemoine", Prenom = "Coty", MailApside = "coty.lemoine@apside-groupe.com", DateArrivee = new DateTime(2017, 2, 10, 20, 37, 58, 741), DateDepart = null, }; FormationDetailsDTO formation = new FormationDetailsDTO { Id = 3, Intitule = "Apprendre C# et le développement de logiciels avec WPF", DateDebut = new DateTime(2020, 5, 25, 14, 0, 0), DateFin = new DateTime(2020, 5, 27), Organisme = "Organisme2", Origine = new OrigineFormationDTO { Id = 3, Libelle = "Exigence Apside" }, Statut = new StatutFormationDTO { Id = 1, Libelle = "Planifiée" }, EstCertifiee = true, NbParticipations = nbParticipant }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Id = idDemandeFormation, Libelle = "Formation C#", Description = "Demande de formation C# avec WPF", DemandeRH = false, DateDemande = new DateTime(2020, 5, 22, 9, 0, 0), EtatDemande = EtatDemande.Rejetee, CommentaireRefus = "Formation indisponible pour le moment", Origine = origineDemandeFormationEP, Collaborateur = collaborateur, Formation = formation, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act DemandeFormationDTO demandeFormationAcceptee = await demandeFormationService.UpdateDemandeFormationAsync(idDemandeFormation, demandeFormation); bool participationFormationExistante = await epContext.ParticipationFormation.Include(p => p.DemandeFormation).AnyAsync(p => p.DemandeFormation.IdDemandeFormation == idDemandeFormation); // Assert Assert.IsNotNull(demandeFormationAcceptee); Assert.AreEqual(idDemandeFormation, demandeFormationAcceptee.Id); Assert.AreEqual(demandeFormation.Libelle, demandeFormationAcceptee.Libelle); Assert.AreEqual(demandeFormation.Description, demandeFormationAcceptee.Description); Assert.AreEqual(demandeFormation.EtatDemande, demandeFormationAcceptee.EtatDemande); Assert.IsNotNull(demandeFormationAcceptee.DateDerniereReponse); Assert.IsFalse(participationFormationExistante); Assert.Greater(nbParticipant, demandeFormationAcceptee.Formation.NbParticipations); } [TestCase(null)] [TestCase("")] [TestCase(" ")] public void UpdateDemandeFormationAsync_RefuseUneDemandeSansCommentaireRefus_LeveUneDemandeFormationInvalidException(string commentaireRefus) { // Arrange long idDemandeFormation = 3; OrigineDemandeFormationDTO origineDemandeFormationClient = new OrigineDemandeFormationDTO { Id = 3, Libelle = "Exigence Client" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("a0f40e2a-cc03-4032-a627-5389e1281c64"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Vasseur", Prenom = "Florencio", MailApside = "florencio.vasseur@apside-groupe.com", DateArrivee = new DateTime(2016, 1, 15, 10, 22, 30, 778), DateDepart = null, }; FormationDetailsDTO formation = null; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Id = idDemandeFormation, Libelle = "Formation C#", Description = "Demande de formation C# avec WPF", DemandeRH = false, DateDemande = new DateTime(2020, 3, 22, 9, 0, 0), EtatDemande = EtatDemande.Rejetee, CommentaireRefus = commentaireRefus, Origine = origineDemandeFormationClient, Collaborateur = collaborateur, Formation = formation, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.UpdateDemandeFormationAsync(idDemandeFormation, demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationInvalidException), throwException); } [Test] public void UpdateDemandeFormationAsync_RefuseUneDemandeInexistante_LeveUneDemandeFormationNotFoundException() { // Arrange long idDemandeFormation = 0; int nbParticipant = 1; OrigineDemandeFormationDTO origineDemandeFormationClient = new OrigineDemandeFormationDTO { Id = 3, Libelle = "Exigence Client" }; List Bus = new List() { new BusinessUnitDTO { Id = 1, Nom = "Tours" }, new BusinessUnitDTO { Id = 2, Nom = "Orléans" }, }; CollaborateurDTO collaborateur = new CollaborateurDTO { Id = Guid.Parse("a0f40e2a-cc03-4032-a627-5389e1281c64"), BusinessUnit = new BusinessUnitDTO { Id = 2, Nom = "Orléans", Agence = new AgenceDTO { Id = 1, Nom = "TOP", Bu = Bus } }, Nom = "Vasseur", Prenom = "Florencio", MailApside = "florencio.vasseur@apside-groupe.com", DateArrivee = new DateTime(2016, 1, 15, 10, 22, 30, 778), DateDepart = null, }; FormationDetailsDTO formation = new FormationDetailsDTO { Id = 3, Intitule = "Apprendre C# et le développement de logiciels avec WPF", DateDebut = new DateTime(2020, 5, 25, 14, 0, 0), DateFin = new DateTime(2020, 5, 27), Organisme = "Organisme2", Origine = new OrigineFormationDTO { Id = 3, Libelle = "Exigence Apside" }, Statut = new StatutFormationDTO { Id = 1, Libelle = "Planifiée" }, EstCertifiee = true, NbParticipations = nbParticipant }; DemandeFormationDTO demandeFormation = new DemandeFormationDTO { Id = idDemandeFormation, Libelle = "Formation C#", Description = "Demande de formation C# avec WPF", DemandeRH = false, DateDemande = new DateTime(2020, 3, 22, 9, 0, 0), EtatDemande = EtatDemande.Rejetee, CommentaireRefus = "Formation indisponible pour le moment", Origine = origineDemandeFormationClient, Collaborateur = collaborateur, Formation = formation, }; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.UpdateDemandeFormationAsync(idDemandeFormation, demandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationNotFoundException), throwException); } #endregion #region Tests DeleteDemandeFormationAsync [Test] public async Task DeleteDemandeFormationAsync_SupprimeUneDemandeDeFormation_DemandeDeFormationSupprimeeAvecSucces() { // Arrange long idDemandeFormation = 5; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act bool demandeFormationSupprimee = await demandeFormationService.DeleteDemandeFormationAsync(idDemandeFormation); bool demandeRetireeDansEp = await epContext.Ep.Include(e => e.DemandesFormation).AnyAsync(e => e.DemandesFormation.Any(d => d.IdDemandeFormation == idDemandeFormation)); bool demandeRetireeDansParticipation = await epContext.ParticipationFormation.Include(p => p.DemandeFormation).AnyAsync(p => p.DemandeFormation.IdDemandeFormation == idDemandeFormation); bool demandeFormationExiste = await epContext.DemandeFormation.AnyAsync(d => d.IdDemandeFormation == idDemandeFormation); // Assert Assert.IsTrue(demandeFormationSupprimee); Assert.IsFalse(demandeRetireeDansEp); Assert.IsFalse(demandeRetireeDansParticipation); Assert.IsFalse(demandeFormationExiste); } [Test] public void DeleteDemandeFormationAsync_SupprimeUneDemandeDeFormationInexistante_LeveUneDemandeFormationNotFoundException() { // Arrange long idDemandeFormation = 0; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.DeleteDemandeFormationAsync(idDemandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationNotFoundException), throwException); } [Test] public void DeleteDemandeFormationAsync_SupprimeUneDemandeDeFormationConcernantUnEpSigne_LeveUneDemandeFormationInvalidException() { // Arrange long idDemandeFormation = 2; DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act AsyncTestDelegate throwException = () => demandeFormationService.DeleteDemandeFormationAsync(idDemandeFormation); // Assert Assert.ThrowsAsync(typeof(DemandeFormationInvalidException), throwException); } #endregion } }