diff --git a/EPAServeur.Tests/Services/EpDetailsServiceTests.cs b/EPAServeur.Tests/Services/EpDetailsServiceTests.cs index da7e86b..086498f 100644 --- a/EPAServeur.Tests/Services/EpDetailsServiceTests.cs +++ b/EPAServeur.Tests/Services/EpDetailsServiceTests.cs @@ -1,4 +1,5 @@ using EPAServeur.Context; +using EPAServeur.Exceptions; using EPAServeur.IServices; using EPAServeur.Models.EP; using EPAServeur.Services; @@ -72,9 +73,38 @@ namespace EPAServeur.Tests.Services #endregion #region Récupérer EP exceptions + [TestCase(-999)] + [TestCase(20)] + [TestCase(100)] + [TestCase(0)] + public void GetEPById_NotFoundException(long idEp) + { + IEpDetailsService epDetailsService = new EpDetailsService(context, transformDTO, collaborateurService); + AsyncTestDelegate exception = () => epDetailsService.GetEp(idEp); + Assert.ThrowsAsync(typeof(EpNotFoundException), exception); + } #endregion #region Récupérer EP avec Engagements + [TestCase(6, 3)] + [TestCase(8, 0)] + [TestCase(10, 1)] + public async Task GetEPById_GetEngagement(long idEP, int count) + { + IEpDetailsService epDetailsService = new EpDetailsService(context, transformDTO, collaborateurService); + + EpDTO epDTO = await epDetailsService.GetEp(idEP); + if(count == 0) + { + Assert.IsNull(epDTO.Engagements); + } + else + { + Assert.IsNotNull(epDTO.Engagements); + Assert.AreEqual(count, epDTO.Engagements.Count); + } + + } #endregion #region Récupérer EP avec participant EP diff --git a/EPAServeur/Context/DataSeeder.cs b/EPAServeur/Context/DataSeeder.cs index a8bd56d..8b7902d 100644 --- a/EPAServeur/Context/DataSeeder.cs +++ b/EPAServeur/Context/DataSeeder.cs @@ -84,6 +84,7 @@ namespace EPAServeur.Context /// public static void AddEp(EpContext epContext) { + Engagement eg1, eg2, eg3, eg4; //Ep en cours Ep epEnCours1, epEnCours2, epEnCours3, epEnCours4, epEnCours5, epEnCours6, epEnCours7, epEnCours8, epEnCours9; //Tours @@ -171,6 +172,37 @@ namespace EPAServeur.Context IdCollaborateur = new Guid("de98a866-736f-4295-a669-92a8694e2ee3"), Obligatoire = false, }; + eg1 = new Engagement() + { + Action = "action", + DateLimite = DateTime.Now, + Dispositif = "dispositif", + EtatEngagement = EtatEngagement.EnAttente, + Modalite = "modalite", + Ep = epEnCours6 + }; + eg2 = new Engagement() + { + Action = "action", + DateLimite = DateTime.Now, + Dispositif = "dispositif", + EtatEngagement = EtatEngagement.EnAttente, + Modalite = "modalite", + Ep = epEnCours6 + }; + eg3 = new Engagement() + { + Action = "action", + DateLimite = DateTime.Now, + Dispositif = "dispositif", + EtatEngagement = EtatEngagement.EnAttente, + Modalite = "modalite", + Ep = epEnCours6 + }; + epEnCours6.Engagements = new List(); + epEnCours6.Engagements.Add(eg1); + epEnCours6.Engagements.Add(eg2); + epEnCours6.Engagements.Add(eg3); epContext.Ep.Add(epEnCours6); epEnCours7 = new Ep() @@ -219,7 +251,7 @@ namespace EPAServeur.Context //Ep signés - Ep epSigne1, epSigne2, epSigne3, epSigne4, epSigne5, epSigne6, epSigne7, epSigne8, epSigne9;//, epSigne10, epSigne11, epSigne12, epSigne13, epSigne14; + Ep epSigne1, epSigne2, epSigne3, epSigne4, epSigne5, epSigne6, epSigne7, epSigne8, epSigne9; epSigne1 = new Ep() { DateDisponibilite = new DateTime(2017, 1, 15), @@ -232,6 +264,17 @@ namespace EPAServeur.Context IdCollaborateur = new Guid("301ba7f3-095e-4912-8998-a7c942dc5f23"), Obligatoire = true, }; + eg4 = new Engagement() + { + Action = "action", + DateLimite = DateTime.Now, + Dispositif = "dispositif", + EtatEngagement = EtatEngagement.EnAttente, + Modalite = "modalite", + Ep = epSigne1 + }; + epSigne1.Engagements = new List(); + epSigne1.Engagements.Add(eg4); epContext.Ep.Add(epSigne1); epSigne2 = new Ep() @@ -303,6 +346,7 @@ namespace EPAServeur.Context IdCollaborateur = new Guid("a0f40e2a-cc03-4032-a627-5389e1281c64"), Obligatoire = false, }; + epContext.Ep.Add(epSigne6); epSigne7 = new Ep() diff --git a/EPAServeur/IServices/ITransformDTO.cs b/EPAServeur/IServices/ITransformDTO.cs index 5a6b7c6..af5770c 100644 --- a/EPAServeur/IServices/ITransformDTO.cs +++ b/EPAServeur/IServices/ITransformDTO.cs @@ -26,7 +26,7 @@ namespace EPAServeur.IServices #region Engagement // Engagement - EngagementDTO GetEngagementDTO(Engagement engagement, IEnumerable collaborateurDTOs); + EngagementDTO GetEngagementDTO(Engagement engagement, IEnumerable collaborateurDTOs, bool recupEpInformation = true); Engagement SetReponseEngagement(Engagement engagement, EngagementDTO engagementDTO); #endregion @@ -72,6 +72,7 @@ namespace EPAServeur.IServices // Récupération DetailsEP EpDTO EpToEpDetails(Ep ep, IEnumerable collaborateurDTOs); + List GetEngagementDTOs(Ep ep); DemandeEPIDTO GetDemandeEPIDTO(DemandeEPI demande, IEnumerable collaborateurDTOs); AugmentationSalaireDTO GetAugmentationSalaireDTO(AugmentationSalaire augmentation); DemandeDelegationDTO GetDemandeDelegationDTO(DemandeDelegation demandeDelegation, IEnumerable collaborateurDTOs); diff --git a/EPAServeur/Services/EpDetailsService.cs b/EPAServeur/Services/EpDetailsService.cs index 91d7446..914636d 100644 --- a/EPAServeur/Services/EpDetailsService.cs +++ b/EPAServeur/Services/EpDetailsService.cs @@ -4,6 +4,7 @@ using EPAServeur.IServices; using EPAServeur.Models.EP; using IO.Swagger.ApiCollaborateur; using IO.Swagger.DTO; +using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; @@ -26,15 +27,19 @@ namespace EPAServeur.Services public async Task GetEp(long id) { - Ep ep = await context.Ep.FindAsync(id); + Ep ep = await context.Ep.Include(ep => ep.Engagements).FirstOrDefaultAsync(ep => ep.IdEP.Equals(id)); if (ep == null) throw new EpNotFoundException(); + + //ajouter tous les guids liés à l'EP et aux attributs de l'EP List guids = new List(); guids.Add(ep.IdCollaborateur); if (ep.IdReferent.HasValue) guids.Add(ep.IdCollaborateur); - IEnumerable collaborateurDTOs = await collaborateurService.GetCollaborateurDTOsAsync(guids) ; + + + IEnumerable collaborateurDTOs = await collaborateurService.GetCollaborateurDTOsAsync(guids); EpDTO epDTO = transformDTO.EpToEpDetails(ep, collaborateurDTOs); diff --git a/EPAServeur/Services/TransformDTO.cs b/EPAServeur/Services/TransformDTO.cs index 8f6d55c..2e86254 100644 --- a/EPAServeur/Services/TransformDTO.cs +++ b/EPAServeur/Services/TransformDTO.cs @@ -60,7 +60,8 @@ namespace EPAServeur.Services Obligatoire = ep.Obligatoire, Statut = ep.Statut, Type = ep.TypeEP, - Cv = ep.CV + Cv = ep.CV, + Engagements = GetEngagementDTOs(ep) }; } @@ -274,9 +275,9 @@ namespace EPAServeur.Services /// /// /// - public EngagementDTO GetEngagementDTO(Engagement engagement, IEnumerable collaborateurDTOs) + public EngagementDTO GetEngagementDTO(Engagement engagement, IEnumerable collaborateurDTOs, bool recupEpInformation = true) { - if (engagement == null || collaborateurDTOs == null || !collaborateurDTOs.Any()) + if ( engagement == null || recupEpInformation && ( collaborateurDTOs == null || !collaborateurDTOs.Any())) return null; EngagementDTO engagementDTO = new EngagementDTO() @@ -288,12 +289,19 @@ namespace EPAServeur.Services Modalite = engagement.Modalite, RaisonNonRealisable = engagement.RaisonNonRealisable, EtatEngagement = engagement.EtatEngagement, - Ep = GetEpInformationDTO(engagement.Ep, collaborateurDTOs) }; - + if (recupEpInformation) + engagementDTO.Ep = GetEpInformationDTO(engagement.Ep, collaborateurDTOs); return engagementDTO; } + public List GetEngagementDTOs(Ep ep) + { + if (ep.Engagements == null || ep.Engagements.Count == 0) + return null; + return ep.Engagements.Select(engagment => GetEngagementDTO(engagment, null, false)).ToList(); + } + public TypeEntretienDTO GetEntretienDTO(ChoixTypeEntretien choixTypeEntretien) { throw new NotImplementedException();