From 6633d5db526397c038e427b1147be807e625f6ea Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Tue, 2 Mar 2021 09:21:56 +0100 Subject: [PATCH 01/19] Ajout des exceptions pour la partie demande de formation --- ...DemandeFormationIncompatibleIdException.cs | 40 +++++++++++++++++++ .../DemandeFormationInvalidException.cs | 40 +++++++++++++++++++ .../DemandeFormationNotFoundException.cs | 40 +++++++++++++++++++ 3 files changed, 120 insertions(+) create mode 100644 EPAServeur/Exceptions/DemandeFormationIncompatibleIdException.cs create mode 100644 EPAServeur/Exceptions/DemandeFormationInvalidException.cs create mode 100644 EPAServeur/Exceptions/DemandeFormationNotFoundException.cs diff --git a/EPAServeur/Exceptions/DemandeFormationIncompatibleIdException.cs b/EPAServeur/Exceptions/DemandeFormationIncompatibleIdException.cs new file mode 100644 index 0000000..77be02a --- /dev/null +++ b/EPAServeur/Exceptions/DemandeFormationIncompatibleIdException.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace EPAServeur.Exceptions +{ + /// + /// Exception qui est levée lorsque l'id de la demande de formation avec les données à mettre à jour et l'id de la demande de formation dans la base de données sont différents + /// + public class DemandeFormationIncompatibleIdException : Exception + { + /// + /// Initialise une nouvelle instance de la classe class. + /// + public DemandeFormationIncompatibleIdException() + { + + } + + /// + /// Initialise une nouvelle instance de la classe class. + /// + /// + public DemandeFormationIncompatibleIdException(string message) : base(message) + { + + } + + /// + /// Initialise une nouvelle instance de la classe class. + /// + /// + /// + public DemandeFormationIncompatibleIdException(string message, Exception inner) : base(message, inner) + { + + } + } +} diff --git a/EPAServeur/Exceptions/DemandeFormationInvalidException.cs b/EPAServeur/Exceptions/DemandeFormationInvalidException.cs new file mode 100644 index 0000000..a964eda --- /dev/null +++ b/EPAServeur/Exceptions/DemandeFormationInvalidException.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace EPAServeur.Exceptions +{ + /// + /// Exception qui est levée lorsqu'une demande de formation est invalide + /// + public class DemandeFormationInvalidException : Exception + { + /// + /// Initialise une nouvelle instance de la classe class. + /// + public DemandeFormationInvalidException() + { + + } + + /// + /// Initialise une nouvelle instance de la classe class. + /// + /// + public DemandeFormationInvalidException(string message) : base(message) + { + + } + + /// + /// Initialise une nouvelle instance de la classe class. + /// + /// + /// + public DemandeFormationInvalidException(string message, Exception inner) : base(message, inner) + { + + } + } +} diff --git a/EPAServeur/Exceptions/DemandeFormationNotFoundException.cs b/EPAServeur/Exceptions/DemandeFormationNotFoundException.cs new file mode 100644 index 0000000..1528bcd --- /dev/null +++ b/EPAServeur/Exceptions/DemandeFormationNotFoundException.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace EPAServeur.Exceptions +{ + /// + /// Exception qui est levée lorsqu'une demande de formation n'a pas été trouvée + /// + public class DemandeFormationNotFoundException : Exception + { + /// + /// Initialise une nouvelle instance de la classe class. + /// + public DemandeFormationNotFoundException() + { + + } + + /// + /// Initialise une nouvelle instance de la classe class. + /// + /// + public DemandeFormationNotFoundException(string message) : base(message) + { + + } + + /// + /// Initialise une nouvelle instance de la classe class. + /// + /// + /// + public DemandeFormationNotFoundException(string message, Exception inner) : base(message, inner) + { + + } + } +} From 04171808f52fd56d968391cd05a750b7897f2404 Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Tue, 2 Mar 2021 09:24:18 +0100 Subject: [PATCH 02/19] =?UTF-8?q?Cr=C3=A9ation=20du=20service=20DemandeFor?= =?UTF-8?q?mationService=20(non=20termin=C3=A9e)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IServices/IDemandeFormationService.cs | 21 + .../Services/DemandeFormationService.cs | 694 ++++++++++++++++++ 2 files changed, 715 insertions(+) create mode 100644 EPAServeur/IServices/IDemandeFormationService.cs create mode 100644 EPAServeur/Services/DemandeFormationService.cs diff --git a/EPAServeur/IServices/IDemandeFormationService.cs b/EPAServeur/IServices/IDemandeFormationService.cs new file mode 100644 index 0000000..b88042b --- /dev/null +++ b/EPAServeur/IServices/IDemandeFormationService.cs @@ -0,0 +1,21 @@ +using EPAServeur.Context; +using IO.Swagger.DTO; +using IO.Swagger.Enum; +using IO.Swagger.ModelCollaborateur; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace EPAServeur.IServices +{ + public interface IDemandeFormationService + { + Task> GetOriginesDemandeFormationAsync(); + Task> GetDemandesFormationAsync(List etatsDemande, List idBUs, bool? asc, int? numPage, int? parPage, string texte, string tri, DateTime? dateDebut, DateTime? dateFin); + Task> GetDemandesFormationCountAsync(List etatsDemande, List idBUs, string texte, DateTime? dateDebut, DateTime? dateFin); + Task AddDemandeFormationAsync(DemandeFormationDTO demandeFormationDTO); + Task UpdateDemandeFormationAsync(long idDemandeFormation, DemandeFormationDTO demandeFormationDTO); + Task DeleteDemandeFormationAsync(long idDemandeFormation); + } +} diff --git a/EPAServeur/Services/DemandeFormationService.cs b/EPAServeur/Services/DemandeFormationService.cs new file mode 100644 index 0000000..36051c6 --- /dev/null +++ b/EPAServeur/Services/DemandeFormationService.cs @@ -0,0 +1,694 @@ +using EPAServeur.Context; +using EPAServeur.Exceptions; +using EPAServeur.IServices; +using EPAServeur.Models.EP; +using EPAServeur.Models.Formation; +using EPAServeur.Models.SaisieChamp; +using IO.Swagger.DTO; +using IO.Swagger.Enum; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace EPAServeur.Services +{ + public class DemandeFormationService : IDemandeFormationService + { + #region Variables + + /// + /// Accès et gestion de la base de données + /// + private readonly EpContext epContext; + + /// + /// Accès et service collaborateur + /// + private readonly ICollaborateurService collaborateurService; + + /// + /// Nombre d'éléments min à afficher par page + /// + private readonly int minParPage = 5; + + /// + /// Nom d'éléments max à affichar par page + /// + private readonly int maxParPage = 100; + + /// + /// Nombre d'éléments à afficher par défaut par page + /// + private readonly int defaultParPage = 15; + + /// + /// Numéro de page min à afficher par défaut + /// + private readonly int defaultNumPage = 1; + + /// + /// Ordonnancement par défaut + /// + private readonly bool defaultAsc = true; + + + #endregion + + #region Contructeurs + + /// + /// Constructeur de la classe FormationService + /// + /// + public DemandeFormationService(EpContext _epContext, ICollaborateurService _collaborateurService) + { + epContext = _epContext; + collaborateurService = _collaborateurService; + } + + #endregion + + #region Méthodes Service + + /// + /// Récupérer la liste des origines des demandes de formation. + /// + /// + public async Task> GetOriginesDemandeFormationAsync() + { + IEnumerable origineDemandes; + IEnumerable origineDemandeDTOs; + + origineDemandes = await epContext.OrigineDemandeFormation.ToListAsync(); + + origineDemandeDTOs = origineDemandes.Select(origineFormation => GetOrigineDemandeFormationDTO(origineFormation)); + + return origineDemandeDTOs; + } + + /// + /// Récupérer la liste des demandes de formation. + /// + /// Liste des états des demandes à afficher + /// liste des ids des BU auxquelles les données sont rattachées + /// Indique si les données sont récupérées dans l'ordre croissant ou non + /// Numéro de la page du tableau à afficher + /// Nombre d’élément maximum à afficher dans le tableau + /// Texte permettant de filtrer les données + /// Colonne du tableau sur lequel le tri devra être effectué + /// Date à partir de laquelle les données son récupérées + /// Date jusqu'à laquelle les données sont récupérées + /// + public async Task> GetDemandesFormationAsync(List etatsDemande, List idBUs, bool? asc, int? numPage, int? parPage, string texte, string tri, DateTime? dateDebut, DateTime? dateFin) + { + IQueryable query; + IEnumerable demandeFormations; + IEnumerable demandeFormationDTOs; + IEnumerable collaborateurDTOs; + + query = epContext.DemandeFormation + .Include(demandeFormation => demandeFormation.Ep) + .Include(demandeFormation => demandeFormation.ParticipationFormation) + .ThenInclude(participationFormation => participationFormation.Formation); + + + query = EtatsDemandeFilter(query, etatsDemande); + + query = IdBUsFilter(query, idBUs); + + query = DateFilter(query, dateDebut, dateFin); + + query = OrderByColumn(query, asc, tri); + + query = SkipAndTake(query, parPage, numPage); + + demandeFormations = await query.ToListAsync(); + + collaborateurDTOs = await GetCollaborateurDTOs(demandeFormations); + + demandeFormationDTOs = demandeFormations.Select(demandeFormation => GetDemandeFormationDTO(demandeFormation, collaborateurDTOs)); + + return demandeFormationDTOs; + + } + + /// + /// Récupérer le nombre total de demandes de formation. + /// + /// Liste des états des demandes à afficher + /// liste des ids des BU auxquelles les données sont rattachées + /// Texte permettant de filtrer les données + /// Date à partir de laquelle les données son récupérées + /// Date jusqu'à laquelle les données sont récupérées + /// + public async Task> GetDemandesFormationCountAsync(List etatsDemande, List idBUs, string texte, DateTime? dateDebut, DateTime? dateFin) + { + throw new NotImplementedException(); + } + + /// + /// Créer demande de formation pour un collaborateur. + /// + /// + /// + public async Task AddDemandeFormationAsync(DemandeFormationDTO demandeFormationDTO) + { + throw new NotImplementedException(); + } + + /// + /// Répondre à une demande de formation. + /// + /// + /// + /// + public async Task UpdateDemandeFormationAsync(long idDemandeFormation, DemandeFormationDTO demandeFormationDTO) + { + throw new NotImplementedException(); + } + + /// + /// Supprimer une demande de formation. + /// + /// + /// + public async Task DeleteDemandeFormationAsync(long idDemandeFormation) + { + throw new NotImplementedException(); + } + + + #endregion + + #region Méthodes Privée + /// + /// Vérifier si un objet DemandeFormationDTO est valide pour une mise à jour + /// + /// + /// Un objet DemandeFormationDTO est valide si l'objet n'est pas null, si le libellé, la descritpion, + /// la date de demande de début et la valeur permettant de dire si la demande a été créé par une RH ou non ne sont pas null. + /// + /// + /// true si l'objet est valide, false sinon + private void IsDemandeFormationValide(DemandeFormationDTO demande) + { + // Vérifier que la demande de formation n'est pas null + if (demande == null) + throw new DemandeFormationInvalidException("Aucune évaluation n'a été reçue."); + + // Vérifier que la demande de formation a bien un libellé + if (string.IsNullOrWhiteSpace(demande.Libelle)) + throw new DemandeFormationInvalidException("Le libellé de la demande de formation doit contenir au moins 1 caractère."); + + // Vérifier que la demande de formation a bien une description + if (string.IsNullOrWhiteSpace(demande.Description)) + throw new DemandeFormationInvalidException("La description de la demande de formation doit contenir au moins 1 caractère."); + + // Vérifier que la demande de formation a bien une valeur permettant de dire s'il s'agit d'une demande créée par une RH ou non + if (!demande.DemandeRH.HasValue) + throw new DemandeFormationInvalidException("Impossible de répondre à une demande de formation sans savoir si la demande a été créé par une RH ou non."); + + // Vérifier que la demande de formation a bien une date de demande + if (!demande.DateDemande.HasValue) + throw new DemandeFormationInvalidException("Une date de demande de formation est requise."); + } + + /// + /// Ajouter un ordonnancement croissant ou décroissant sur colonne + /// + /// + /// + /// + /// + private IQueryable OrderByColumn(IQueryable query, bool? asc, string columnName) + { + if (!asc.HasValue) + asc = defaultAsc; + + if (string.IsNullOrWhiteSpace(columnName)) + { + if (asc.Value) + return query.OrderBy(p => p.Libelle); + else + return query.OrderByDescending(p => p.Libelle); + } + + switch (columnName.ToLower()) + { + case "businessunit": + if (asc.Value) + return query.OrderBy(d => d.Libelle); + else + return query.OrderByDescending(p => p.Libelle); + + + default: + if (asc.Value) + return query.OrderBy(p => p.Libelle); + else + return query.OrderByDescending(p => p.Libelle); + } + } + + /// + /// Ajouter un filtre pour récupérer les demandes de formation en fonction de plusieurs états de demande + /// + /// + /// + /// + private IQueryable EtatsDemandeFilter(IQueryable query, List etatsDemande) + { + if (etatsDemande != null && etatsDemande.Count > 0) + return query.Where(demandeFormation => etatsDemande.Contains(demandeFormation.Etat)); + else + return query; + } + + /// + /// Ajouter un filtre pour récupérer les demandes de formation en fonction de l'id BU des collaborateurs + /// + /// + /// + /// + private IQueryable IdBUsFilter(IQueryable query, List idBus) + { + if (idBus != null && idBus.Count > 0) + return query.Where(demandeFormation => idBus.Contains(demandeFormation.Ep.IdBu)); + else + return query; + } + + + + /// + /// Ajouter un filtre pour récupérer les formations en fonction d'un intitulé + /// + /// + /// + /// + private IQueryable IntituleFilter(IQueryable query, string intitule) + { + if (!string.IsNullOrWhiteSpace(intitule)) + return query.Where(formation => formation.Intitule.ToLower().Contains(intitule.ToLower())); + else + return query; + } + + /// + /// Ajouter un filtre pour récupérer les formations en fonction d'un intervalle de date + /// + /// + /// + /// + /// + private IQueryable DateFilter(IQueryable query, DateTime? dateDebut, DateTime? dateFin) + { + if (dateDebut.HasValue && dateFin.HasValue) + return query.Where(demandeFormation => demandeFormation.DateDemande >= dateDebut.Value && demandeFormation.DateDemande <= dateFin.Value.AddDays(1)); + else if (!dateDebut.HasValue && dateFin.HasValue) + return query.Where(demandeFormation => demandeFormation.DateDemande <= dateFin.Value.AddDays(1)); + else if (dateDebut.HasValue && !dateFin.HasValue) + return query.Where(demandeFormation => demandeFormation.DateDemande >= dateDebut.Value); + else + return query; + + } + + /// + /// Ajouter une pagination + /// + /// + /// + /// + /// + private IQueryable SkipAndTake(IQueryable query, int? parPage, int? numPage) + { + int skip, take; + + if (!parPage.HasValue || parPage.Value < minParPage || parPage.Value > maxParPage) + parPage = defaultParPage; + + if (!numPage.HasValue || numPage.Value <= 0) + numPage = defaultNumPage; + + + skip = (numPage.Value - 1) * parPage.Value; + take = parPage.Value; + + return query.Skip(skip).Take(take); + } + + + + #region Object to DTO + + /// + /// Récuperer un objet OrigineDemandeFormationDTO en fonction d'un objet OrigineDemande + /// + /// + /// + private OrigineDemandeFormationDTO GetOrigineDemandeFormationDTO(OrigineDemande origineDemande) + { + if (origineDemande == null) + return null; + + OrigineDemandeFormationDTO origineDemandeFormationDTO = new OrigineDemandeFormationDTO() + { + Id = origineDemande.IdOrigineDemande, + Libelle = origineDemande.Libelle + }; + + return origineDemandeFormationDTO; + } + + /// + /// Récuperer un objet DemandeFormationDTO en fonction d'un objet DemandeFormation et d'une liste de CollaborateurDTO + /// + /// + /// + private DemandeFormationDTO GetDemandeFormationDTO(DemandeFormation demandeFormation, IEnumerable collaborateurDTOs) + { + if (demandeFormation == null) + return null; + + if (collaborateurDTOs == null || !collaborateurDTOs.Any()) + return null; + + DemandeFormationDTO demandeFormationDTO = new DemandeFormationDTO() + { + Id = demandeFormation.IdDemandeFormation, + Libelle = demandeFormation.Libelle, + Description = demandeFormation.Description, + DemandeRH = demandeFormation.DemandeRH, + DateDemande = demandeFormation.DateDemande, + EtatDemande = demandeFormation.Etat, + CommentaireRefus = demandeFormation.CommentaireRefus, + DateDerniereReponse = demandeFormation.DateDerniereReponse, + //Origine = GetOrigineDemandeFormationDTO(demandeFormation.OrigineFormation), // Voir avec Yanael + Collaborateur = GetCollaborateurDTO(demandeFormation, collaborateurDTOs), + Ep = GetEpInformationDTO(demandeFormation.Ep, collaborateurDTOs), + Formation = GetFormationDTO(demandeFormation.ParticipationFormation.Formation, collaborateurDTOs) + }; + + return demandeFormationDTO; + } + + /// + /// Récuperer un objet FormationDTO avec des participations en fonction d'un objet Formation et d'une liste de CollaborateurDTO + /// + /// + /// + private FormationDTO GetFormationDTO(Formation formation, IEnumerable collaborateurDTOs) + { + if (formation == null || collaborateurDTOs == null || !collaborateurDTOs.Any()) + return null; + + FormationDTO formationDTO = new FormationDTO() + { + Id = formation.IdFormation, + Intitule = formation.Intitule, + IdAgence = formation.IdAgence, + DateDebut = formation.DateDebut, + DateFin = formation.DateFin, + Heure = formation.Heure, + Jour = formation.Jour, + Organisme = formation.Organisme, + EstCertifiee = formation.EstCertifiee, + EstRealisee = formation.EstRealisee, + Origine = GetOrigineFormationDTO(formation.Origine), + Statut = GetStatutFormationDTO(formation.Statut), + Mode = GetModeFormationDTO(formation.ModeFormation), + Type = GetTypeFormationDTO(formation.TypeFormation), + Participations = GetParticipationsFormationDTO(formation.ParticipationsFormation, collaborateurDTOs) + }; + + return formationDTO; + } + + /// + /// Récuperer un objet OrigineFormationDTO en fonction d'un objet OrigineFormation + /// + /// + /// + private OrigineFormationDTO GetOrigineFormationDTO(OrigineFormation origineFormation) + { + if (origineFormation == null) + return null; + + OrigineFormationDTO origineFormationDTO = new OrigineFormationDTO() + { + Id = origineFormation.IdOrigineFormation, + Libelle = origineFormation.Libelle + }; + + return origineFormationDTO; + } + + /// + /// Récuperer un objet StatutFormationDTO en fonction d'un objet StatutFormation + /// + /// + /// + private StatutFormationDTO GetStatutFormationDTO(StatutFormation statutFormation) + { + if (statutFormation == null) + return null; + + StatutFormationDTO statutFormationDTO = new StatutFormationDTO() + { + Id = statutFormation.IdStatutFormation, + Libelle = statutFormation.Libelle + }; + + return statutFormationDTO; + } + + /// + /// Récuperer un objet ModeFormationDTO en fonction d'un objet ModeFormation + /// + /// + /// + private ModeFormationDTO GetModeFormationDTO(ModeFormation modeFormation) + { + if (modeFormation == null) + return null; + + ModeFormationDTO modeFormationDTO = new ModeFormationDTO() + { + Id = modeFormation.IdModeFormation, + Libelle = modeFormation.Libelle + }; + + return modeFormationDTO; + } + + /// + /// Récuperer un objet TypeFormationDTO en fonction d'un objet TypeFormation + /// + /// + /// + private TypeFormationDTO GetTypeFormationDTO(TypeFormation typeFormation) + { + if (typeFormation == null) + return null; + + TypeFormationDTO typeFormationDTO = new TypeFormationDTO() + { + Id = typeFormation.IdTypeFormation, + Libelle = typeFormation.Libelle + }; + + return typeFormationDTO; + } + + /// + /// Récuperer une liste de ParticipationFormationDTO en fonction d'une liste de ParticipationFormation et d'une liste de CollaborateurDTO. Retourne null s'il n'y a aucune participation ou aucun collaborateur. + /// + /// + /// + private List GetParticipationsFormationDTO(List participationsFormation, IEnumerable collaborateurDTOs) + { + List participationFormationDTOs; + + if (participationsFormation == null || participationsFormation.Count == 0 || collaborateurDTOs == null || !collaborateurDTOs.Any()) + return null; + + participationFormationDTOs = participationsFormation.Select(participationFormation => GetParticipationFormationDTO(participationFormation, collaborateurDTOs)) + .OrderBy(participationFormation => participationFormation.Collaborateur.Nom) + .ThenBy(participationFormation => participationFormation.Collaborateur.Prenom).ToList(); + + return participationFormationDTOs; + } + + /// + /// Récuperer un objet ParticipationFormationDTO en fonction d'un objet ParticipationFormation et d'une liste de CollaborateurDTO + /// + /// + /// + private ParticipationFormationDTO GetParticipationFormationDTO(ParticipationFormation participationFormation, IEnumerable collaborateurDTOs) + { + if (participationFormation == null || collaborateurDTOs == null || !collaborateurDTOs.Any()) + return null; + + ParticipationFormationDTO participationFormationDTO = new ParticipationFormationDTO() + { + Id = participationFormation.IdParticipationFormation, + DateCreation = participationFormation.DateCreation, + Intitule = participationFormation.Formation.Intitule, + DateDebut = participationFormation.Formation.DateDebut, + Statut = GetStatutFormationDTO(participationFormation.Formation.Statut), + Collaborateur = GetCollaborateurDTO(participationFormation, collaborateurDTOs), + Ep = GetEpInformationDTO(participationFormation.DemandeFormation.Ep, collaborateurDTOs) + }; + + return participationFormationDTO; + } + + /// + /// Récupère un objet CollaborateurDTO en fonction d'un objet ParticipationFormation et d'une liste de CollaborateurDTO + /// + /// + /// + private CollaborateurDTO GetCollaborateurDTO(ParticipationFormation participationFormation, IEnumerable collaborateurDTOs) + { + if (participationFormation == null || collaborateurDTOs == null || !collaborateurDTOs.Any()) + return null; + + return collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == participationFormation.DemandeFormation.Ep.IdCollaborateur); + } + + /// + /// Récupère un objet CollaborateurDTO en fonction d'un objet DemandeFormation et d'une liste de CollaborateurDTO + /// + /// + /// + private CollaborateurDTO GetCollaborateurDTO(DemandeFormation demandeFormation, IEnumerable collaborateurDTOs) + { + if (demandeFormation == null || collaborateurDTOs == null || !collaborateurDTOs.Any()) + return null; + + return collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == demandeFormation.Ep.IdCollaborateur); + } + + /// + /// Récuperer une liste de CollaborateurDTO contenant les collaborateurs et les référents. Retourne null s'il n'y a aucune demande de formation. + /// + /// + /// + private async Task> GetCollaborateurDTOs(IEnumerable demandeFormations) + { + if (demandeFormations == null || !demandeFormations.Any()) + return null; + + List guids = demandeFormations.SelectMany(demandeFormation => new[] { (Guid?)demandeFormation.Ep.IdCollaborateur, demandeFormation.Ep.IdReferent }).ToList(); + + return await collaborateurService.GetCollaborateurDTOsAsync(guids); ; + } + + + /// + /// Récuperer une liste de CollaborateurDTO contenant les collaborateurs et les référents. Retourne null s'il n'y a aucune participation. + /// + /// + /// + private async Task> GetCollaborateurDTOs(IEnumerable participationsFormation) + { + if (participationsFormation == null || !participationsFormation.Any()) + return null; + + List guids = participationsFormation.SelectMany(participationFormation => new[] { (Guid?)participationFormation.DemandeFormation.Ep.IdCollaborateur, participationFormation.DemandeFormation.Ep.IdReferent }).ToList(); + + return await collaborateurService.GetCollaborateurDTOsAsync(guids); ; + } + + /// + /// Récupère un objet EpInformationDTO en fonction d'un objet Ep et d'une liste de CollaborateurDTO + /// + /// + /// + private EpInformationDTO GetEpInformationDTO(Ep ep, IEnumerable collaborateurDTOs) + { + CollaborateurDTO collaborateur; + CollaborateurDTO referent; + + if (ep == null) + return null; + + if (collaborateurDTOs == null || !collaborateurDTOs.Any()) + return null; + + + collaborateur = collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == ep.IdCollaborateur); + referent = collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == ep.IdReferent); + + EpInformationDTO epInformationDTO = new EpInformationDTO() + { + Id = ep.IdEP, + Type = ep.TypeEP, + Statut = ep.Statut, + DateDisponibilite = ep.DateDisponibilite, + DatePrevisionnelle = ep.DatePrevisionnelle, + Obligatoire = ep.Obligatoire, + Collaborateur = collaborateur, + Referent = referent, + }; + + return epInformationDTO; + } + + #endregion + + #region DTO to Object + + /// + /// Récuperer un objet Saisie en fonction d'un objet SaisieDTO + /// + /// + /// + private Saisie GetSaisie(SaisieDTO saisieDTO) + { + if (saisieDTO == null) + return null; + + Saisie saisie = new Saisie() + { + //IdSaisie = saisieDTO.Id.Value, + Note = saisieDTO.Note, + Texte = saisieDTO.Texte, + Champ = GetChamp(saisieDTO.Champ), + TypeSaisie = saisieDTO.TypeSaisie + }; + + return saisie; + } + + /// + /// Récuperer un objet Champ en fonction d'un objet ChampDTO + /// + /// + /// + private Champ GetChamp(ChampDTO champDTO) + { + if (champDTO == null) + return null; + + Champ champ = new Champ() + { + IdChamp = champDTO.Id.Value, + Texte = champDTO.Texte, + Section = champDTO.Section, + SousSection = champDTO.Soussection, + Ordre = champDTO.Ordre.Value, + TypeChamp = champDTO.TypeChamp, + TypeSaisie = champDTO.TypeSaisie + }; + return champ; + } + #endregion + + #endregion + + } +} From 021be18a03feebfb4707b3d211e966cf911f5850 Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Tue, 2 Mar 2021 09:25:28 +0100 Subject: [PATCH 03/19] Suppression du tri et de la pagination pour l'action GetDemandesFormationCount --- EPAServeur/Controllers/DemandesFormationApi.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/EPAServeur/Controllers/DemandesFormationApi.cs b/EPAServeur/Controllers/DemandesFormationApi.cs index 7e4fe39..2a33590 100644 --- a/EPAServeur/Controllers/DemandesFormationApi.cs +++ b/EPAServeur/Controllers/DemandesFormationApi.cs @@ -166,11 +166,7 @@ namespace IO.Swagger.Controllers /// Récupérer le nombre total de demandes de formation. /// Liste des états des demandes à afficher /// liste des ids des BU auxquelles les données sont rattachées - /// Indique si les données sont récupérées dans l'ordre croissant ou non - /// Numéro de la page du tableau à afficher - /// Nombre d’élément maximum à afficher dans le tableau /// Texte permettant de filtrer les données - /// Colonne du tableau sur lequel le tri devra être effectué /// Date à partir de laquelle les données son récupérées /// Date jusqu'à laquelle les données sont récupérées /// OK @@ -186,7 +182,7 @@ namespace IO.Swagger.Controllers [SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L'utilisateur souhaitant accéder à la ressource n'est pas authentifié")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] - public virtual IActionResult GetDemandesFormationCount([FromQuery]List etatsDemande, [FromQuery]List idBUs, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri, [FromQuery]DateTime? dateDebut, [FromQuery]DateTime? dateFin) + public virtual IActionResult GetDemandesFormationCount([FromQuery]List etatsDemande, [FromQuery]List idBUs, [FromQuery]string texte, [FromQuery]DateTime? dateDebut, [FromQuery]DateTime? dateFin) { //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(long?)); From b6dfd23cee88194c5da5197a189879b0b64b0dc9 Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Fri, 12 Mar 2021 09:13:06 +0100 Subject: [PATCH 04/19] =?UTF-8?q?Ajout=20d'une=20m=C3=A9thode=20pour=20r?= =?UTF-8?q?=C3=A9cup=C3=A9rer=20des=20collaborateurs=20en=20fonction=20d'u?= =?UTF-8?q?ne=20demande=20de=20formation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EPAServeur/IServices/ICollaborateurService.cs | 1 + EPAServeur/Services/CollaborateurService.cs | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/EPAServeur/IServices/ICollaborateurService.cs b/EPAServeur/IServices/ICollaborateurService.cs index 3681f34..ebf7967 100644 --- a/EPAServeur/IServices/ICollaborateurService.cs +++ b/EPAServeur/IServices/ICollaborateurService.cs @@ -23,6 +23,7 @@ namespace EPAServeur.IServices Task> GetCollaborateurDTOsAsync(List guids); Task> GetCollaborateurDTOsAsync(List participationsFormation); Task> GetCollaborateurDTOsAsync(IEnumerable participationsFormation); + Task> GetCollaborateurDTOsAsync(IEnumerable demandeFormations); Task> GetCollaborateurDTOsAsync(Engagement engagement); Task> GetCollaborateurDTOsAsync(IEnumerable engagements); Task> GetCollaborateurDTOsAsync(IEnumerable eps); diff --git a/EPAServeur/Services/CollaborateurService.cs b/EPAServeur/Services/CollaborateurService.cs index 942747c..38e037d 100644 --- a/EPAServeur/Services/CollaborateurService.cs +++ b/EPAServeur/Services/CollaborateurService.cs @@ -320,6 +320,21 @@ namespace EPAServeur.Services return await GetCollaborateurDTOsAsync(guids); } + /// + /// Récupérer une liste de CollaborateurDTO contenant les collaborateurs et les référents. + /// + /// + /// + public async Task> GetCollaborateurDTOsAsync(IEnumerable demandeFormations) + { + if (demandeFormations == null || !demandeFormations.Any()) + return null; + + List guids = demandeFormations.SelectMany(participationFormation => new[] { (Guid?)participationFormation.Ep.IdCollaborateur, participationFormation.Ep.IdReferent }).ToList(); + + return await GetCollaborateurDTOsAsync(guids); + } + /// /// Récupérer le collaborateur et le référent qui sont présent dans l'EP qui est lié à l'engagement. From 0b63a775ffee51825aaab79e6dda3457d280409e Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Fri, 12 Mar 2021 09:14:43 +0100 Subject: [PATCH 05/19] =?UTF-8?q?Ajout=20des=20m=C3=A9thodes=20de=20transf?= =?UTF-8?q?ormation=20DTO=20pour=20la=20partie=20demande=20de=20formation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EPAServeur/IServices/ITransformDTO.cs | 8 ++ EPAServeur/Services/TransformDTO.cs | 155 +++++++++++++++++++++++++- 2 files changed, 161 insertions(+), 2 deletions(-) diff --git a/EPAServeur/IServices/ITransformDTO.cs b/EPAServeur/IServices/ITransformDTO.cs index 2565734..b39721d 100644 --- a/EPAServeur/IServices/ITransformDTO.cs +++ b/EPAServeur/IServices/ITransformDTO.cs @@ -15,6 +15,7 @@ namespace EPAServeur.IServices AgenceDTO GetAgenceDTO(Agence agence); BusinessUnitDTO GetBusinessUnitDTO(BU businessUnit); CollaborateurDTO GetCollaborateurDTO(ParticipationFormation participationFormation, IEnumerable collaborateurDTOs); + CollaborateurDTO GetCollaborateurDTO(DemandeFormation demandeFormation, IEnumerable collaborateurDTOs); // DemandeDelegation DemandeDelegationDTO GetDemandeDelegationDTO(DemandeDelegation demande, CollaborateurDTO referent, IEnumerable collaborateurs); @@ -36,6 +37,7 @@ namespace EPAServeur.IServices ModeFormationDTO GetModeFormationDTO(ModeFormation modeFormation); TypeFormationDTO GetTypeFormationDTO(TypeFormation typeFormation); Formation SetFormation(Formation formation, FormationDTO formationDTO); + Formation GetFormation(FormationDetailsDTO formationDetailsDTO); OrigineFormation GetOrigineFormation(OrigineFormationDTO origineFormationDTO); StatutFormation GetStatutFormation(StatutFormationDTO statutFormationDTO); ModeFormation GetModeFormation(ModeFormationDTO modeFormationDTO); @@ -55,5 +57,11 @@ namespace EPAServeur.IServices Saisie GetSaisie(SaisieDTO saisieDTO); Champ GetChamp(ChampDTO champDTO); + // DemandeFormation + DemandeFormationDTO GetDemandeFormationDTO(DemandeFormation demandeFormation, IEnumerable collaborateurDTOs); + DemandeFormation SetDemandeFormationWithoutParticipationFormationAndEp(DemandeFormation demandeFormation, DemandeFormationDTO demandeFormationDTO); + OrigineDemandeFormationDTO GetOrigineDemandeFormationDTO(OrigineDemande origineDemande); + OrigineDemande GetOrigineDemandeFormation(OrigineDemandeFormationDTO origineDemandeDTO); + } } diff --git a/EPAServeur/Services/TransformDTO.cs b/EPAServeur/Services/TransformDTO.cs index 75a5bf8..c7d7d0c 100644 --- a/EPAServeur/Services/TransformDTO.cs +++ b/EPAServeur/Services/TransformDTO.cs @@ -165,7 +165,25 @@ namespace EPAServeur.Services return collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == participationFormation.DemandeFormation.Ep.IdCollaborateur); } - + /// + /// Récupérer le collaborateur qui a fait une demande de formation. + /// + /// + /// + /// + public CollaborateurDTO GetCollaborateurDTO(DemandeFormation demandeFormation, IEnumerable collaborateurDTOs) + { + if (demandeFormation == null) + return null; + + if (collaborateurDTOs == null || !collaborateurDTOs.Any()) + return null; + + return collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == demandeFormation.Ep.IdCollaborateur); + } + + + /// /// Transformer un objet DemandeDelegation en objet DemandeDelegationDTO. /// L'objet CollaborateurDTO est utilisé pour alimenter la propriété Referent de l'objet DemandeDelegationDTO. @@ -485,7 +503,66 @@ namespace EPAServeur.Services return participationFormationDTOs; } - + // + /// Récuperer un objet OrigineDemandeFormationDTO en fonction d'un objet OrigineDemande + /// + /// + /// + public OrigineDemandeFormationDTO GetOrigineDemandeFormationDTO(OrigineDemande origineDemande) + { + if (origineDemande == null) + return null; + + OrigineDemandeFormationDTO origineDemandeFormationDTO = new OrigineDemandeFormationDTO() + { + Id = origineDemande.IdOrigineDemande, + Libelle = origineDemande.Libelle + }; + + return origineDemandeFormationDTO; + } + + /// + /// Récuperer un objet DemandeFormationDTO en fonction d'un objet DemandeFormation et d'une liste de CollaborateurDTO + /// + /// + /// + public DemandeFormationDTO GetDemandeFormationDTO(DemandeFormation demandeFormation, IEnumerable collaborateurDTOs) + { + if (demandeFormation == null) + return null; + + if (collaborateurDTOs == null || !collaborateurDTOs.Any()) + return null; + + Formation formation; + + if (demandeFormation.ParticipationFormation != null) + formation = demandeFormation.ParticipationFormation.Formation; + else + formation = null; + + DemandeFormationDTO demandeFormationDTO = new DemandeFormationDTO() + { + Id = demandeFormation.IdDemandeFormation, + Libelle = demandeFormation.Libelle, + Description = demandeFormation.Description, + DemandeRH = demandeFormation.DemandeRH, + DateDemande = demandeFormation.DateDemande, + EtatDemande = demandeFormation.Etat, + CommentaireRefus = demandeFormation.CommentaireRefus, + DateDerniereReponse = demandeFormation.DateDerniereReponse, + Origine = GetOrigineDemandeFormationDTO(demandeFormation.OrigineDemande), + Collaborateur = GetCollaborateurDTO(demandeFormation, collaborateurDTOs), + Ep = GetEpInformationDTO(demandeFormation.Ep, collaborateurDTOs), + Formation = GetFormationDetailsDTO(formation) + }; + + return demandeFormationDTO; + } + + + /// /// Transformer un objet SaisieDTO en objet Saisie. /// @@ -653,6 +730,49 @@ namespace EPAServeur.Services return details; } + // + /// Récupérer un objet OrigineDemande en fonction d'un objet OrigineDemandeFormationDTO + /// + /// + /// + public OrigineDemande GetOrigineDemandeFormation(OrigineDemandeFormationDTO origineDemandeDTO) + { + if (origineDemandeDTO == null) + return null; + + OrigineDemande origineDemandeFormation = new OrigineDemande() + { + IdOrigineDemande = origineDemandeDTO.Id.Value, + Libelle = origineDemandeDTO.Libelle + }; + + return origineDemandeFormation; + } + + /// + /// Mettre à jour un objet DemandeFormation en fonction d'un objet DemandeFormationDTO. + /// + /// Les propriétés ParticipationFormation et Ep ne sont pas mise à jour. + /// + /// + /// + public DemandeFormation SetDemandeFormationWithoutParticipationFormationAndEp(DemandeFormation demandeFormation, DemandeFormationDTO demandeFormationDTO) + { + if (demandeFormation == null || demandeFormationDTO == null) + return null; + + demandeFormation.Libelle = demandeFormationDTO.Libelle; + demandeFormation.Description = demandeFormationDTO.Description; + demandeFormation.DemandeRH = demandeFormationDTO.DemandeRH.Value; + demandeFormation.DateDemande = demandeFormationDTO.DateDemande.Value; + demandeFormation.Etat = demandeFormationDTO.EtatDemande; + demandeFormation.CommentaireRefus = demandeFormationDTO.CommentaireRefus; + demandeFormation.DateDerniereReponse = demandeFormationDTO.DateDerniereReponse; + demandeFormation.OrigineDemande = GetOrigineDemandeFormation(demandeFormationDTO.Origine); + + return demandeFormation; + } + /// /// Mettre à jour un objet Formation en fonction d'un objet FormationDTO. /// @@ -664,6 +784,9 @@ namespace EPAServeur.Services if (formation == null || formationDTO == null) return null; + if (formationDTO.Id.HasValue) + formation.IdFormation = formationDTO.Id.Value; + formation.Intitule = formationDTO.Intitule; formation.IdAgence = formationDTO.IdAgence.Value; formation.DateDebut = formationDTO.DateDebut.Value; @@ -681,6 +804,34 @@ namespace EPAServeur.Services return formation; } + /// + /// Récupérer un objet Formation en fonction d'un objet FormationDetailsDTO. + /// + /// + /// + public Formation GetFormation(FormationDetailsDTO formationDetailsDTO) + { + if (formationDetailsDTO == null) + return null; + + Formation formation = new Formation + { + Intitule = formationDetailsDTO.Intitule, + DateDebut = formationDetailsDTO.DateDebut.Value, + DateFin = formationDetailsDTO.DateFin.Value, + Organisme = formationDetailsDTO.Organisme, + EstCertifiee = formationDetailsDTO.EstCertifiee.Value, + //EstRealisee = formationDTO.EstRealisee.Value, + Origine = GetOrigineFormation(formationDetailsDTO.Origine), + Statut = GetStatutFormation(formationDetailsDTO.Statut), + }; + + if (formationDetailsDTO.Id.HasValue) + formation.IdFormation = formationDetailsDTO.Id.Value; + + return formation; + } + /// /// Mettre à jour la réponse d'un objet Engagement en fonction d'un objet EngagementDTO. /// From ce44d258077e55898139e51b1c0b305ec037d864 Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Fri, 12 Mar 2021 09:16:24 +0100 Subject: [PATCH 06/19] =?UTF-8?q?Mise=20=C3=A0=20jour=20du=20jeu=20de=20do?= =?UTF-8?q?nn=C3=A9es=20pour=20la=20partie=20demande=20de=20formation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EPAServeur/Context/DataSeeder.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/EPAServeur/Context/DataSeeder.cs b/EPAServeur/Context/DataSeeder.cs index 752ad9b..9ab8cfe 100644 --- a/EPAServeur/Context/DataSeeder.cs +++ b/EPAServeur/Context/DataSeeder.cs @@ -1081,6 +1081,7 @@ namespace EPAServeur.Context Etat = EtatDemande.EnAttente, CommentaireRefus = null, DateDerniereReponse = null, + OrigineDemande = origineDemandeFormationApside, Ep = ep12 }; @@ -1096,6 +1097,7 @@ namespace EPAServeur.Context Etat = EtatDemande.EnAttente, CommentaireRefus = null, DateDerniereReponse = null, + OrigineDemande = origineDemandeFormationApside, Ep = ep13 }; @@ -1111,6 +1113,7 @@ namespace EPAServeur.Context Etat = EtatDemande.EnAttente, CommentaireRefus = null, DateDerniereReponse = null, + OrigineDemande = origineDemandeFormationClient, Ep = ep14 }; @@ -1126,6 +1129,7 @@ namespace EPAServeur.Context Etat = EtatDemande.EnAttente, CommentaireRefus = null, DateDerniereReponse = null, + OrigineDemande = origineDemandeFormationClient, Ep = ep13 }; @@ -1141,6 +1145,7 @@ namespace EPAServeur.Context Etat = EtatDemande.Validee, CommentaireRefus = null, DateDerniereReponse = null, + OrigineDemande = origineDemandeFormationEP, Ep = ep12 }; @@ -1151,11 +1156,12 @@ namespace EPAServeur.Context IdDemandeFormation = 6, Libelle = "Formation Vb.Net", Description = "Demande de formation Vb.Net avec WinForms", - DemandeRH = false, + DemandeRH = true, DateDemande = new DateTime(2020, 6, 22, 9, 0, 0), Etat = EtatDemande.Validee, CommentaireRefus = null, DateDerniereReponse = null, + OrigineDemande = origineDemandeFormationEP, Ep = ep15 }; @@ -1171,6 +1177,7 @@ namespace EPAServeur.Context Etat = EtatDemande.Validee, CommentaireRefus = null, DateDerniereReponse = null, + OrigineDemande = origineDemandeFormationReglement, Ep = ep16 }; @@ -1186,6 +1193,7 @@ namespace EPAServeur.Context Etat = EtatDemande.Validee, CommentaireRefus = null, DateDerniereReponse = null, + OrigineDemande = origineDemandeFormationReglement, Ep = ep16 }; @@ -1201,6 +1209,7 @@ namespace EPAServeur.Context Etat = EtatDemande.Rejetee, CommentaireRefus = "Aucune formation PHP pour le moment", DateDerniereReponse = new DateTime(2020, 9, 27, 9, 0, 0), + OrigineDemande = origineDemandeFormationCollaborateur, Ep = ep17 }; @@ -1216,6 +1225,7 @@ namespace EPAServeur.Context Etat = EtatDemande.Rejetee, CommentaireRefus = null, DateDerniereReponse = new DateTime(2020, 10, 27, 9, 0, 0), + OrigineDemande = origineDemandeFormationCollaborateur, Ep = ep18 }; @@ -1231,6 +1241,7 @@ namespace EPAServeur.Context Etat = EtatDemande.Rejetee, CommentaireRefus = null, DateDerniereReponse = new DateTime(2020, 11, 27, 9, 0, 0), + OrigineDemande = origineDemandeFormationCollaborateur, Ep = ep19 }; @@ -1246,6 +1257,7 @@ namespace EPAServeur.Context Etat = EtatDemande.Rejetee, CommentaireRefus = null, DateDerniereReponse = new DateTime(2020, 12, 27, 9, 0, 0), + OrigineDemande = origineDemandeFormationCollaborateur, Ep = ep20 }; From 80003b0c6676d8af3da190a1f4dfb8be7353595b Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Fri, 12 Mar 2021 09:18:45 +0100 Subject: [PATCH 07/19] =?UTF-8?q?DemandeFormation:=20Remplacement=20de=20l?= =?UTF-8?q?a=20propri=C3=A9t=C3=A9=20OrigineFormation=20par=20OrigineDeman?= =?UTF-8?q?de?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EPAServeur/Models/Formation/DemandeFormation.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EPAServeur/Models/Formation/DemandeFormation.cs b/EPAServeur/Models/Formation/DemandeFormation.cs index 42306dc..3152b49 100644 --- a/EPAServeur/Models/Formation/DemandeFormation.cs +++ b/EPAServeur/Models/Formation/DemandeFormation.cs @@ -65,8 +65,8 @@ namespace EPAServeur.Models.Formation public ParticipationFormation ParticipationFormation { get; set; } /// - /// Origine de formation qui est liée à la demande de formation + /// Origine de demande qui est liée à la demande de formation /// - public OrigineFormation OrigineFormation { get; set; } + public OrigineDemande OrigineDemande { get; set; } } } From 0f8e9050988d066216d3063a7e59117133b4b0bc Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Fri, 12 Mar 2021 09:21:57 +0100 Subject: [PATCH 08/19] =?UTF-8?q?OrigineDemande:=20Suppression=20de=20la?= =?UTF-8?q?=20propri=C3=A9t=C3=A9=20DemandeFormations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EPAServeur/Models/Formation/OrigineDemande.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/EPAServeur/Models/Formation/OrigineDemande.cs b/EPAServeur/Models/Formation/OrigineDemande.cs index 381b779..a3d36c1 100644 --- a/EPAServeur/Models/Formation/OrigineDemande.cs +++ b/EPAServeur/Models/Formation/OrigineDemande.cs @@ -19,10 +19,5 @@ namespace EPAServeur.Models.Formation /// Libellé de l’origine de la demande de formation /// public string Libelle { get; set; } - - /// - /// Liste des demandes de formation qui sont liées à l'origine de formation - /// - public List DemandeFormations { get; set; } } } From d7f93b4913b504c94af4649d874ace164d392f3c Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Fri, 12 Mar 2021 09:25:32 +0100 Subject: [PATCH 09/19] =?UTF-8?q?EpContext:=20Ajout=20d'une=20propri=C3=A9?= =?UTF-8?q?t=C3=A9=20masqu=C3=A9=20IdDemandeFormation=20pour=20la=20cl?= =?UTF-8?q?=C3=A9=20=C3=A9trang=C3=A8re=20entre=20ParticipationFormation?= =?UTF-8?q?=20et=20DemandeFormation=20+=20Configuration=20de=20la=20relati?= =?UTF-8?q?on=20entre=20DemandeFormation=20et=20OrigineDemande?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EPAServeur/Context/EpContext.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/EPAServeur/Context/EpContext.cs b/EPAServeur/Context/EpContext.cs index 104fdde..824872c 100644 --- a/EPAServeur/Context/EpContext.cs +++ b/EPAServeur/Context/EpContext.cs @@ -150,12 +150,14 @@ namespace EPAServeur.Context }); //Formation + + modelBuilder.Entity(entity => { entity.HasKey(e => e.IdDemandeFormation); entity.Property(e => e.IdDemandeFormation).ValueGeneratedOnAdd(); - entity.HasOne(e => e.ParticipationFormation).WithOne(e => e.DemandeFormation).HasForeignKey(d => d.IdParticipationFormation); - + entity.HasOne(e => e.ParticipationFormation).WithOne(e => e.DemandeFormation).HasForeignKey("IdDemandeFormation"); + entity.HasOne(o => o.OrigineDemande).WithMany().IsRequired(); }); modelBuilder.Entity(entity => @@ -190,6 +192,7 @@ namespace EPAServeur.Context { entity.HasKey(e => e.IdParticipationFormation); entity.Property(e => e.IdParticipationFormation).ValueGeneratedOnAdd(); + entity.Property("IdDemandeFormation"); entity.HasMany(e => e.Evaluation).WithOne(e => e.ParticipationFormation); }); From 72eb5ce675703f2516861af67964b87bcbf43640 Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Fri, 12 Mar 2021 09:26:55 +0100 Subject: [PATCH 10/19] =?UTF-8?q?DemandeFormationDTO:=20Remplacement=20de?= =?UTF-8?q?=20la=20propri=C3=A9t=C3=A9=20FormationDTO=20par=20FormationDet?= =?UTF-8?q?ailsDTO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EPAServeur/DTO/DemandeFormationDTO.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EPAServeur/DTO/DemandeFormationDTO.cs b/EPAServeur/DTO/DemandeFormationDTO.cs index c2ca00c..cd68fea 100644 --- a/EPAServeur/DTO/DemandeFormationDTO.cs +++ b/EPAServeur/DTO/DemandeFormationDTO.cs @@ -109,7 +109,7 @@ namespace IO.Swagger.DTO /// Gets or Sets Formation /// [DataMember(Name="formation")] - public FormationDTO Formation { get; set; } + public FormationDetailsDTO Formation { get; set; } /// /// Returns the string presentation of the object From 3bfc264c12c39ad7196f57add0041768a2ac0e2f Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Fri, 12 Mar 2021 09:29:00 +0100 Subject: [PATCH 11/19] Ajout du service DemandeFormationService --- .../IServices/IDemandeFormationService.cs | 2 +- .../Services/DemandeFormationService.cs | 688 ++++++++---------- EPAServeur/Startup.cs | 1 + 3 files changed, 291 insertions(+), 400 deletions(-) diff --git a/EPAServeur/IServices/IDemandeFormationService.cs b/EPAServeur/IServices/IDemandeFormationService.cs index b88042b..e2613c1 100644 --- a/EPAServeur/IServices/IDemandeFormationService.cs +++ b/EPAServeur/IServices/IDemandeFormationService.cs @@ -13,7 +13,7 @@ namespace EPAServeur.IServices { Task> GetOriginesDemandeFormationAsync(); Task> GetDemandesFormationAsync(List etatsDemande, List idBUs, bool? asc, int? numPage, int? parPage, string texte, string tri, DateTime? dateDebut, DateTime? dateFin); - Task> GetDemandesFormationCountAsync(List etatsDemande, List idBUs, string texte, DateTime? dateDebut, DateTime? dateFin); + Task GetDemandesFormationCountAsync(List etatsDemande, List idBUs, string texte, DateTime? dateDebut, DateTime? dateFin); Task AddDemandeFormationAsync(DemandeFormationDTO demandeFormationDTO); Task UpdateDemandeFormationAsync(long idDemandeFormation, DemandeFormationDTO demandeFormationDTO); Task DeleteDemandeFormationAsync(long idDemandeFormation); diff --git a/EPAServeur/Services/DemandeFormationService.cs b/EPAServeur/Services/DemandeFormationService.cs index 36051c6..1da2421 100644 --- a/EPAServeur/Services/DemandeFormationService.cs +++ b/EPAServeur/Services/DemandeFormationService.cs @@ -24,10 +24,15 @@ namespace EPAServeur.Services private readonly EpContext epContext; /// - /// Accès et service collaborateur + /// Accès au service collaborateur /// private readonly ICollaborateurService collaborateurService; + /// + /// Accès au service permettant de transformer un modèle en dto + /// + private readonly ITransformDTO transformDTO; + /// /// Nombre d'éléments min à afficher par page /// @@ -62,10 +67,11 @@ namespace EPAServeur.Services /// Constructeur de la classe FormationService /// /// - public DemandeFormationService(EpContext _epContext, ICollaborateurService _collaborateurService) + public DemandeFormationService(EpContext _epContext, ICollaborateurService _collaborateurService, ITransformDTO _transformDTO) { epContext = _epContext; collaborateurService = _collaborateurService; + transformDTO = _transformDTO; } #endregion @@ -83,7 +89,7 @@ namespace EPAServeur.Services origineDemandes = await epContext.OrigineDemandeFormation.ToListAsync(); - origineDemandeDTOs = origineDemandes.Select(origineFormation => GetOrigineDemandeFormationDTO(origineFormation)); + origineDemandeDTOs = origineDemandes.Select(origineFormation => transformDTO.GetOrigineDemandeFormationDTO(origineFormation)); return origineDemandeDTOs; } @@ -110,25 +116,22 @@ namespace EPAServeur.Services query = epContext.DemandeFormation .Include(demandeFormation => demandeFormation.Ep) + .Include(demandeFormation => demandeFormation.OrigineDemande) .Include(demandeFormation => demandeFormation.ParticipationFormation) .ThenInclude(participationFormation => participationFormation.Formation); - query = EtatsDemandeFilter(query, etatsDemande); - query = IdBUsFilter(query, idBUs); - query = DateFilter(query, dateDebut, dateFin); - - query = OrderByColumn(query, asc, tri); - query = SkipAndTake(query, parPage, numPage); demandeFormations = await query.ToListAsync(); - collaborateurDTOs = await GetCollaborateurDTOs(demandeFormations); + collaborateurDTOs = await collaborateurService.GetCollaborateurDTOsAsync(demandeFormations); - demandeFormationDTOs = demandeFormations.Select(demandeFormation => GetDemandeFormationDTO(demandeFormation, collaborateurDTOs)); + demandeFormationDTOs = demandeFormations.Select(demandeFormation => transformDTO.GetDemandeFormationDTO(demandeFormation, collaborateurDTOs)); + demandeFormationDTOs = CollaborateurFilter(demandeFormationDTOs, texte); + demandeFormationDTOs = OrderByColumn(demandeFormationDTOs, asc, tri); return demandeFormationDTOs; @@ -143,19 +146,67 @@ namespace EPAServeur.Services /// Date à partir de laquelle les données son récupérées /// Date jusqu'à laquelle les données sont récupérées /// - public async Task> GetDemandesFormationCountAsync(List etatsDemande, List idBUs, string texte, DateTime? dateDebut, DateTime? dateFin) + public async Task GetDemandesFormationCountAsync(List etatsDemande, List idBUs, string texte, DateTime? dateDebut, DateTime? dateFin) { - throw new NotImplementedException(); + IQueryable query; + IEnumerable demandeFormations; + IEnumerable demandeFormationDTOs; + IEnumerable collaborateurDTOs; + long count; + + query = epContext.DemandeFormation + .Include(demandeFormation => demandeFormation.Ep) + .Include(demandeFormation => demandeFormation.ParticipationFormation) + .ThenInclude(participationFormation => participationFormation.Formation); + + query = EtatsDemandeFilter(query, etatsDemande); + query = IdBUsFilter(query, idBUs); + query = DateFilter(query, dateDebut, dateFin); + + demandeFormations = await query.ToListAsync(); + + collaborateurDTOs = await collaborateurService.GetCollaborateurDTOsAsync(demandeFormations); + + demandeFormationDTOs = demandeFormations.Select(demandeFormation => transformDTO.GetDemandeFormationDTO(demandeFormation, collaborateurDTOs)); + demandeFormationDTOs = CollaborateurFilter(demandeFormationDTOs, texte); + + count = demandeFormationDTOs.Count(); + + return count; } /// - /// Créer demande de formation pour un collaborateur. + /// Créer une demande de formation pour un collaborateur. /// /// + /// /// public async Task AddDemandeFormationAsync(DemandeFormationDTO demandeFormationDTO) { - throw new NotImplementedException(); + IsDemandeFormationValide(demandeFormationDTO); + + if (demandeFormationDTO.EtatDemande != EtatDemande.EnAttente) + throw new DemandeFormationInvalidException("Impossible de créer une demande de formation qui n'est pas en attente."); + + string collaborateur = string.Format("{0} {1}", demandeFormationDTO.Collaborateur.Nom, demandeFormationDTO.Collaborateur.Prenom); + + DemandeFormation demandeFormation = transformDTO.SetDemandeFormationWithoutParticipationFormationAndEp(new DemandeFormation(), demandeFormationDTO); + + IEnumerable statutsEp = Enum.GetValues(typeof(StatutEp)).Cast().Where(statut => statut == StatutEp.Cree || EstEpEnCours(statut)); + + Ep ep = await epContext.Ep.Include(ep => ep.DemandesFormation) + .Where(ep => ep.IdCollaborateur == demandeFormationDTO.Collaborateur.Id && statutsEp.Contains(ep.Statut)) + .OrderBy(ep => ep.DateDisponibilite).FirstOrDefaultAsync(); + if (ep == null) + throw new DemandeFormationInvalidException(string.Format("Il n'existe aucun EP en cours ou créé pour le collaborateur {0}.", collaborateur)); + + ep.DemandesFormation.Add(demandeFormation); + + await epContext.SaveChangesAsync(); + + demandeFormationDTO.Id = demandeFormation.IdDemandeFormation; + + return demandeFormationDTO; } /// @@ -163,10 +214,30 @@ namespace EPAServeur.Services /// /// /// + /// + /// + /// public async Task UpdateDemandeFormationAsync(long idDemandeFormation, DemandeFormationDTO demandeFormationDTO) { - throw new NotImplementedException(); + IsDemandeFormationValide(demandeFormationDTO); + + if (!demandeFormationDTO.Id.HasValue || demandeFormationDTO.Id.Value != idDemandeFormation) + throw new DemandeFormationIncompatibleIdException("La demande de formation ne correspond pas avec l'identifiant reçu."); + + switch (demandeFormationDTO.EtatDemande) + { + case EtatDemande.EnAttente: + throw new DemandeFormationInvalidException("La demande ne peut pas être mise à jour si aucune réponse n'a été donnée."); + case EtatDemande.Validee: + demandeFormationDTO = await AccepterDemandeFormation(idDemandeFormation, demandeFormationDTO); + break; + case EtatDemande.Rejetee: + demandeFormationDTO = await RefuserDemandeFormation(idDemandeFormation, demandeFormationDTO); + break; + } + + return demandeFormationDTO; } /// @@ -176,7 +247,22 @@ namespace EPAServeur.Services /// public async Task DeleteDemandeFormationAsync(long idDemandeFormation) { - throw new NotImplementedException(); + IEnumerable statutsEp = Enum.GetValues(typeof(StatutEp)).Cast().Where(statut => statut == StatutEp.Cree || EstEpEnCours(statut)); + DemandeFormation demandeFormation = await epContext.DemandeFormation.Include(demandeFormation => demandeFormation.Ep) + .FirstOrDefaultAsync(demandeFormation => demandeFormation.IdDemandeFormation == idDemandeFormation); + + if (demandeFormation == null) + throw new DemandeFormationNotFoundException("Aucune demande de formation n'a été trouvée."); + + if (!statutsEp.Contains(demandeFormation.Ep.Statut)) + throw new DemandeFormationInvalidException(string.Format("L'EP {1} qui est rattaché à la demande de formation {0} n'est ni créé ni en cours. Statut de l'EP {1}: {2}.", demandeFormation.IdDemandeFormation, demandeFormation.Ep.IdEP, demandeFormation.Ep.Statut)); + + epContext.Remove(demandeFormation); + + await epContext.SaveChangesAsync(); + + return true; + } @@ -184,13 +270,101 @@ namespace EPAServeur.Services #region Méthodes Privée /// - /// Vérifier si un objet DemandeFormationDTO est valide pour une mise à jour + /// Accepter une demande de formation. + /// + /// Créer une participation formation et associe cette dernière la demande de formation + /// + /// + /// + /// + /// + private async Task AccepterDemandeFormation(long idDemandeFormation, DemandeFormationDTO demandeFormationDTO) + { + // Vérifier que la demande de formation a bien une formation + if (demandeFormationDTO.Formation == null || !demandeFormationDTO.Formation.Id.HasValue) + throw new DemandeFormationInvalidException("Une formation est requise pour accepter une demande de formation."); + + + DemandeFormation demandeFormation = await epContext.DemandeFormation.Include(d => d.ParticipationFormation) + .Include(d => d.Ep) + .FirstOrDefaultAsync(d => d.IdDemandeFormation == idDemandeFormation); + + if (demandeFormation == null) + throw new DemandeFormationNotFoundException("Aucune demande de formation n'a été trouvée."); + + Guid idCollaborateur = demandeFormation.Ep.IdCollaborateur; // devra être utilisé pour notifier le collaborateur + DateTime dateNow = DateTime.Now; + Formation formation = transformDTO.GetFormation(demandeFormationDTO.Formation); + ParticipationFormation participationFormation = new ParticipationFormation { DateCreation = dateNow, Formation = formation }; + + demandeFormation.Etat = demandeFormationDTO.EtatDemande; + demandeFormation.DateDerniereReponse = dateNow; + demandeFormation.ParticipationFormation = participationFormation; + + await epContext.SaveChangesAsync(); + int nbParticipations = await epContext.ParticipationFormation.Include(p => p.DemandeFormation).Where(p => p.Formation.IdFormation == formation.IdFormation).CountAsync(); + + demandeFormationDTO.EtatDemande = demandeFormation.Etat; + demandeFormationDTO.DateDerniereReponse = demandeFormation.DateDerniereReponse; + demandeFormationDTO.Formation.NbParticipations = nbParticipations; + + return demandeFormationDTO; + } + + /// + /// Refuser une demande de formation. + /// + /// Supprime la participation formation qui est liée à la demande de formation + /// + /// + /// + /// + /// + private async Task RefuserDemandeFormation(long idDemandeFormation, DemandeFormationDTO demandeFormationDTO) + { + // Vérifier que la demande de formation a bien un commentaire expliquant la raison pour laquelle la demande a été refusée + if (string.IsNullOrWhiteSpace(demandeFormationDTO.CommentaireRefus)) + throw new DemandeFormationInvalidException("Un commentaire expliquant la raison pour laquelle la demande a été refusée est requis."); + + DemandeFormation demandeFormation = await epContext.DemandeFormation.Include(d => d.ParticipationFormation) + .Include(d => d.Ep) + .FirstOrDefaultAsync(d => d.IdDemandeFormation == idDemandeFormation); + + if (demandeFormation == null) + throw new DemandeFormationNotFoundException("Aucune demande de formation n'a été trouvée."); + + Guid idCollaborateur = demandeFormation.Ep.IdCollaborateur; // devra être utilisé pour notifier le collaborateur + + demandeFormation.Etat = demandeFormationDTO.EtatDemande; + demandeFormation.CommentaireRefus = demandeFormationDTO.CommentaireRefus; + demandeFormation.DateDerniereReponse = DateTime.Now; + + if (demandeFormation.ParticipationFormation != null) + epContext.Remove(demandeFormation.ParticipationFormation); + + await epContext.SaveChangesAsync(); + + if (demandeFormationDTO.Formation != null && demandeFormationDTO.Formation.Id.HasValue) + { + int nbParticipations = await epContext.ParticipationFormation.Include(p => p.DemandeFormation).Where(p => p.Formation.IdFormation == demandeFormationDTO.Formation.Id.Value).CountAsync(); + demandeFormationDTO.Formation.NbParticipations = nbParticipations; + } + + demandeFormationDTO.EtatDemande = demandeFormation.Etat; + demandeFormationDTO.DateDerniereReponse = demandeFormation.DateDerniereReponse; + + return demandeFormationDTO; + } + + /// + /// Vérifier si un objet DemandeFormationDTO est valide pour une mise à jour. /// /// /// Un objet DemandeFormationDTO est valide si l'objet n'est pas null, si le libellé, la descritpion, /// la date de demande de début et la valeur permettant de dire si la demande a été créé par une RH ou non ne sont pas null. /// /// + /// /// true si l'objet est valide, false sinon private void IsDemandeFormationValide(DemandeFormationDTO demande) { @@ -213,91 +387,135 @@ namespace EPAServeur.Services // Vérifier que la demande de formation a bien une date de demande if (!demande.DateDemande.HasValue) throw new DemandeFormationInvalidException("Une date de demande de formation est requise."); + + // Vérifier que la demande de formation a bien un collaborateur + if (demande.Collaborateur == null || !demande.Collaborateur.Id.HasValue) + throw new DemandeFormationInvalidException("Un collaborateur est requis pour une demande de formation."); + + // Vérifier que la demande de formation a bien un collaborateur + if (demande.Origine == null || !demande.Origine.Id.HasValue) + throw new DemandeFormationInvalidException("Une origine de formation est requise pour une demande de formation."); } /// - /// Ajouter un ordonnancement croissant ou décroissant sur colonne + /// Ajouter un ordonnancement croissant ou décroissant sur une colonne. /// /// /// /// /// - private IQueryable OrderByColumn(IQueryable query, bool? asc, string columnName) + private IEnumerable OrderByColumn(IEnumerable query, bool? asc, string columnName) { if (!asc.HasValue) asc = defaultAsc; if (string.IsNullOrWhiteSpace(columnName)) + return OrderByDefault(query, (bool)asc); + + if ((bool)asc) + return OrderByAscending(query, columnName); + else + return OrderByDescending(query, columnName); + } + + /// + /// Ajouter un ordonnancement croissant sur une colonne. + /// + /// + /// + /// + private IEnumerable OrderByAscending(IEnumerable query, string columnName) + { + switch (columnName.ToLower()) { - if (asc.Value) - return query.OrderBy(p => p.Libelle); - else - return query.OrderByDescending(p => p.Libelle); + case "businessunit": + return query.OrderBy(d => d.Collaborateur.BusinessUnit.Nom); + case "collaborateur": + return query.OrderBy(d => d.Collaborateur.Nom); + case "datedemande": + return query.OrderBy(d => d.DateDemande); + case "demanderh": + return query.OrderBy(d => d.DemandeRH); + case "etat": + return query.OrderBy(d => d.EtatDemande); + case "datereponse": + return query.OrderBy(d => d.DateDerniereReponse); + default: + return query.OrderBy(p => p.Collaborateur.Nom); } + } + /// + /// Ajouter un ordonnancement décroissant sur une colonne. + /// + /// + /// + /// + private IEnumerable OrderByDescending(IEnumerable query, string columnName) + { switch (columnName.ToLower()) { case "businessunit": - if (asc.Value) - return query.OrderBy(d => d.Libelle); - else - return query.OrderByDescending(p => p.Libelle); - - + return query.OrderByDescending(d => d.Collaborateur.BusinessUnit.Nom); + case "collaborateur": + return query.OrderByDescending(d => d.Collaborateur.Nom); + case "datedemande": + return query.OrderByDescending(d => d.DateDemande); + case "demanderh": + return query.OrderByDescending(d => d.DemandeRH); + case "etat": + return query.OrderByDescending(d => d.EtatDemande); + case "datereponse": + return query.OrderByDescending(d => d.DateDerniereReponse); default: - if (asc.Value) - return query.OrderBy(p => p.Libelle); - else - return query.OrderByDescending(p => p.Libelle); + return query.OrderByDescending(d => d.Collaborateur.Nom); } } /// - /// Ajouter un filtre pour récupérer les demandes de formation en fonction de plusieurs états de demande + /// Ajouter un ordonnancement par défaut. /// /// - /// + /// /// - private IQueryable EtatsDemandeFilter(IQueryable query, List etatsDemande) + private IEnumerable OrderByDefault(IEnumerable query, bool asc) { - if (etatsDemande != null && etatsDemande.Count > 0) - return query.Where(demandeFormation => etatsDemande.Contains(demandeFormation.Etat)); + if (asc) + return query.OrderBy(p => p.Collaborateur.Nom); else - return query; + return query.OrderByDescending(p => p.Collaborateur.Nom); } /// - /// Ajouter un filtre pour récupérer les demandes de formation en fonction de l'id BU des collaborateurs + /// Ajouter un filtre pour récupérer les demandes de formation en fonction de plusieurs états de demande. /// /// - /// + /// /// - private IQueryable IdBUsFilter(IQueryable query, List idBus) + private IQueryable EtatsDemandeFilter(IQueryable query, List etatsDemande) { - if (idBus != null && idBus.Count > 0) - return query.Where(demandeFormation => idBus.Contains(demandeFormation.Ep.IdBu)); + if (etatsDemande != null && etatsDemande.Count > 0) + return query.Where(demandeFormation => etatsDemande.Contains(demandeFormation.Etat)); else return query; } - - /// - /// Ajouter un filtre pour récupérer les formations en fonction d'un intitulé + /// Ajouter un filtre pour récupérer les demandes de formation en fonction de l'id BU des collaborateurs. /// /// - /// + /// /// - private IQueryable IntituleFilter(IQueryable query, string intitule) + private IQueryable IdBUsFilter(IQueryable query, List idBus) { - if (!string.IsNullOrWhiteSpace(intitule)) - return query.Where(formation => formation.Intitule.ToLower().Contains(intitule.ToLower())); + if (idBus != null && idBus.Count > 0) + return query.Where(demandeFormation => idBus.Contains(demandeFormation.Ep.IdBu)); else return query; } /// - /// Ajouter un filtre pour récupérer les formations en fonction d'un intervalle de date + /// Ajouter un filtre pour récupérer les formations en fonction d'un intervalle de date. /// /// /// @@ -317,7 +535,22 @@ namespace EPAServeur.Services } /// - /// Ajouter une pagination + /// Ajouter un filtre pour récupérer les demandes de formation en fonction du nom et du prénom du collaborateur. + /// + /// + /// + /// + private IEnumerable CollaborateurFilter(IEnumerable demandeFormationDTOs, string texte) + { + if (string.IsNullOrWhiteSpace(texte)) + return demandeFormationDTOs; + + return demandeFormationDTOs.Where(demandeFormation => (demandeFormation.Ep.Collaborateur.Nom + " " + demandeFormation.Ep.Collaborateur.Prenom).ToLower().Contains(texte.ToLower()) || + (demandeFormation.Ep.Collaborateur.Prenom + " " + demandeFormation.Ep.Collaborateur.Nom).ToLower().Contains(texte.ToLower())); + } + + /// + /// Ajouter une pagination. /// /// /// @@ -340,353 +573,10 @@ namespace EPAServeur.Services return query.Skip(skip).Take(take); } - - - #region Object to DTO - - /// - /// Récuperer un objet OrigineDemandeFormationDTO en fonction d'un objet OrigineDemande - /// - /// - /// - private OrigineDemandeFormationDTO GetOrigineDemandeFormationDTO(OrigineDemande origineDemande) - { - if (origineDemande == null) - return null; - - OrigineDemandeFormationDTO origineDemandeFormationDTO = new OrigineDemandeFormationDTO() - { - Id = origineDemande.IdOrigineDemande, - Libelle = origineDemande.Libelle - }; - - return origineDemandeFormationDTO; - } - - /// - /// Récuperer un objet DemandeFormationDTO en fonction d'un objet DemandeFormation et d'une liste de CollaborateurDTO - /// - /// - /// - private DemandeFormationDTO GetDemandeFormationDTO(DemandeFormation demandeFormation, IEnumerable collaborateurDTOs) - { - if (demandeFormation == null) - return null; - - if (collaborateurDTOs == null || !collaborateurDTOs.Any()) - return null; - - DemandeFormationDTO demandeFormationDTO = new DemandeFormationDTO() - { - Id = demandeFormation.IdDemandeFormation, - Libelle = demandeFormation.Libelle, - Description = demandeFormation.Description, - DemandeRH = demandeFormation.DemandeRH, - DateDemande = demandeFormation.DateDemande, - EtatDemande = demandeFormation.Etat, - CommentaireRefus = demandeFormation.CommentaireRefus, - DateDerniereReponse = demandeFormation.DateDerniereReponse, - //Origine = GetOrigineDemandeFormationDTO(demandeFormation.OrigineFormation), // Voir avec Yanael - Collaborateur = GetCollaborateurDTO(demandeFormation, collaborateurDTOs), - Ep = GetEpInformationDTO(demandeFormation.Ep, collaborateurDTOs), - Formation = GetFormationDTO(demandeFormation.ParticipationFormation.Formation, collaborateurDTOs) - }; - - return demandeFormationDTO; - } - - /// - /// Récuperer un objet FormationDTO avec des participations en fonction d'un objet Formation et d'une liste de CollaborateurDTO - /// - /// - /// - private FormationDTO GetFormationDTO(Formation formation, IEnumerable collaborateurDTOs) - { - if (formation == null || collaborateurDTOs == null || !collaborateurDTOs.Any()) - return null; - - FormationDTO formationDTO = new FormationDTO() - { - Id = formation.IdFormation, - Intitule = formation.Intitule, - IdAgence = formation.IdAgence, - DateDebut = formation.DateDebut, - DateFin = formation.DateFin, - Heure = formation.Heure, - Jour = formation.Jour, - Organisme = formation.Organisme, - EstCertifiee = formation.EstCertifiee, - EstRealisee = formation.EstRealisee, - Origine = GetOrigineFormationDTO(formation.Origine), - Statut = GetStatutFormationDTO(formation.Statut), - Mode = GetModeFormationDTO(formation.ModeFormation), - Type = GetTypeFormationDTO(formation.TypeFormation), - Participations = GetParticipationsFormationDTO(formation.ParticipationsFormation, collaborateurDTOs) - }; - - return formationDTO; - } - - /// - /// Récuperer un objet OrigineFormationDTO en fonction d'un objet OrigineFormation - /// - /// - /// - private OrigineFormationDTO GetOrigineFormationDTO(OrigineFormation origineFormation) - { - if (origineFormation == null) - return null; - - OrigineFormationDTO origineFormationDTO = new OrigineFormationDTO() - { - Id = origineFormation.IdOrigineFormation, - Libelle = origineFormation.Libelle - }; - - return origineFormationDTO; - } - - /// - /// Récuperer un objet StatutFormationDTO en fonction d'un objet StatutFormation - /// - /// - /// - private StatutFormationDTO GetStatutFormationDTO(StatutFormation statutFormation) - { - if (statutFormation == null) - return null; - - StatutFormationDTO statutFormationDTO = new StatutFormationDTO() - { - Id = statutFormation.IdStatutFormation, - Libelle = statutFormation.Libelle - }; - - return statutFormationDTO; - } - - /// - /// Récuperer un objet ModeFormationDTO en fonction d'un objet ModeFormation - /// - /// - /// - private ModeFormationDTO GetModeFormationDTO(ModeFormation modeFormation) - { - if (modeFormation == null) - return null; - - ModeFormationDTO modeFormationDTO = new ModeFormationDTO() - { - Id = modeFormation.IdModeFormation, - Libelle = modeFormation.Libelle - }; - - return modeFormationDTO; - } - - /// - /// Récuperer un objet TypeFormationDTO en fonction d'un objet TypeFormation - /// - /// - /// - private TypeFormationDTO GetTypeFormationDTO(TypeFormation typeFormation) - { - if (typeFormation == null) - return null; - - TypeFormationDTO typeFormationDTO = new TypeFormationDTO() - { - Id = typeFormation.IdTypeFormation, - Libelle = typeFormation.Libelle - }; - - return typeFormationDTO; - } - - /// - /// Récuperer une liste de ParticipationFormationDTO en fonction d'une liste de ParticipationFormation et d'une liste de CollaborateurDTO. Retourne null s'il n'y a aucune participation ou aucun collaborateur. - /// - /// - /// - private List GetParticipationsFormationDTO(List participationsFormation, IEnumerable collaborateurDTOs) - { - List participationFormationDTOs; - - if (participationsFormation == null || participationsFormation.Count == 0 || collaborateurDTOs == null || !collaborateurDTOs.Any()) - return null; - - participationFormationDTOs = participationsFormation.Select(participationFormation => GetParticipationFormationDTO(participationFormation, collaborateurDTOs)) - .OrderBy(participationFormation => participationFormation.Collaborateur.Nom) - .ThenBy(participationFormation => participationFormation.Collaborateur.Prenom).ToList(); - - return participationFormationDTOs; - } - - /// - /// Récuperer un objet ParticipationFormationDTO en fonction d'un objet ParticipationFormation et d'une liste de CollaborateurDTO - /// - /// - /// - private ParticipationFormationDTO GetParticipationFormationDTO(ParticipationFormation participationFormation, IEnumerable collaborateurDTOs) - { - if (participationFormation == null || collaborateurDTOs == null || !collaborateurDTOs.Any()) - return null; - - ParticipationFormationDTO participationFormationDTO = new ParticipationFormationDTO() - { - Id = participationFormation.IdParticipationFormation, - DateCreation = participationFormation.DateCreation, - Intitule = participationFormation.Formation.Intitule, - DateDebut = participationFormation.Formation.DateDebut, - Statut = GetStatutFormationDTO(participationFormation.Formation.Statut), - Collaborateur = GetCollaborateurDTO(participationFormation, collaborateurDTOs), - Ep = GetEpInformationDTO(participationFormation.DemandeFormation.Ep, collaborateurDTOs) - }; - - return participationFormationDTO; - } - - /// - /// Récupère un objet CollaborateurDTO en fonction d'un objet ParticipationFormation et d'une liste de CollaborateurDTO - /// - /// - /// - private CollaborateurDTO GetCollaborateurDTO(ParticipationFormation participationFormation, IEnumerable collaborateurDTOs) - { - if (participationFormation == null || collaborateurDTOs == null || !collaborateurDTOs.Any()) - return null; - - return collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == participationFormation.DemandeFormation.Ep.IdCollaborateur); - } - - /// - /// Récupère un objet CollaborateurDTO en fonction d'un objet DemandeFormation et d'une liste de CollaborateurDTO - /// - /// - /// - private CollaborateurDTO GetCollaborateurDTO(DemandeFormation demandeFormation, IEnumerable collaborateurDTOs) - { - if (demandeFormation == null || collaborateurDTOs == null || !collaborateurDTOs.Any()) - return null; - - return collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == demandeFormation.Ep.IdCollaborateur); - } - - /// - /// Récuperer une liste de CollaborateurDTO contenant les collaborateurs et les référents. Retourne null s'il n'y a aucune demande de formation. - /// - /// - /// - private async Task> GetCollaborateurDTOs(IEnumerable demandeFormations) - { - if (demandeFormations == null || !demandeFormations.Any()) - return null; - - List guids = demandeFormations.SelectMany(demandeFormation => new[] { (Guid?)demandeFormation.Ep.IdCollaborateur, demandeFormation.Ep.IdReferent }).ToList(); - - return await collaborateurService.GetCollaborateurDTOsAsync(guids); ; - } - - - /// - /// Récuperer une liste de CollaborateurDTO contenant les collaborateurs et les référents. Retourne null s'il n'y a aucune participation. - /// - /// - /// - private async Task> GetCollaborateurDTOs(IEnumerable participationsFormation) - { - if (participationsFormation == null || !participationsFormation.Any()) - return null; - - List guids = participationsFormation.SelectMany(participationFormation => new[] { (Guid?)participationFormation.DemandeFormation.Ep.IdCollaborateur, participationFormation.DemandeFormation.Ep.IdReferent }).ToList(); - - return await collaborateurService.GetCollaborateurDTOsAsync(guids); ; - } - - /// - /// Récupère un objet EpInformationDTO en fonction d'un objet Ep et d'une liste de CollaborateurDTO - /// - /// - /// - private EpInformationDTO GetEpInformationDTO(Ep ep, IEnumerable collaborateurDTOs) - { - CollaborateurDTO collaborateur; - CollaborateurDTO referent; - - if (ep == null) - return null; - - if (collaborateurDTOs == null || !collaborateurDTOs.Any()) - return null; - - - collaborateur = collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == ep.IdCollaborateur); - referent = collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == ep.IdReferent); - - EpInformationDTO epInformationDTO = new EpInformationDTO() - { - Id = ep.IdEP, - Type = ep.TypeEP, - Statut = ep.Statut, - DateDisponibilite = ep.DateDisponibilite, - DatePrevisionnelle = ep.DatePrevisionnelle, - Obligatoire = ep.Obligatoire, - Collaborateur = collaborateur, - Referent = referent, - }; - - return epInformationDTO; - } - - #endregion - - #region DTO to Object - - /// - /// Récuperer un objet Saisie en fonction d'un objet SaisieDTO - /// - /// - /// - private Saisie GetSaisie(SaisieDTO saisieDTO) - { - if (saisieDTO == null) - return null; - - Saisie saisie = new Saisie() - { - //IdSaisie = saisieDTO.Id.Value, - Note = saisieDTO.Note, - Texte = saisieDTO.Texte, - Champ = GetChamp(saisieDTO.Champ), - TypeSaisie = saisieDTO.TypeSaisie - }; - - return saisie; - } - - /// - /// Récuperer un objet Champ en fonction d'un objet ChampDTO - /// - /// - /// - private Champ GetChamp(ChampDTO champDTO) + private bool EstEpEnCours(StatutEp statut) { - if (champDTO == null) - return null; - - Champ champ = new Champ() - { - IdChamp = champDTO.Id.Value, - Texte = champDTO.Texte, - Section = champDTO.Section, - SousSection = champDTO.Soussection, - Ordre = champDTO.Ordre.Value, - TypeChamp = champDTO.TypeChamp, - TypeSaisie = champDTO.TypeSaisie - }; - return champ; + return statut != StatutEp.Annule && statut != StatutEp.Cree && statut != StatutEp.Rejete && statut != StatutEp.Signe; } - #endregion #endregion diff --git a/EPAServeur/Startup.cs b/EPAServeur/Startup.cs index aec2766..0d9c80c 100644 --- a/EPAServeur/Startup.cs +++ b/EPAServeur/Startup.cs @@ -126,6 +126,7 @@ namespace EPAServeur services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); From 308e6b6001b2040b6badeaaa818fb5351a9d68d7 Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Fri, 12 Mar 2021 09:30:12 +0100 Subject: [PATCH 12/19] Ajout des tests unitaires pour le service DemandeFormationService --- .../Services/DemandeFormationServiceTests.cs | 1604 +++++++++++++++++ 1 file changed, 1604 insertions(+) create mode 100644 EPAServeur.Tests/Services/DemandeFormationServiceTests.cs diff --git a/EPAServeur.Tests/Services/DemandeFormationServiceTests.cs b/EPAServeur.Tests/Services/DemandeFormationServiceTests.cs new file mode 100644 index 0000000..576b1ca --- /dev/null +++ b/EPAServeur.Tests/Services/DemandeFormationServiceTests.cs @@ -0,0 +1,1604 @@ +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 + } +} \ No newline at end of file From 15e9a57e0b525fd9bb0bb9604072b89c4dbd3907 Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Fri, 12 Mar 2021 10:23:58 +0100 Subject: [PATCH 13/19] =?UTF-8?q?Ajout=20d'une=20m=C3=A9thode=20pour=20r?= =?UTF-8?q?=C3=A9cup=C3=A9rer=20les=20demandes=20de=20formations=20rattach?= =?UTF-8?q?=C3=A9es=20=C3=A0=20un=20Ep=20en=20cours=20ou=20cr=C3=A9=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EPAServeur/Services/DemandeFormationService.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/EPAServeur/Services/DemandeFormationService.cs b/EPAServeur/Services/DemandeFormationService.cs index 1da2421..33f345b 100644 --- a/EPAServeur/Services/DemandeFormationService.cs +++ b/EPAServeur/Services/DemandeFormationService.cs @@ -120,6 +120,7 @@ namespace EPAServeur.Services .Include(demandeFormation => demandeFormation.ParticipationFormation) .ThenInclude(participationFormation => participationFormation.Formation); + query = StatutEpFilter(query); query = EtatsDemandeFilter(query, etatsDemande); query = IdBUsFilter(query, idBUs); query = DateFilter(query, dateDebut, dateFin); @@ -159,6 +160,7 @@ namespace EPAServeur.Services .Include(demandeFormation => demandeFormation.ParticipationFormation) .ThenInclude(participationFormation => participationFormation.Formation); + query = StatutEpFilter(query); query = EtatsDemandeFilter(query, etatsDemande); query = IdBUsFilter(query, idBUs); query = DateFilter(query, dateDebut, dateFin); @@ -486,6 +488,19 @@ namespace EPAServeur.Services return query.OrderByDescending(p => p.Collaborateur.Nom); } + /// + /// Ajouter un filtre pour récupérer les demandes de formation en fonction du statut de l'EP. + /// + /// + /// + /// + private IQueryable StatutEpFilter(IQueryable query) + { + IEnumerable statutsEp = Enum.GetValues(typeof(StatutEp)).Cast().Where(statut => statut == StatutEp.Cree || EstEpEnCours(statut)); + + return query.Where(demandeFormation => statutsEp.Contains(demandeFormation.Ep.Statut)); + } + /// /// Ajouter un filtre pour récupérer les demandes de formation en fonction de plusieurs états de demande. /// From bc43b2f2ff7335c2b40609f232c3335216dc8707 Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Fri, 12 Mar 2021 10:25:19 +0100 Subject: [PATCH 14/19] =?UTF-8?q?Mise=20=C3=A0=20jour=20des=20tests=20unit?= =?UTF-8?q?aires=20en=20fonction=20du=20filtre=20sur=20les=20statuts=20de?= =?UTF-8?q?=20l'EP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EPAServeur.Tests/Services/DemandeFormationServiceTests.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/EPAServeur.Tests/Services/DemandeFormationServiceTests.cs b/EPAServeur.Tests/Services/DemandeFormationServiceTests.cs index 576b1ca..eac801e 100644 --- a/EPAServeur.Tests/Services/DemandeFormationServiceTests.cs +++ b/EPAServeur.Tests/Services/DemandeFormationServiceTests.cs @@ -63,7 +63,7 @@ namespace EPAServeur.Tests.Services [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, null, null, 2, 5, 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)] @@ -121,10 +121,10 @@ namespace EPAServeur.Tests.Services nbDemandeFormationDeuxiemePage = 5; break; case 6: - nbDemandeFormationDeuxiemePage = 6; + nbDemandeFormationDeuxiemePage = 4; break; case 10: - nbDemandeFormationDeuxiemePage = 2; + nbDemandeFormationDeuxiemePage = 0; break; default: nbDemandeFormationDeuxiemePage = 0; From dbd3888e27e29768c65bdcfb7749d58e77315e3a Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Fri, 12 Mar 2021 11:38:10 +0100 Subject: [PATCH 15/19] =?UTF-8?q?Int=C3=A9gration=20du=20service=20Demande?= =?UTF-8?q?FormationService=20dans=20DemandeFormationApi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DemandesFormationApi.cs | 445 +++++++++++++----- 1 file changed, 320 insertions(+), 125 deletions(-) diff --git a/EPAServeur/Controllers/DemandesFormationApi.cs b/EPAServeur/Controllers/DemandesFormationApi.cs index 2a33590..481eb87 100644 --- a/EPAServeur/Controllers/DemandesFormationApi.cs +++ b/EPAServeur/Controllers/DemandesFormationApi.cs @@ -19,15 +19,34 @@ using IO.Swagger.Security; using Microsoft.AspNetCore.Authorization; using IO.Swagger.DTO; using IO.Swagger.Enum; +using EPAServeur.IServices; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Hosting; +using Microsoft.AspNetCore.Hosting; +using System.Threading.Tasks; +using EPAServeur.Exceptions; +using Microsoft.AspNetCore.Http; +using Microsoft.EntityFrameworkCore; namespace IO.Swagger.Controllers -{ +{ /// /// /// [ApiController] public class DemandesFormationApiController : ControllerBase - { + { + private readonly IDemandeFormationService demandeFormationService; + private readonly ILogger logger; + private readonly IWebHostEnvironment env; + + public DemandesFormationApiController(IDemandeFormationService _demandeFormationService, ILogger _logger, IWebHostEnvironment _env) + { + demandeFormationService = _demandeFormationService; + logger = _logger; + env = _env; + + } /// /// /// @@ -40,7 +59,7 @@ namespace IO.Swagger.Controllers /// Une erreur est survenue sur le serveur [HttpPost] [Route("/api/demandesformation")] - [Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] + //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("AddDemandeFormation")] [SwaggerResponse(statusCode: 201, type: typeof(DemandeFormationDTO), description: "Demande formation créée")] @@ -48,29 +67,58 @@ namespace IO.Swagger.Controllers [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 415, type: typeof(ErreurDTO), description: "L’opération ne peut pas être effectuée car certaines données sont manquantes")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] - public virtual IActionResult AddDemandeFormation([FromBody]DemandeFormationDTO body) - { - //TODO: Uncomment the next line to return response 201 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(201, default(DemandeFormationDTO)); - - //TODO: Uncomment the next line to return response 401 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(401, default(ErreurDTO)); - - //TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(403, default(ErreurDTO)); - - //TODO: Uncomment the next line to return response 415 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(415, default(ErreurDTO)); - - //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(500, default(ErreurDTO)); - string exampleJson = null; - exampleJson = "{\n \"commentaireRefus\" : \"commentaireRefus\",\n \"libelle\" : \"libelle\",\n \"description\" : \"description\",\n \"dateDerniereReponse\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 2,\n \"origine\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 7\n },\n \"ep\" : {\n \"obligatoire\" : true,\n \"dateDisponibilite\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 9,\n \"datePrevisionnelle\" : \"2000-01-23T04:56:07.000+00:00\"\n },\n \"formation\" : {\n \"heure\" : 1,\n \"participations\" : [ {\n \"estEvaluee\" : true,\n \"dateCreation\" : \"2000-01-23T04:56:07.000+00:00\",\n \"dateDebut\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 7,\n \"intitule\" : \"intitule\"\n }, {\n \"estEvaluee\" : true,\n \"dateCreation\" : \"2000-01-23T04:56:07.000+00:00\",\n \"dateDebut\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 7,\n \"intitule\" : \"intitule\"\n } ],\n \"organisme\" : \"organisme\",\n \"origine\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 2\n },\n \"estCertifiee\" : true,\n \"type\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 6\n },\n \"intitule\" : \"intitule\",\n \"mode\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 1\n },\n \"jour\" : 1,\n \"dateDebut\" : \"2000-01-23T04:56:07.000+00:00\",\n \"estRealisee\" : true,\n \"id\" : 3,\n \"dateFin\" : \"2000-01-23T04:56:07.000+00:00\",\n \"idAgence\" : 7,\n \"statut\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 4\n }\n },\n \"demandeRH\" : false,\n \"dateDemande\" : \"2000-01-23T04:56:07.000+00:00\",\n \"etatDemande\" : \"EnAttente\"\n}"; - - var example = exampleJson != null - ? JsonConvert.DeserializeObject(exampleJson) - : default(DemandeFormationDTO); //TODO: Change the data returned - return new ObjectResult(example); + public virtual async Task AddDemandeFormation([FromBody] DemandeFormationDTO body) + { + if (env.IsDevelopment()) + logger.LogInformation("Ajout d'une nouvelle demande de formation."); + + try + { + body = await demandeFormationService.AddDemandeFormationAsync(body); + } + catch (DemandeFormationInvalidException e) + { + if (env.IsDevelopment()) + logger.LogInformation(e.Message); + + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status415UnsupportedMediaType, + Message = e.Message, + }; + + return StatusCode(erreur.Code.Value, erreur.Message); + } + catch (DbUpdateException e) + { + logger.LogError(e.Message); + + ErreurDTO erreur = new ErreurDTO + { + Code = StatusCodes.Status500InternalServerError, + Message = "Une erreur est survenue sur le serveur lors de l'ajout de la demande de formation.", + }; + + return StatusCode(erreur.Code.Value, erreur); + } + catch (Exception e) + { + logger.LogError(e.Message); + + ErreurDTO erreur = new ErreurDTO + { + Code = StatusCodes.Status500InternalServerError, + Message = "Une erreur inconnue est survenue sur le serveur.", + }; + + return StatusCode(erreur.Code.Value, erreur); + } + + if (env.IsDevelopment()) + logger.LogInformation("Nouvelle demande de formation ajoutée."); + + return Created("", body); + } /// @@ -82,6 +130,7 @@ namespace IO.Swagger.Controllers /// L'utilisateur souhaitant accéder à la ressource n'est pas authentifié /// L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants /// La ressource n'a pas été trouvée + /// L’opération ne peut pas être effectuée car certaines données sont manquantes /// Une erreur est survenue sur le serveur [HttpDelete] [Route("/api/demandesformation/{idDemandeFormation}")] @@ -91,25 +140,84 @@ namespace IO.Swagger.Controllers [SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L'utilisateur souhaitant accéder à la ressource n'est pas authentifié")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "La ressource n'a pas été trouvée")] + [SwaggerResponse(statusCode: 415, type: typeof(ErreurDTO), description: "L’opération ne peut pas être effectuée car certaines données sont manquantes")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] - public virtual IActionResult DeleteDemandeFormation([FromRoute][Required]long? idDemandeFormation) - { - //TODO: Uncomment the next line to return response 204 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(204); + public virtual async Task DeleteDemandeFormation([FromRoute][Required] long idDemandeFormation) + { + try + { + if (env.IsDevelopment()) + logger.LogInformation("Suppression de la demande de formation {idDemandeFormation}.", idDemandeFormation); + + bool demandeFormationSupprimee = await demandeFormationService.DeleteDemandeFormationAsync(idDemandeFormation); + } + catch (DemandeFormationNotFoundException e) + { + if (env.IsDevelopment()) + logger.LogInformation(e.Message); + + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status404NotFound, + Message = e.Message + }; + + return NotFound(erreur); + } + catch (DemandeFormationInvalidException e) + { + if (env.IsDevelopment()) + logger.LogInformation(e.Message); + + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status415UnsupportedMediaType, + Message = e.Message, + }; + + return StatusCode(erreur.Code.Value, erreur.Message); + } + catch (DbUpdateConcurrencyException e) + { + logger.LogError(e.Message); + + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status500InternalServerError, + Message = string.Format("La demande de formation {0} n'a pas pu être supprimée car elle est prise par une autre ressource.", idDemandeFormation) + }; - //TODO: Uncomment the next line to return response 401 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(401, default(ErreurDTO)); + return StatusCode(erreur.Code.Value, erreur); + } + catch (DbUpdateException e) + { + logger.LogError(e.Message); - //TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(403, default(ErreurDTO)); + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status500InternalServerError, + Message = "Une erreur est survenue sur le serveur lors de la suppression de la demande de formation." + }; - //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(404, default(ErreurDTO)); + return StatusCode(erreur.Code.Value, erreur); + } + catch (Exception e) + { + logger.LogError(e.Message); - //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(500, default(ErreurDTO)); + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status500InternalServerError, + Message = "Une erreur inconnue est survenue sur le serveur." + }; - throw new NotImplementedException(); + return StatusCode(erreur.Code.Value, erreur); + } + + if (env.IsDevelopment()) + logger.LogInformation("Demande de formation {idDemandeFormation} supprimée avec succès.", idDemandeFormation); + + return NoContent(); } /// @@ -138,26 +246,34 @@ namespace IO.Swagger.Controllers [SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L'utilisateur souhaitant accéder à la ressource n'est pas authentifié")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] - public virtual IActionResult GetDemandesFormation([FromQuery]List etatsDemande, [FromQuery]List idBUs, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri, [FromQuery]DateTime? dateDebut, [FromQuery]DateTime? dateFin) - { - //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(200, default(List)); - - //TODO: Uncomment the next line to return response 401 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(401, default(ErreurDTO)); - - //TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(403, default(ErreurDTO)); - - //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(500, default(ErreurDTO)); - string exampleJson = null; - exampleJson = "[ {\n \"commentaireRefus\" : \"commentaireRefus\",\n \"libelle\" : \"libelle\",\n \"description\" : \"description\",\n \"dateDerniereReponse\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 2,\n \"origine\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 7\n },\n \"ep\" : {\n \"obligatoire\" : true,\n \"dateDisponibilite\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 9,\n \"datePrevisionnelle\" : \"2000-01-23T04:56:07.000+00:00\"\n },\n \"formation\" : {\n \"heure\" : 1,\n \"participations\" : [ {\n \"estEvaluee\" : true,\n \"dateCreation\" : \"2000-01-23T04:56:07.000+00:00\",\n \"dateDebut\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 7,\n \"intitule\" : \"intitule\"\n }, {\n \"estEvaluee\" : true,\n \"dateCreation\" : \"2000-01-23T04:56:07.000+00:00\",\n \"dateDebut\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 7,\n \"intitule\" : \"intitule\"\n } ],\n \"organisme\" : \"organisme\",\n \"origine\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 2\n },\n \"estCertifiee\" : true,\n \"type\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 6\n },\n \"intitule\" : \"intitule\",\n \"mode\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 1\n },\n \"jour\" : 1,\n \"dateDebut\" : \"2000-01-23T04:56:07.000+00:00\",\n \"estRealisee\" : true,\n \"id\" : 3,\n \"dateFin\" : \"2000-01-23T04:56:07.000+00:00\",\n \"idAgence\" : 7,\n \"statut\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 4\n }\n },\n \"demandeRH\" : false,\n \"dateDemande\" : \"2000-01-23T04:56:07.000+00:00\",\n \"etatDemande\" : \"EnAttente\"\n}, {\n \"commentaireRefus\" : \"commentaireRefus\",\n \"libelle\" : \"libelle\",\n \"description\" : \"description\",\n \"dateDerniereReponse\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 2,\n \"origine\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 7\n },\n \"ep\" : {\n \"obligatoire\" : true,\n \"dateDisponibilite\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 9,\n \"datePrevisionnelle\" : \"2000-01-23T04:56:07.000+00:00\"\n },\n \"formation\" : {\n \"heure\" : 1,\n \"participations\" : [ {\n \"estEvaluee\" : true,\n \"dateCreation\" : \"2000-01-23T04:56:07.000+00:00\",\n \"dateDebut\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 7,\n \"intitule\" : \"intitule\"\n }, {\n \"estEvaluee\" : true,\n \"dateCreation\" : \"2000-01-23T04:56:07.000+00:00\",\n \"dateDebut\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 7,\n \"intitule\" : \"intitule\"\n } ],\n \"organisme\" : \"organisme\",\n \"origine\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 2\n },\n \"estCertifiee\" : true,\n \"type\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 6\n },\n \"intitule\" : \"intitule\",\n \"mode\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 1\n },\n \"jour\" : 1,\n \"dateDebut\" : \"2000-01-23T04:56:07.000+00:00\",\n \"estRealisee\" : true,\n \"id\" : 3,\n \"dateFin\" : \"2000-01-23T04:56:07.000+00:00\",\n \"idAgence\" : 7,\n \"statut\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 4\n }\n },\n \"demandeRH\" : false,\n \"dateDemande\" : \"2000-01-23T04:56:07.000+00:00\",\n \"etatDemande\" : \"EnAttente\"\n} ]"; - - var example = exampleJson != null - ? JsonConvert.DeserializeObject>(exampleJson) - : default(List); //TODO: Change the data returned - return new ObjectResult(example); + public virtual async Task GetDemandesFormation([FromQuery] List etatsDemande, [FromQuery] List idBUs, [FromQuery] bool? asc, [FromQuery] int? numPage, [FromQuery][Range(5, 100)] int? parPAge, [FromQuery] string texte, [FromQuery] string tri, [FromQuery] DateTime? dateDebut, [FromQuery] DateTime? dateFin) + { + if (env.IsDevelopment()) + logger.LogInformation("Récupération de la liste des demandes de formation."); + + IEnumerable demandeFormations; + + try + { + demandeFormations = await demandeFormationService.GetDemandesFormationAsync(etatsDemande, idBUs, asc, numPage, parPAge, texte, tri, dateDebut, dateFin); + } + catch (Exception e) + { + logger.LogError(e.Message); + + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status500InternalServerError, + Message = "Une erreur inconnue est survenue sur le serveur." + }; + + return StatusCode(erreur.Code.Value, erreur); + } + + if (env.IsDevelopment()) + logger.LogInformation("Liste des demandes de formation récupérée."); + + return Ok(demandeFormations); } /// @@ -182,26 +298,34 @@ namespace IO.Swagger.Controllers [SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L'utilisateur souhaitant accéder à la ressource n'est pas authentifié")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] - public virtual IActionResult GetDemandesFormationCount([FromQuery]List etatsDemande, [FromQuery]List idBUs, [FromQuery]string texte, [FromQuery]DateTime? dateDebut, [FromQuery]DateTime? dateFin) - { - //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(200, default(long?)); - - //TODO: Uncomment the next line to return response 401 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(401, default(ErreurDTO)); - - //TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(403, default(ErreurDTO)); - - //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(500, default(ErreurDTO)); - string exampleJson = null; - exampleJson = "0"; - - var example = exampleJson != null - ? JsonConvert.DeserializeObject(exampleJson) - : default(long?); //TODO: Change the data returned - return new ObjectResult(example); + public virtual async Task GetDemandesFormationCount([FromQuery] List etatsDemande, [FromQuery] List idBUs, [FromQuery] string texte, [FromQuery] DateTime? dateDebut, [FromQuery] DateTime? dateFin) + { + if (env.IsDevelopment()) + logger.LogInformation("Récupération du nombre total de demandes de formation."); + + long count; + + try + { + count = await demandeFormationService.GetDemandesFormationCountAsync(etatsDemande, idBUs, texte, dateDebut, dateFin); + } + catch (Exception e) + { + logger.LogError(e.Message); + + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status500InternalServerError, + Message = "Une erreur inconnue est survenue sur le serveur." + }; + + return StatusCode(erreur.Code.Value, erreur); + } + + if (env.IsDevelopment()) + logger.LogInformation("Nombre total de demandes de formation récupéré."); + + return Ok(count); } /// @@ -221,26 +345,34 @@ namespace IO.Swagger.Controllers [SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L'utilisateur souhaitant accéder à la ressource n'est pas authentifié")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] - public virtual IActionResult GetOriginesDemandeFormation() - { - //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(200, default(List)); - - //TODO: Uncomment the next line to return response 401 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(401, default(ErreurDTO)); - - //TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(403, default(ErreurDTO)); - - //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(500, default(ErreurDTO)); - string exampleJson = null; - exampleJson = "[ {\n \"libelle\" : \"libelle\",\n \"id\" : 7\n}, {\n \"libelle\" : \"libelle\",\n \"id\" : 7\n} ]"; - - var example = exampleJson != null - ? JsonConvert.DeserializeObject>(exampleJson) - : default(List); //TODO: Change the data returned - return new ObjectResult(example); + public virtual async Task GetOriginesDemandeFormation() + { + if (env.IsDevelopment()) + logger.LogInformation("Récupération de la liste des origines de demande de formation."); + + IEnumerable origineDemandes; + + try + { + origineDemandes = await demandeFormationService.GetOriginesDemandeFormationAsync(); + } + catch (Exception e) + { + logger.LogError(e.Message); + + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status500InternalServerError, + Message = "Une erreur inconnue est survenue sur le serveur." + }; + + return StatusCode(erreur.Code.Value, erreur); + } + + if (env.IsDevelopment()) + logger.LogInformation("Liste des origines de demande de formation récupérée."); + + return Ok(origineDemandes); } /// @@ -266,32 +398,95 @@ namespace IO.Swagger.Controllers [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "La ressource n'a pas été trouvée")] [SwaggerResponse(statusCode: 415, type: typeof(ErreurDTO), description: "L’opération ne peut pas être effectuée car certaines données sont manquantes")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] - public virtual IActionResult UpdateDemandeFormation([FromBody]DemandeFormationDTO body, [FromRoute][Required]long? idDemandeFormation) - { - //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(200, default(DemandeFormationDTO)); - - //TODO: Uncomment the next line to return response 401 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(401, default(ErreurDTO)); - - //TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(403, default(ErreurDTO)); - - //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(404, default(ErreurDTO)); - - //TODO: Uncomment the next line to return response 415 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(415, default(ErreurDTO)); - - //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... - // return StatusCode(500, default(ErreurDTO)); - string exampleJson = null; - exampleJson = "{\n \"commentaireRefus\" : \"commentaireRefus\",\n \"libelle\" : \"libelle\",\n \"description\" : \"description\",\n \"dateDerniereReponse\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 2,\n \"origine\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 7\n },\n \"ep\" : {\n \"obligatoire\" : true,\n \"dateDisponibilite\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 9,\n \"datePrevisionnelle\" : \"2000-01-23T04:56:07.000+00:00\"\n },\n \"formation\" : {\n \"heure\" : 1,\n \"participations\" : [ {\n \"estEvaluee\" : true,\n \"dateCreation\" : \"2000-01-23T04:56:07.000+00:00\",\n \"dateDebut\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 7,\n \"intitule\" : \"intitule\"\n }, {\n \"estEvaluee\" : true,\n \"dateCreation\" : \"2000-01-23T04:56:07.000+00:00\",\n \"dateDebut\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : 7,\n \"intitule\" : \"intitule\"\n } ],\n \"organisme\" : \"organisme\",\n \"origine\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 2\n },\n \"estCertifiee\" : true,\n \"type\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 6\n },\n \"intitule\" : \"intitule\",\n \"mode\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 1\n },\n \"jour\" : 1,\n \"dateDebut\" : \"2000-01-23T04:56:07.000+00:00\",\n \"estRealisee\" : true,\n \"id\" : 3,\n \"dateFin\" : \"2000-01-23T04:56:07.000+00:00\",\n \"idAgence\" : 7,\n \"statut\" : {\n \"libelle\" : \"libelle\",\n \"id\" : 4\n }\n },\n \"demandeRH\" : false,\n \"dateDemande\" : \"2000-01-23T04:56:07.000+00:00\",\n \"etatDemande\" : \"EnAttente\"\n}"; - - var example = exampleJson != null - ? JsonConvert.DeserializeObject(exampleJson) - : default(DemandeFormationDTO); //TODO: Change the data returned - return new ObjectResult(example); + public virtual async Task UpdateDemandeFormation([FromBody] DemandeFormationDTO body, [FromRoute][Required] long idDemandeFormation) + { + if (env.IsDevelopment()) + logger.LogInformation("Mise à jour de la demande de formation d'id {idDemandeFormation}.", idDemandeFormation); + + try + { + body = await demandeFormationService.UpdateDemandeFormationAsync(idDemandeFormation, body); + } + catch (DemandeFormationInvalidException e) + { + if (env.IsDevelopment()) + logger.LogInformation(e.Message); + + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status415UnsupportedMediaType, + Message = e.Message, + }; + + return StatusCode(erreur.Code.Value, erreur.Message); + } + catch (DemandeFormationIncompatibleIdException e) + { + if (env.IsDevelopment()) + logger.LogInformation(e.Message); + + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status415UnsupportedMediaType, + Message = e.Message, + }; + + return StatusCode(erreur.Code.Value, erreur.Message); + } + catch (DemandeFormationNotFoundException e) + { + if (env.IsDevelopment()) + logger.LogInformation(e.Message); + + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status404NotFound, + Message = e.Message + }; + + return NotFound(erreur); + } + catch (DbUpdateConcurrencyException e) + { + logger.LogError(e.Message); + + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status500InternalServerError, + Message = string.Format("La demande de formation {0} n'a pas pu être mise à jour car elle est prise par une autre ressource.", idDemandeFormation) + }; + + return StatusCode(erreur.Code.Value, erreur); + } + catch (DbUpdateException e) + { + logger.LogError(e.Message); + + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status500InternalServerError, + Message = "Une erreur est survenue sur le serveur lors de la mise à jour de la demande de formation." + }; + + return StatusCode(erreur.Code.Value, erreur); + } + catch (Exception e) + { + logger.LogError(e.Message); + + ErreurDTO erreur = new ErreurDTO() + { + Code = StatusCodes.Status500InternalServerError, + Message = "Une erreur inconnue est survenue sur le serveur." + }; + + return StatusCode(erreur.Code.Value, erreur); + } + + if (env.IsDevelopment()) + logger.LogInformation("Update effectué avec succès"); + + return Ok(body); } } } From b48c53aa28acc45ab69ab719551febf364198fac Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Fri, 12 Mar 2021 11:39:37 +0100 Subject: [PATCH 16/19] Ajout des tests unitaires pour l'api DemandeFormationApi --- .../Controllers/DemandeFormationApiTests.cs | 637 ++++++++++++++++++ 1 file changed, 637 insertions(+) create mode 100644 EPAServeur.Tests/Controllers/DemandeFormationApiTests.cs diff --git a/EPAServeur.Tests/Controllers/DemandeFormationApiTests.cs b/EPAServeur.Tests/Controllers/DemandeFormationApiTests.cs new file mode 100644 index 0000000..85eace0 --- /dev/null +++ b/EPAServeur.Tests/Controllers/DemandeFormationApiTests.cs @@ -0,0 +1,637 @@ +using EPAServeur.Context; +using EPAServeur.Exceptions; +using EPAServeur.Models.Formation; +using EPAServeur.Services; +using IO.Swagger.Controllers; +using IO.Swagger.DTO; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.DependencyInjection; +using EPAServeur.IServices; +using Moq; +using IO.Swagger.ApiCollaborateur; +using IO.Swagger.Enum; + +namespace EPAServeur.Tests.Controllers +{ + [TestFixture] + public class DemandeFormationApiTests + { + #region Variables + + private IDemandeFormationService demandeFormationService; + private Mock mockEnvironment; + private EpContext epContext; + #endregion + + #region Setup + + [SetUp] + public void Setup() + { + // Création d'une collection de services pour l'injection de dépendance + var services = new ServiceCollection(); + + // Utilisation d'une base de données en mémoire + var optionBuider = new DbContextOptionsBuilder() + .UseInMemoryDatabase("server_ep_test") + .Options; + + services.AddDbContext(b => b.UseInMemoryDatabase("server_ep_test")); + + epContext = new EpContext(optionBuider); + + 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; + } + + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + + // Récupère le service qui sera utilsé pour tester le contrôleur + var serviceProvider = services.BuildServiceProvider(); + demandeFormationService = serviceProvider.GetService(); + + // Simule l'interface IWebHostEnvironment avec Moq + mockEnvironment = new Mock(); + + mockEnvironment + .Setup(m => m.EnvironmentName) + .Returns("Development"); + + } + + #endregion + + #region Tests GetDemandesFormation + + [Test] + public void GetDemandesFormation_PasseDesParamsPresentsDansLaBDD_RetourneUnObjetOkResult() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + + // Act + var okResult = DemandesFormationApiController.GetDemandesFormation(null, null, null, null, null, null, null, null, null); + + // Assert + Assert.IsInstanceOf(okResult.Result); + } + + [Test] + public void GetDemandesFormation_PasseDesParamsPresentsDansLaBDD_RetourneLesCinqPremieresDemandesDeFormations() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + int nbDemandeFormation = 5; + int idFirstDemandeFormation = 1; + int idLastDemandeFormation = 3; + + // Act + var okResult = DemandesFormationApiController.GetDemandesFormation(null, null, null, 1, 5, null, null, null, null).Result as OkObjectResult; + + // Assert + Assert.IsInstanceOf>(okResult.Value); + Assert.AreEqual(nbDemandeFormation, (okResult.Value as IEnumerable).Count()); + Assert.AreEqual(idFirstDemandeFormation, (okResult.Value as IEnumerable).First().Id); + Assert.AreEqual(idLastDemandeFormation, (okResult.Value as IEnumerable).Last().Id); + } + + #endregion + + #region Tests GetDemandesFormationCount + + [Test] + public void GetDemandesFormationCount_PasseDesParamsPresentsDansLaBDD_RetourneUnObjetOkResult() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + + // Act + var okResult = DemandesFormationApiController.GetDemandesFormationCount(null, null, null, null, null); + + // Assert + Assert.IsInstanceOf(okResult.Result); + } + + [Test] + public void GetDemandesFormationCount_PasseDesParamsPresentsDansLaBDD_RetourneLeBonNombreDeDemandeDeFormation() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + int nbDemandeFormation = 10; + + // Act + var okResult = DemandesFormationApiController.GetDemandesFormationCount(null, null, null, null, null).Result as OkObjectResult; + + // Assert + Assert.IsInstanceOf(okResult.Value); + Assert.AreEqual(nbDemandeFormation, (long)okResult.Value); + } + + #endregion + + #region Tests GetOriginesDemandeFormation + + [Test] + public void GetOriginesDemandeFormation_RetourneUnObjetOkResult() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + + // Act + var okResult = DemandesFormationApiController.GetOriginesDemandeFormation(); + + // Assert + Assert.IsInstanceOf(okResult.Result); + } + + [Test] + public void GetOriginesDemandeFormation_RetourneToutesLesOriginesDeDemande() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + int nbOrigineDemande = 5; + // Act + var okResult = DemandesFormationApiController.GetOriginesDemandeFormation().Result as OkObjectResult; + + // Assert + Assert.IsInstanceOf>(okResult.Value); + Assert.AreEqual(nbOrigineDemande, (okResult.Value as IEnumerable).Count()); + } + + #endregion + + #region Tests AddDemandeFormation + + [Test] + public void AddDemandeFormation_AjouteUneDemandeDeFormationAvecUnCollaborateurNull_RetourneUnObjetObjectResult() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + + 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, + }; + + // Act + var objectResult = DemandesFormationApiController.AddDemandeFormation(demandeFormation); + + // Assert + Assert.IsInstanceOf(objectResult.Result); + } + + [Test] + public void AddDemandeFormation_AjouteUneDemandeDeFormationValide_RetourneUnObjetCreatedResult() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + + 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, + }; + + // Act + var createdResult = DemandesFormationApiController.AddDemandeFormation(demandeFormation); + + // Assert + Assert.IsInstanceOf(createdResult.Result); + } + + [Test] + public void AddDemandeFormation_AjouteUneDemandeDeFormationValide_RetourneLaDemandeDeFormationCreee() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + + 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, + }; + + // Act + var createdResult = DemandesFormationApiController.AddDemandeFormation(demandeFormation).Result as CreatedResult; + + // Assert + Assert.IsInstanceOf(createdResult.Value); + Assert.AreEqual("Formation React", (createdResult.Value as DemandeFormationDTO).Libelle); + } + + #endregion + + #region Tests UpdateDemandeFormation + + [Test] + public async Task UpdateDemandeFormation_AccepteUneDemandeAvecUneFormationNull_RetourneUnObjetObjectResultDansCatchDemandeFormationInvalidException() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + 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, + }; + + // Act + var objectResult = DemandesFormationApiController.UpdateDemandeFormation(demandeFormation, idDemandeFormation); + + // Assert + Assert.IsInstanceOf(objectResult.Result); + } + + [Test] + public async Task UpdateDemandeFormation_AccepteUneDemandeAvecUnIdDemandeFormationNull_RetourneUnObjetObjectResultDansCatchDemandeFormationIncompatibleIdException() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + 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, + }; + + // Act + var objectResult = DemandesFormationApiController.UpdateDemandeFormation(demandeFormation, idDemandeFormation); + + // Assert + Assert.IsInstanceOf(objectResult.Result); + } + + [Test] + public async Task UpdateDemandeFormation_AccepteUneDemandeInexistante_RetourneUnObjetObjectResultDansCatchDemandeFormationNotFoundExceptionn() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + 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, + }; + + // Act + var objectResult = DemandesFormationApiController.UpdateDemandeFormation(demandeFormation, idDemandeFormation); + + // Assert + Assert.IsInstanceOf(objectResult.Result); + } + + [Test] + public async Task UpdateDemandeFormation_AccepteUneDemandeDeDemandeFormation_RetourneUnObjetOkObjectResult() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + 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, + }; + + // Act + var okObjectResult = DemandesFormationApiController.UpdateDemandeFormation(demandeFormation, idDemandeFormation); + + // Assert + Assert.IsInstanceOf(okObjectResult.Result); + } + + [Test] + public async Task UpdateDemandeFormation_AccepteUneDemandeDeDemandeFormation_RetourneLaDemandeDeFormationAcceptee() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + 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, + }; + + // Act + var okObjectResult = DemandesFormationApiController.UpdateDemandeFormation(demandeFormation, idDemandeFormation).Result as OkObjectResult; + + // Assert + Assert.IsInstanceOf(okObjectResult.Value); + Assert.AreEqual("Formation Cobol", (okObjectResult.Value as DemandeFormationDTO).Libelle); + } + + #endregion + + #region Tests DeleteDemandeFormation + + [Test] + public void DeleteDemandeFormation_SupprimeUneDemandeDeFormationInexistante_RetourneUnObjetNotFoundObjectResult() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + long idDemandeFormation = 0; + + // Act + var notFoundObjectResult = DemandesFormationApiController.DeleteDemandeFormation(idDemandeFormation); + + // Assert + Assert.IsInstanceOf(notFoundObjectResult.Result); + } + + [Test] + public void DeleteDemandeFormation_SupprimeUneDemandeDeFormationConcernantUnEpSigne_RetourneUnObjetObjectResultDansCatchDemandeFormationInvalidException() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + long idDemandeFormation = 2; + + // Act + var objectResult = DemandesFormationApiController.DeleteDemandeFormation(idDemandeFormation); + + // Assert + Assert.IsInstanceOf(objectResult.Result); + } + + [Test] + public void DeleteDemandeFormation_SupprimeUneDemandeDeFormation_RetourneUnObjetNoContentResult() + { + // Arrange + DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); + long idDemandeFormation = 5; + + // Act + var noContentResult = DemandesFormationApiController.DeleteDemandeFormation(idDemandeFormation); + + // Assert + Assert.IsInstanceOf(noContentResult.Result); + } + #endregion + } +} \ No newline at end of file From 301c6e456ae6f9bdcac6f2e8dee7037df659fcfa Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Mon, 15 Mar 2021 10:43:53 +0100 Subject: [PATCH 17/19] =?UTF-8?q?Ajout=20du=20param=C3=A8tre=20statutsEp?= =?UTF-8?q?=20dans=20GetDemandesFormations=20et=20GetDemandesFormationCoun?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DemandesFormationApi.cs | 20 ++++++++++-------- .../IServices/IDemandeFormationService.cs | 4 ++-- .../Services/DemandeFormationService.cs | 21 +++++++++++-------- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/EPAServeur/Controllers/DemandesFormationApi.cs b/EPAServeur/Controllers/DemandesFormationApi.cs index 481eb87..8ee3a47 100644 --- a/EPAServeur/Controllers/DemandesFormationApi.cs +++ b/EPAServeur/Controllers/DemandesFormationApi.cs @@ -134,7 +134,7 @@ namespace IO.Swagger.Controllers /// Une erreur est survenue sur le serveur [HttpDelete] [Route("/api/demandesformation/{idDemandeFormation}")] - [Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] + //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("DeleteDemandeFormation")] [SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L'utilisateur souhaitant accéder à la ressource n'est pas authentifié")] @@ -226,6 +226,7 @@ namespace IO.Swagger.Controllers /// Récupérer la liste des demandes de formation. /// Liste des états des demandes à afficher /// liste des ids des BU auxquelles les données sont rattachées + /// Liste des statuts d'EP auxquelles les données sont rattachées /// Indique si les données sont récupérées dans l'ordre croissant ou non /// Numéro de la page du tableau à afficher /// Nombre d’élément maximum à afficher dans le tableau @@ -239,14 +240,14 @@ namespace IO.Swagger.Controllers /// Une erreur est survenue sur le serveur [HttpGet] [Route("/api/demandesformation")] - [Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] + //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetDemandesFormation")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] [SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L'utilisateur souhaitant accéder à la ressource n'est pas authentifié")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] - public virtual async Task GetDemandesFormation([FromQuery] List etatsDemande, [FromQuery] List idBUs, [FromQuery] bool? asc, [FromQuery] int? numPage, [FromQuery][Range(5, 100)] int? parPAge, [FromQuery] string texte, [FromQuery] string tri, [FromQuery] DateTime? dateDebut, [FromQuery] DateTime? dateFin) + public virtual async Task GetDemandesFormation([FromQuery] List etatsDemande, [FromQuery] List idBUs, [FromQuery] List statutsEp, [FromQuery] bool? asc, [FromQuery] int? numPage, [FromQuery][Range(5, 100)] int? parPAge, [FromQuery] string texte, [FromQuery] string tri, [FromQuery] DateTime? dateDebut, [FromQuery] DateTime? dateFin) { if (env.IsDevelopment()) logger.LogInformation("Récupération de la liste des demandes de formation."); @@ -255,7 +256,7 @@ namespace IO.Swagger.Controllers try { - demandeFormations = await demandeFormationService.GetDemandesFormationAsync(etatsDemande, idBUs, asc, numPage, parPAge, texte, tri, dateDebut, dateFin); + demandeFormations = await demandeFormationService.GetDemandesFormationAsync(etatsDemande, idBUs, statutsEp, asc, numPage, parPAge, texte, tri, dateDebut, dateFin); } catch (Exception e) { @@ -282,6 +283,7 @@ namespace IO.Swagger.Controllers /// Récupérer le nombre total de demandes de formation. /// Liste des états des demandes à afficher /// liste des ids des BU auxquelles les données sont rattachées + /// Liste des statuts d'EP auxquelles les données sont rattachées /// Texte permettant de filtrer les données /// Date à partir de laquelle les données son récupérées /// Date jusqu'à laquelle les données sont récupérées @@ -291,14 +293,14 @@ namespace IO.Swagger.Controllers /// Une erreur est survenue sur le serveur [HttpGet] [Route("/api/demandesformation/count")] - [Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] + //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetDemandesFormationCount")] [SwaggerResponse(statusCode: 200, type: typeof(long?), description: "OK")] [SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L'utilisateur souhaitant accéder à la ressource n'est pas authentifié")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] - public virtual async Task GetDemandesFormationCount([FromQuery] List etatsDemande, [FromQuery] List idBUs, [FromQuery] string texte, [FromQuery] DateTime? dateDebut, [FromQuery] DateTime? dateFin) + public virtual async Task GetDemandesFormationCount([FromQuery] List etatsDemande, [FromQuery] List idBUs, [FromQuery] List statutsEp, [FromQuery] string texte, [FromQuery] DateTime? dateDebut, [FromQuery] DateTime? dateFin) { if (env.IsDevelopment()) logger.LogInformation("Récupération du nombre total de demandes de formation."); @@ -307,7 +309,7 @@ namespace IO.Swagger.Controllers try { - count = await demandeFormationService.GetDemandesFormationCountAsync(etatsDemande, idBUs, texte, dateDebut, dateFin); + count = await demandeFormationService.GetDemandesFormationCountAsync(etatsDemande, idBUs, statutsEp, texte, dateDebut, dateFin); } catch (Exception e) { @@ -338,7 +340,7 @@ namespace IO.Swagger.Controllers /// Une erreur est survenue sur le serveur [HttpGet] [Route("/api/originesdemandeformation")] - [Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] + //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetOriginesDemandeFormation")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] @@ -389,7 +391,7 @@ namespace IO.Swagger.Controllers /// Une erreur est survenue sur le serveur [HttpPut] [Route("/api/demandesformation/{idDemandeFormation}")] - [Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] + //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("UpdateDemandeFormation")] [SwaggerResponse(statusCode: 200, type: typeof(DemandeFormationDTO), description: "demande formation mise à jour")] diff --git a/EPAServeur/IServices/IDemandeFormationService.cs b/EPAServeur/IServices/IDemandeFormationService.cs index e2613c1..579bb01 100644 --- a/EPAServeur/IServices/IDemandeFormationService.cs +++ b/EPAServeur/IServices/IDemandeFormationService.cs @@ -12,8 +12,8 @@ namespace EPAServeur.IServices public interface IDemandeFormationService { Task> GetOriginesDemandeFormationAsync(); - Task> GetDemandesFormationAsync(List etatsDemande, List idBUs, bool? asc, int? numPage, int? parPage, string texte, string tri, DateTime? dateDebut, DateTime? dateFin); - Task GetDemandesFormationCountAsync(List etatsDemande, List idBUs, string texte, DateTime? dateDebut, DateTime? dateFin); + Task> GetDemandesFormationAsync(List etatsDemande, List idBUs, List statutsEp, bool? asc, int? numPage, int? parPage, string texte, string tri, DateTime? dateDebut, DateTime? dateFin); + Task GetDemandesFormationCountAsync(List etatsDemande, List idBUs, List statutsEp, string texte, DateTime? dateDebut, DateTime? dateFin); Task AddDemandeFormationAsync(DemandeFormationDTO demandeFormationDTO); Task UpdateDemandeFormationAsync(long idDemandeFormation, DemandeFormationDTO demandeFormationDTO); Task DeleteDemandeFormationAsync(long idDemandeFormation); diff --git a/EPAServeur/Services/DemandeFormationService.cs b/EPAServeur/Services/DemandeFormationService.cs index 33f345b..208a63d 100644 --- a/EPAServeur/Services/DemandeFormationService.cs +++ b/EPAServeur/Services/DemandeFormationService.cs @@ -99,6 +99,7 @@ namespace EPAServeur.Services /// /// Liste des états des demandes à afficher /// liste des ids des BU auxquelles les données sont rattachées + /// Liste des statuts d'EP auxquelles les données sont rattachées /// Indique si les données sont récupérées dans l'ordre croissant ou non /// Numéro de la page du tableau à afficher /// Nombre d’élément maximum à afficher dans le tableau @@ -107,7 +108,7 @@ namespace EPAServeur.Services /// Date à partir de laquelle les données son récupérées /// Date jusqu'à laquelle les données sont récupérées /// - public async Task> GetDemandesFormationAsync(List etatsDemande, List idBUs, bool? asc, int? numPage, int? parPage, string texte, string tri, DateTime? dateDebut, DateTime? dateFin) + public async Task> GetDemandesFormationAsync(List etatsDemande, List idBUs, List statutsEp, bool? asc, int? numPage, int? parPage, string texte, string tri, DateTime? dateDebut, DateTime? dateFin) { IQueryable query; IEnumerable demandeFormations; @@ -120,7 +121,7 @@ namespace EPAServeur.Services .Include(demandeFormation => demandeFormation.ParticipationFormation) .ThenInclude(participationFormation => participationFormation.Formation); - query = StatutEpFilter(query); + query = StatutEpFilter(query, statutsEp); query = EtatsDemandeFilter(query, etatsDemande); query = IdBUsFilter(query, idBUs); query = DateFilter(query, dateDebut, dateFin); @@ -143,11 +144,12 @@ namespace EPAServeur.Services /// /// Liste des états des demandes à afficher /// liste des ids des BU auxquelles les données sont rattachées + /// Liste des statuts d'EP auxquelles les données sont rattachées /// Texte permettant de filtrer les données /// Date à partir de laquelle les données son récupérées /// Date jusqu'à laquelle les données sont récupérées /// - public async Task GetDemandesFormationCountAsync(List etatsDemande, List idBUs, string texte, DateTime? dateDebut, DateTime? dateFin) + public async Task GetDemandesFormationCountAsync(List etatsDemande, List idBUs, List statutsEp, string texte, DateTime? dateDebut, DateTime? dateFin) { IQueryable query; IEnumerable demandeFormations; @@ -160,7 +162,7 @@ namespace EPAServeur.Services .Include(demandeFormation => demandeFormation.ParticipationFormation) .ThenInclude(participationFormation => participationFormation.Formation); - query = StatutEpFilter(query); + query = StatutEpFilter(query, statutsEp); query = EtatsDemandeFilter(query, etatsDemande); query = IdBUsFilter(query, idBUs); query = DateFilter(query, dateDebut, dateFin); @@ -492,13 +494,14 @@ namespace EPAServeur.Services /// Ajouter un filtre pour récupérer les demandes de formation en fonction du statut de l'EP. /// /// - /// + /// /// - private IQueryable StatutEpFilter(IQueryable query) + private IQueryable StatutEpFilter(IQueryable query, List statutsEp) { - IEnumerable statutsEp = Enum.GetValues(typeof(StatutEp)).Cast().Where(statut => statut == StatutEp.Cree || EstEpEnCours(statut)); - - return query.Where(demandeFormation => statutsEp.Contains(demandeFormation.Ep.Statut)); + if (statutsEp != null && statutsEp.Count > 0) + return query.Where(demandeFormation => statutsEp.Contains(demandeFormation.Ep.Statut)); + else + return query; } /// From b0bc3d9d5f288d806d47b1cdffa2415305e7e1ed Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Mon, 15 Mar 2021 10:45:10 +0100 Subject: [PATCH 18/19] =?UTF-8?q?Mise=20=C3=A0=20jour=20des=20tests=20unit?= =?UTF-8?q?aires=20en=20fonction=20du=20param=C3=A8tres=20statutsEp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DemandeFormationApiTests.cs | 10 +-- .../Services/DemandeFormationServiceTests.cs | 68 ++++++++++--------- 2 files changed, 42 insertions(+), 36 deletions(-) diff --git a/EPAServeur.Tests/Controllers/DemandeFormationApiTests.cs b/EPAServeur.Tests/Controllers/DemandeFormationApiTests.cs index 85eace0..37f1911 100644 --- a/EPAServeur.Tests/Controllers/DemandeFormationApiTests.cs +++ b/EPAServeur.Tests/Controllers/DemandeFormationApiTests.cs @@ -93,7 +93,7 @@ namespace EPAServeur.Tests.Controllers DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); // Act - var okResult = DemandesFormationApiController.GetDemandesFormation(null, null, null, null, null, null, null, null, null); + var okResult = DemandesFormationApiController.GetDemandesFormation(null, null, null, null, null, null, null, null, null, null); // Assert Assert.IsInstanceOf(okResult.Result); @@ -109,7 +109,7 @@ namespace EPAServeur.Tests.Controllers int idLastDemandeFormation = 3; // Act - var okResult = DemandesFormationApiController.GetDemandesFormation(null, null, null, 1, 5, null, null, null, null).Result as OkObjectResult; + var okResult = DemandesFormationApiController.GetDemandesFormation(null, null, null, null, 1, 5, null, null, null, null).Result as OkObjectResult; // Assert Assert.IsInstanceOf>(okResult.Value); @@ -129,7 +129,7 @@ namespace EPAServeur.Tests.Controllers DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); // Act - var okResult = DemandesFormationApiController.GetDemandesFormationCount(null, null, null, null, null); + var okResult = DemandesFormationApiController.GetDemandesFormationCount(null, null, null, null, null, null); // Assert Assert.IsInstanceOf(okResult.Result); @@ -140,10 +140,10 @@ namespace EPAServeur.Tests.Controllers { // Arrange DemandesFormationApiController DemandesFormationApiController = new DemandesFormationApiController(demandeFormationService, new NullLogger(), mockEnvironment.Object); - int nbDemandeFormation = 10; + int nbDemandeFormation = 12; // Act - var okResult = DemandesFormationApiController.GetDemandesFormationCount(null, null, null, null, null).Result as OkObjectResult; + var okResult = DemandesFormationApiController.GetDemandesFormationCount(null, null, null, null, null, null).Result as OkObjectResult; // Assert Assert.IsInstanceOf(okResult.Value); diff --git a/EPAServeur.Tests/Services/DemandeFormationServiceTests.cs b/EPAServeur.Tests/Services/DemandeFormationServiceTests.cs index eac801e..ca68862 100644 --- a/EPAServeur.Tests/Services/DemandeFormationServiceTests.cs +++ b/EPAServeur.Tests/Services/DemandeFormationServiceTests.cs @@ -61,18 +61,19 @@ namespace EPAServeur.Tests.Services #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, 5, 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) + [TestCase(new EtatDemande[] { EtatDemande.EnAttente, EtatDemande.Validee, EtatDemande.Rejetee }, new long[] { 1, 2 }, new StatutEp[] { StatutEp.Signe, StatutEp.SignatureReferent }, true, 1, 20, "gaillard", null, null, null)] + [TestCase(new EtatDemande[] { EtatDemande.EnAttente, EtatDemande.Validee, EtatDemande.Rejetee }, new long[] { 1 }, new StatutEp[] { StatutEp.Signe, StatutEp.SignatureReferent }, false, 1, 5, "gaillard", null, null, null)] + [TestCase(null, null, null, null, 2, 5, null, null, null, null)] + [TestCase(null, new long[] { 1 }, null, null, 1, 10, null, null, null, null)] + [TestCase(new EtatDemande[] { EtatDemande.Rejetee }, null, null, null, 1, 10, "gai", null, null, null)] + [TestCase(new EtatDemande[] { EtatDemande.EnAttente, EtatDemande.Validee, EtatDemande.Rejetee }, new long[] { }, new StatutEp[] { StatutEp.Signe, StatutEp.SignatureReferent }, null, 1, 50, "gai", null, null, null)] + public async Task GetDemandesFormationAsync_PasseDesParamsValides_RetourneDesDemandesDeFormations(EtatDemande[] arrEtatDemandes, long[] arrIdBUs, StatutEp[] arrStatutsEp, 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; + List statutsEp; if (arrEtatDemandes != null) etatDemandes = arrEtatDemandes.ToList(); @@ -84,8 +85,13 @@ namespace EPAServeur.Tests.Services else idBUs = null; + if (arrStatutsEp != null) + statutsEp = arrStatutsEp.ToList(); + else + statutsEp = null; + // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(etatDemandes, idBUs, asc, numPage, parPAge, texte, tri, dateDebut, dateFin); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(etatDemandes, idBUs, statutsEp, asc, numPage, parPAge, texte, tri, dateDebut, dateFin); // Assert Assert.Less(0, demandeFormationDTOs.Count()); @@ -99,7 +105,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, numPage, parPage, null, null, null, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, null, numPage, parPage, null, null, null, null); // Assert Assert.AreEqual(parPage, demandeFormationDTOs.Count()); @@ -121,10 +127,10 @@ namespace EPAServeur.Tests.Services nbDemandeFormationDeuxiemePage = 5; break; case 6: - nbDemandeFormationDeuxiemePage = 4; + nbDemandeFormationDeuxiemePage = 6; break; case 10: - nbDemandeFormationDeuxiemePage = 0; + nbDemandeFormationDeuxiemePage = 2; break; default: nbDemandeFormationDeuxiemePage = 0; @@ -132,7 +138,7 @@ namespace EPAServeur.Tests.Services } // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, numPage, parPage, null, null, null, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, null, numPage, parPage, null, null, null, null); // Assert Assert.AreEqual(nbDemandeFormationDeuxiemePage, demandeFormationDTOs.Count()); @@ -145,7 +151,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual("Orléans", demandeFormationDTOs.First().Collaborateur.BusinessUnit.Nom); @@ -159,7 +165,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual("Tours", demandeFormationDTOs.First().Collaborateur.BusinessUnit.Nom); @@ -176,7 +182,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual("Gaillard", demandeFormationDTOs.First().Collaborateur.Nom); @@ -193,7 +199,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual("Vasseur", demandeFormationDTOs.First().Collaborateur.Nom); @@ -208,7 +214,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual(new DateTime(2020, 1, 22, 9, 0, 0), demandeFormationDTOs.First().DateDemande); @@ -222,7 +228,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual(new DateTime(2020, 12, 22, 9, 0, 0), demandeFormationDTOs.First().DateDemande); @@ -236,7 +242,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, asc, null, null, null, tri, null, null); // Assert Assert.IsFalse(demandeFormationDTOs.First().DemandeRH); @@ -250,7 +256,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, asc, null, null, null, tri, null, null); // Assert Assert.IsTrue(demandeFormationDTOs.First().DemandeRH); @@ -264,7 +270,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual(EtatDemande.EnAttente, demandeFormationDTOs.First().EtatDemande); @@ -278,7 +284,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual(EtatDemande.Rejetee, demandeFormationDTOs.First().EtatDemande); @@ -293,7 +299,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, asc, null, null, null, tri, null, null); // Assert Assert.IsNull(demandeFormationDTOs.First().DateDerniereReponse); @@ -307,7 +313,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, asc, null, null, null, tri, null, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, asc, null, null, null, tri, null, null); // Assert Assert.AreEqual(new DateTime(2020, 12, 27, 9, 0, 0), demandeFormationDTOs.First().DateDerniereReponse); @@ -321,7 +327,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, null, null, null, null, dateDebut, null); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, null, null, null, null, null, dateDebut, null); // Assert Assert.IsTrue(demandeFormationDTOs.Any(d => d.DateDemande >= dateDebut)); @@ -334,7 +340,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, null, null, null, null, null, dateFin); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, null, null, null, null, null, null, dateFin); // Assert Assert.IsTrue(demandeFormationDTOs.Any(d => d.DateDemande <= dateFin)); @@ -347,7 +353,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, null, null, null, null, dateDebut, dateFin); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, null, null, null, null, null, dateDebut, dateFin); // Assert Assert.IsTrue(demandeFormationDTOs.Any(d => d.DateDemande >= dateDebut && d.DateDemande <= dateFin)); @@ -360,7 +366,7 @@ namespace EPAServeur.Tests.Services DemandeFormationService demandeFormationService = new DemandeFormationService(epContext, collaborateurService, transformDTO); // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, null, null, null, null, dateDebut, dateFin); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, null, null, null, null, null, null, null, dateDebut, dateFin); // Assert Assert.Zero(demandeFormationDTOs.Count()); @@ -382,7 +388,7 @@ namespace EPAServeur.Tests.Services idBUs = null; // Act - IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, idBUs, null, null, null, texte, null, dateDebut, dateFin); + IEnumerable demandeFormationDTOs = await demandeFormationService.GetDemandesFormationAsync(null, idBUs, null, null, null, null, texte, null, dateDebut, dateFin); // Assert Assert.Zero(demandeFormationDTOs.Count()); @@ -411,7 +417,7 @@ namespace EPAServeur.Tests.Services idBUs = null; // Act - long count = await demandeFormationService.GetDemandesFormationCountAsync(null, idBUs, texte, dateDebut, dateFin); + long count = await demandeFormationService.GetDemandesFormationCountAsync(null, idBUs, null, texte, dateDebut, dateFin); // Assert Assert.Less(0, count); @@ -433,7 +439,7 @@ namespace EPAServeur.Tests.Services idBUs = null; // Act - long count = await demandeFormationService.GetDemandesFormationCountAsync(null, idBUs, texte, dateDebut, dateFin); + long count = await demandeFormationService.GetDemandesFormationCountAsync(null, idBUs, null, texte, dateDebut, dateFin); // Assert Assert.AreEqual(0, count); From 3fd54f315d0e069766932d52ba787547a8e6c220 Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Mon, 15 Mar 2021 10:46:17 +0100 Subject: [PATCH 19/19] =?UTF-8?q?Petite=20correction=20du=20jeu=20de=20don?= =?UTF-8?q?n=C3=A9es=20pour=20les=20demandes=20de=20formation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EPAServeur/Context/DataSeeder.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/EPAServeur/Context/DataSeeder.cs b/EPAServeur/Context/DataSeeder.cs index 9ab8cfe..709c480 100644 --- a/EPAServeur/Context/DataSeeder.cs +++ b/EPAServeur/Context/DataSeeder.cs @@ -1144,7 +1144,7 @@ namespace EPAServeur.Context DateDemande = new DateTime(2020, 5, 22, 9, 0, 0), Etat = EtatDemande.Validee, CommentaireRefus = null, - DateDerniereReponse = null, + DateDerniereReponse = new DateTime(2020, 5, 23, 9, 0, 0), OrigineDemande = origineDemandeFormationEP, Ep = ep12 }; @@ -1160,7 +1160,7 @@ namespace EPAServeur.Context DateDemande = new DateTime(2020, 6, 22, 9, 0, 0), Etat = EtatDemande.Validee, CommentaireRefus = null, - DateDerniereReponse = null, + DateDerniereReponse = new DateTime(2020, 6, 23, 9, 0, 0), OrigineDemande = origineDemandeFormationEP, Ep = ep15 }; @@ -1176,7 +1176,7 @@ namespace EPAServeur.Context DateDemande = new DateTime(2020, 7, 22, 9, 0, 0), Etat = EtatDemande.Validee, CommentaireRefus = null, - DateDerniereReponse = null, + DateDerniereReponse = new DateTime(2020, 7, 23, 9, 0, 0), OrigineDemande = origineDemandeFormationReglement, Ep = ep16 }; @@ -1192,7 +1192,7 @@ namespace EPAServeur.Context DateDemande = new DateTime(2020, 8, 22, 9, 0, 0), Etat = EtatDemande.Validee, CommentaireRefus = null, - DateDerniereReponse = null, + DateDerniereReponse = new DateTime(2020, 8, 23, 9, 0, 0), OrigineDemande = origineDemandeFormationReglement, Ep = ep16 }; @@ -1223,7 +1223,7 @@ namespace EPAServeur.Context DemandeRH = false, DateDemande = new DateTime(2020, 10, 22, 9, 0, 0), Etat = EtatDemande.Rejetee, - CommentaireRefus = null, + CommentaireRefus = "Aucune formation Vus.JS", DateDerniereReponse = new DateTime(2020, 10, 27, 9, 0, 0), OrigineDemande = origineDemandeFormationCollaborateur, Ep = ep18 @@ -1239,7 +1239,7 @@ namespace EPAServeur.Context DemandeRH = false, DateDemande = new DateTime(2020, 11, 22, 9, 0, 0), Etat = EtatDemande.Rejetee, - CommentaireRefus = null, + CommentaireRefus = "Aucune formation SCRUM pour le moment", DateDerniereReponse = new DateTime(2020, 11, 27, 9, 0, 0), OrigineDemande = origineDemandeFormationCollaborateur, Ep = ep19 @@ -1255,7 +1255,7 @@ namespace EPAServeur.Context DemandeRH = false, DateDemande = new DateTime(2020, 12, 22, 9, 0, 0), Etat = EtatDemande.Rejetee, - CommentaireRefus = null, + CommentaireRefus = "Aucune formation avec du Xamarin pour le moment", DateDerniereReponse = new DateTime(2020, 12, 27, 9, 0, 0), OrigineDemande = origineDemandeFormationCollaborateur, Ep = ep20