diff --git a/EPAServeur.Tests/Services/NoteServiceTests.cs b/EPAServeur.Tests/Services/NoteServiceTests.cs new file mode 100644 index 0000000..762f0a1 --- /dev/null +++ b/EPAServeur.Tests/Services/NoteServiceTests.cs @@ -0,0 +1,327 @@ +using EPAServeur.Context; +using EPAServeur.Exceptions; +using EPAServeur.IServices; +using EPAServeur.Models.Notes; +using EPAServeur.Services; +using IO.Swagger.ApiCollaborateur; +using IO.Swagger.DTO; +using Microsoft.EntityFrameworkCore; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace EPAServeur.Tests.Services +{ + [TestFixture] + public class NoteServiceTests + { + #region Variables + private EpContext context; + private ICollaborateurApi collaborateurApi; + private ICollaborateurService collaborateurService; + private Guid? auteur1, auteur2, auteur3; + private Guid? collaborateur1, collaborateur2, collaborateur3; + private Guid? auteurNonExistant, collaborateurNonExistant, collaborateurParti, referentParti; + #endregion + + #region Setup + [SetUp] + public void Setup() + { + // Utilisation d'une base de données en mémoire + var optionBuider = new DbContextOptionsBuilder() + .UseInMemoryDatabase("server_ep_test") + .Options; + + context = new EpContext(optionBuider); + + context.Database.EnsureDeleted(); + context.Database.EnsureCreated(); + context.SaveChanges(); + + // Ajout du jeu de données pour les tests + DataSeeder.AddNotes(context); + + // Détache les entités du context car la base de données InMemory créé des conflits + // entre les clés primaires lors d'un Update ou d'un Insert + foreach (var entity in context.ChangeTracker.Entries()) + { + entity.State = EntityState.Detached; + } + collaborateurApi = new CollaborateurApi(); + collaborateurService = new CollaborateurService(collaborateurApi, context); + + + auteur1 = new Guid("ecf528c3-e509-402f-87bb-c8821467e350"); + auteur2 = new Guid("6aa62dcb-f7c9-4c0c-af40-e934a4d6a7eb"); + auteur3 = new Guid("571463f3-b286-4a21-9eab-0707dc506dec"); + + collaborateur1 = new Guid("92b29b9c-40a4-4aa0-9412-bc97a379e52f"); + collaborateur2 = new Guid("006226f6-51b2-4a02-a302-7447f7fccc04"); + collaborateur3 = new Guid("e5d36da4-df16-4d19-8a11-1ba2f6efc80c"); + + auteurNonExistant = collaborateurNonExistant = new Guid("397f616e-44ff-11eb-b378-0242ac130002"); + collaborateurParti = new Guid("3c99214d-0a5e-4bb6-b7b2-7d9bb8143c50"); + referentParti = new Guid("0021430f-9cb5-4d7e-a395-904c95421920"); + + } + #endregion + + + #region Test AjouterNote + [Test] + public async Task AjouterNote_Ajouter4NoteAvecSucces() + { + + + // récupérer les collaborateurs liés aux notes + CollaborateurDTO collaborateur1DTO = await collaborateurService.GetCollaborateurByIdAsync(collaborateur1); + CollaborateurDTO collaborateur2DTO = await collaborateurService.GetCollaborateurByIdAsync(collaborateur2); + CollaborateurDTO collaborateur3DTO = await collaborateurService.GetCollaborateurByIdAsync(collaborateur3); + + INoteService noteService = new NoteService(collaborateurApi, collaborateurService, context); + DateTime date = DateTime.Now; + + DetailsNoteDTO noteAjoutee1, noteAjoutee2; + Note noteAjoutee3, noteAjoutee4; + + DetailsNoteDTO nouvelleNote1 = new DetailsNoteDTO() + { + Collaborateur = collaborateur1DTO, + DateCreation = date, + DateMiseAjour = date, + IdAuteur = auteur1, + Texte = "Texte nouvelle note 11", + Titre = "Titre nouvelle note 11" + }; + + noteAjoutee1 = await noteService.AjouterNoteAsync(nouvelleNote1); + + DetailsNoteDTO nouvelleNote2 = new DetailsNoteDTO() + { + Collaborateur = collaborateur2DTO, + DateCreation = date, + DateMiseAjour = date, + IdAuteur = auteur2, + Texte = "Texte nouvelle note 12", + Titre = "Titre nouvelle note 12" + }; + + noteAjoutee2 = await noteService.AjouterNoteAsync(nouvelleNote2); + + DetailsNoteDTO nouvelleNote3 = new DetailsNoteDTO() + { + Collaborateur = collaborateur3DTO, + DateCreation = date, + DateMiseAjour = date, + IdAuteur = auteur3, + Texte = "Texte nouvelle note 13", + Titre = "Titre nouvelle note 13", + }; + + await noteService.AjouterNoteAsync(nouvelleNote3); + noteAjoutee3 = await context.Note.FindAsync((long)13); + + DetailsNoteDTO nouvelleNote4 = new DetailsNoteDTO() + { + Collaborateur = collaborateur3DTO, + DateCreation = date, + DateMiseAjour = date, + IdAuteur = auteur1, + Texte = "Texte nouvelle note 14", + Titre = "Titre nouvelle note 14" + }; + + await noteService.AjouterNoteAsync(nouvelleNote4); + noteAjoutee4 = await context.Note.FindAsync((long)14); + + + //Assert note 1 + Assert.IsNotNull(noteAjoutee1); + Assert.AreEqual(11, noteAjoutee1.Id); + Assert.AreEqual(nouvelleNote1.IdAuteur, noteAjoutee1.IdAuteur); + Assert.AreEqual(nouvelleNote1.DateCreation, noteAjoutee1.DateCreation); + Assert.AreEqual(nouvelleNote1.Collaborateur.Id, noteAjoutee1.Collaborateur.Id); + Assert.AreEqual(nouvelleNote1.Titre, noteAjoutee1.Titre); + Assert.AreEqual(nouvelleNote1.Texte, noteAjoutee1.Texte); + Assert.AreEqual(nouvelleNote1.DateMiseAjour, noteAjoutee1.DateMiseAjour); + Assert.AreEqual(nouvelleNote1.DateCreation, noteAjoutee1.DateCreation); + + + + //Assert note 2 + Assert.IsNotNull(noteAjoutee2); + Assert.AreEqual(12, noteAjoutee2.Id); + Assert.AreEqual(nouvelleNote2.IdAuteur, noteAjoutee2.IdAuteur); + Assert.AreEqual(nouvelleNote2.DateCreation, noteAjoutee2.DateCreation); + Assert.AreEqual(nouvelleNote2.Collaborateur.Id, noteAjoutee2.Collaborateur.Id); + Assert.AreEqual(nouvelleNote2.Titre, noteAjoutee2.Titre); + Assert.AreEqual(nouvelleNote2.Texte, noteAjoutee2.Texte); + Assert.AreEqual(nouvelleNote2.DateMiseAjour, noteAjoutee2.DateMiseAjour); + Assert.AreEqual(nouvelleNote2.DateCreation, noteAjoutee2.DateCreation); + + + //Assert note 3 + Assert.IsNotNull(noteAjoutee3); + Assert.AreEqual(13, noteAjoutee3.IdNote); + Assert.AreEqual(nouvelleNote3.IdAuteur, noteAjoutee3.IdAuteur); + Assert.AreEqual(nouvelleNote3.DateCreation, noteAjoutee3.DateCreation); + Assert.AreEqual(nouvelleNote3.Collaborateur.Id, noteAjoutee3.IdCollaborateur); + Assert.AreEqual(nouvelleNote3.Titre, noteAjoutee3.Titre); + Assert.AreEqual(nouvelleNote3.Texte, noteAjoutee3.Texte); + Assert.AreEqual(nouvelleNote3.DateMiseAjour, noteAjoutee3.DateMiseAJour); + Assert.AreEqual(nouvelleNote3.DateCreation, noteAjoutee3.DateCreation); + + + + //Assert note 4 + Assert.IsNotNull(noteAjoutee4); + Assert.AreEqual(14, noteAjoutee4.IdNote); + Assert.AreEqual(nouvelleNote4.IdAuteur, noteAjoutee4.IdAuteur); + Assert.AreEqual(nouvelleNote4.DateCreation, noteAjoutee4.DateCreation); + Assert.AreEqual(nouvelleNote4.Collaborateur.Id, noteAjoutee4.IdCollaborateur); + Assert.AreEqual(nouvelleNote4.Titre, noteAjoutee4.Titre); + Assert.AreEqual(nouvelleNote4.Texte, noteAjoutee4.Texte); + Assert.AreEqual(nouvelleNote4.DateMiseAjour, noteAjoutee4.DateMiseAJour); + Assert.AreEqual(nouvelleNote4.DateCreation, noteAjoutee4.DateCreation); + + + } + + + [TestCase("", "")] + [TestCase("Titre 2", "")] + [TestCase("", "Texte 3")] + [TestCase("Titre 3", "Te")] + [TestCase("T", "Texte 4")] + [TestCase("T", "T")] + public async Task AjouterNote_NoteInvalideException(string titre, string texte) + { + + + CollaborateurDTO collaborateurDTO = await collaborateurService.GetCollaborateurByIdAsync(collaborateur1); + + INoteService noteService = new NoteService(collaborateurApi, collaborateurService, context); + DateTime date = DateTime.Now; + + DetailsNoteDTO noteAjoutee1 = new DetailsNoteDTO() + { + Collaborateur = collaborateurDTO, + DateCreation = date, + DateMiseAjour = date, + IdAuteur = auteur1, + Texte = texte, + Titre = titre, + }; + + AsyncTestDelegate exception = () => noteService.AjouterNoteAsync(noteAjoutee1); + + Assert.ThrowsAsync(typeof(NoteInvalideException), exception); + } + + [Test] + public async Task AjouterNote_ReferentNotFoundException() + { + CollaborateurDTO collaborateurDTO = await collaborateurService.GetCollaborateurByIdAsync(collaborateur1); + + INoteService noteService = new NoteService(collaborateurApi, collaborateurService, context); + DateTime date = DateTime.Now; + + DetailsNoteDTO note = new DetailsNoteDTO() + { + Collaborateur = collaborateurDTO, + DateCreation = date, + DateMiseAjour = date, + IdAuteur = auteurNonExistant, + Texte = "Texte nouvelle note", + Titre = "Titre nouvelle note" + }; + + AsyncTestDelegate exception = () => noteService.AjouterNoteAsync(note); + Assert.ThrowsAsync(typeof(ReferentNotFoundException), exception); + } + + [Test] + public async Task AjouterNote_CollaborateurNotFoundException() + { + CollaborateurDTO collaborateurDTO = await collaborateurService.GetCollaborateurByIdAsync(collaborateur1); + collaborateurDTO.Id = collaborateurNonExistant; + + INoteService noteService = new NoteService(collaborateurApi, collaborateurService, context); + DateTime date = DateTime.Now; + + DetailsNoteDTO note = new DetailsNoteDTO() + { + Collaborateur = collaborateurDTO, + DateCreation = date, + DateMiseAjour = date, + IdAuteur = auteur1, + Texte = "Texte nouvelle note", + Titre = "Titre nouvelle note" + }; + + AsyncTestDelegate exception = () => noteService.AjouterNoteAsync(note); + Assert.ThrowsAsync(typeof(CollaborateurNotFoundException), exception); + } + + + //[Test] + [Test] + public async Task AjouterNote_CollaborateurPartiException() + { + CollaborateurDTO collaborateurDTO = await collaborateurService.GetCollaborateurByIdAsync(collaborateur1); + CollaborateurDTO collaborateurPartiDTO = await collaborateurService.GetCollaborateurByIdAsync(collaborateurParti); + + INoteService noteService = new NoteService(collaborateurApi, collaborateurService, context); + DateTime date = DateTime.Now; + + + DetailsNoteDTO note1 = new DetailsNoteDTO() + { + Collaborateur = collaborateurDTO, + DateCreation = date, + DateMiseAjour = date, + IdAuteur = referentParti, + Texte = "Texte note 1", + Titre = "Titre note 1" + }; + + AsyncTestDelegate exception1 = () => noteService.AjouterNoteAsync(note1); + + DetailsNoteDTO note2 = new DetailsNoteDTO() + { + Collaborateur = collaborateurPartiDTO, + DateCreation = date, + DateMiseAjour = date, + IdAuteur = auteur2, + Texte = "Texte note 2", + Titre = "Titre note 2" + }; + + AsyncTestDelegate exception2 = () => noteService.AjouterNoteAsync(note2); + + Assert.ThrowsAsync(typeof(CollaborateurPartiException), exception1); + Assert.ThrowsAsync(typeof(CollaborateurPartiException), exception2); + } + + #endregion + + #region Tests GetNoteById + #endregion + + + #region Test Supprimer Note + #endregion + + + #region Tests UpdateNote + #endregion + + #region Tests GetNoteByAuteur + #endregion + + + } +} diff --git a/EPAServeur/DTO/CollaborateurDTO.cs b/EPAServeur/DTO/CollaborateurDTO.cs index 9bf2e5e..7cc156c 100644 --- a/EPAServeur/DTO/CollaborateurDTO.cs +++ b/EPAServeur/DTO/CollaborateurDTO.cs @@ -222,7 +222,12 @@ namespace IO.Swagger.DTO return !Equals(left, right); } - #pragma warning restore 1591 - #endregion Operators - } + public static implicit operator CollaborateurDTO(Guid? v) + { + throw new NotImplementedException(); + } + +#pragma warning restore 1591 + #endregion Operators + } } diff --git a/EPAServeur/Services/NoteService.cs b/EPAServeur/Services/NoteService.cs index 40130e9..0e380e3 100644 --- a/EPAServeur/Services/NoteService.cs +++ b/EPAServeur/Services/NoteService.cs @@ -315,8 +315,8 @@ namespace EPAServeur.Services IdCollaborateur = detailsNoteDTO.Collaborateur.Id.Value, Texte = detailsNoteDTO.Texte, Titre = detailsNoteDTO.Titre, - DateCreation = DateTime.Now, - DateMiseAJour = DateTime.Now + DateCreation = detailsNoteDTO.DateCreation.Value, + DateMiseAJour = detailsNoteDTO.DateMiseAjour.Value }; return note; }