using EPAServeur.Context; using EPAServeur.IServices; using EPAServeur.Services; using IO.Swagger.ApiCollaborateur; 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.Text; using System.Threading.Tasks; namespace EPAServeur.Tests.Controllers { [TestFixture] public class NoteApiTests { #region Variables private EpContext context; private ICollaborateurApi collaborateurApi; private ICollaborateurService collaborateurService; private INoteService noteService; private ILogger logger; 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); noteService = new NoteService(collaborateurApi, collaborateurService, context); logger = new NullLogger(); 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 Tests //AddNote [Test] public async Task AddNote() { NotesApiController notesApiController = new NotesApiController(noteService, logger); CollaborateurDTO collaborateurDTO = await collaborateurService.GetCollaborateurByIdAsync(collaborateur1); DateTime date = DateTime.Now; DetailsNoteDTO nouvelleNote = new DetailsNoteDTO() { Collaborateur = collaborateurDTO, DateCreation = date, DateMiseAjour = date, IdAuteur = auteur1, Texte = "Texte nouvelle note", Titre = "Titre nouvelle note" }; Task task = notesApiController.AddNote(nouvelleNote); CreatedResult result = task.Result as CreatedResult; Assert.AreEqual(201, result.StatusCode); Assert.IsInstanceOf(result.Value); } //DeleteNote [Test] public void SupprimerNote() { NotesApiController notesApiController = new NotesApiController(noteService, logger); Task task = notesApiController.DeleteNote(1); NoContentResult result = task.Result as NoContentResult; Assert.AreEqual(204, result.StatusCode); } //GetNoteById [Test] public void GetNoteById() { NotesApiController notesApiController = new NotesApiController(noteService, logger); Task task = notesApiController.GetNoteById(1); OkObjectResult result = task.Result as OkObjectResult; Assert.AreEqual(200 ,result.StatusCode); Assert.IsInstanceOf(result.Value); } //GetNotesAuteur //GetNotesAuteurCount //UpdateNote [Test] public async Task UpdateNote() { NotesApiController notesApiController = new NotesApiController(noteService, logger); CollaborateurDTO collaborateurDTO = await collaborateurService.GetCollaborateurByIdAsync(collaborateur1); DateTime date = DateTime.Now; DetailsNoteDTO updatedNote = await noteService.GetNoteByIdAsync(2); updatedNote.Texte = "Texte mise à jour"; updatedNote.Titre = "Titre mise à jour"; Task task = notesApiController.UpdateNote(updatedNote, 2); OkObjectResult result = task.Result as OkObjectResult; Assert.AreEqual(200, result.StatusCode); Assert.IsInstanceOf(result.Value); } #endregion } }