using ManagerService.Controllers; using ManagerService.Data; using ManagerService.Data.SubSection; using ManagerService.DTOs; using ManagerService.Tests.Infrastructure; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging.Abstractions; using System; using System.Collections.Generic; using System.Linq; using Xunit; namespace ManagerService.Tests.Controllers { public class SectionAgendaControllerTests { private SectionAgendaController BuildController(MyInfoMateDbContext db) { var cfg = new ConfigurationBuilder().Build(); return new SectionAgendaController(cfg, NullLogger.Instance, db); } private SectionAgenda MakeSection(MyInfoMateDbContext db, string id = "sa1") { var section = new SectionAgenda { Id = id, Label = "Agenda test", Title = new List(), Description = new List(), ConfigurationId = "conf1", InstanceId = "inst1", Type = SectionType.Agenda, AgendaResourceIds = new List(), EventAgendas = new List() }; db.Sections.Add(section); return section; } private EventAgenda MakeEvent(string sectionId, DateTime? dateFrom) { return new EventAgenda { Label = new List(), Description = new List(), SectionAgendaId = sectionId, DateFrom = dateFrom }; } // ── GET ALL ────────────────────────────────────────────────────────── [Fact] public void GetAllEventAgendaFromSection_UnknownSection_Returns404() { using var db = DbContextFactory.Create(); var result = BuildController(db).GetAllEventAgendaFromSection("unknown"); Assert.IsType(result); } [Fact] public void GetAllEventAgendaFromSection_ReturnsAllEvents() { using var db = DbContextFactory.Create(); MakeSection(db); db.EventAgendas.Add(MakeEvent("sa1", DateTime.Today.AddDays(-5))); db.EventAgendas.Add(MakeEvent("sa1", DateTime.Today.AddDays(5))); db.SaveChanges(); var result = BuildController(db).GetAllEventAgendaFromSection("sa1"); var ok = Assert.IsType(result); var events = Assert.IsAssignableFrom>(ok.Value); Assert.Equal(2, events.Count()); } // ── GET UPCOMING ───────────────────────────────────────────────────── [Fact] public void GetUpcomingEventAgendas_FiltersOutPastEvents() { using var db = DbContextFactory.Create(); MakeSection(db); db.EventAgendas.Add(MakeEvent("sa1", DateTime.Today.AddDays(-1))); // passé → filtré db.EventAgendas.Add(MakeEvent("sa1", DateTime.Today)); // aujourd'hui → inclus db.EventAgendas.Add(MakeEvent("sa1", DateTime.Today.AddDays(1))); // futur → inclus db.SaveChanges(); var result = BuildController(db).GetUpcomingEventAgendas("sa1"); var ok = Assert.IsType(result); var events = Assert.IsAssignableFrom>(ok.Value); Assert.Equal(2, events.Count()); } [Fact] public void GetUpcomingEventAgendas_NullDateFrom_IsIncluded() { using var db = DbContextFactory.Create(); MakeSection(db); db.EventAgendas.Add(MakeEvent("sa1", null)); // sans date → inclus db.EventAgendas.Add(MakeEvent("sa1", DateTime.Today.AddDays(-1))); // passé → filtré db.SaveChanges(); var result = BuildController(db).GetUpcomingEventAgendas("sa1"); var ok = Assert.IsType(result); var events = Assert.IsAssignableFrom>(ok.Value); Assert.Equal(1, events.Count()); } [Fact] public void GetUpcomingEventAgendas_UnknownSection_Returns404() { using var db = DbContextFactory.Create(); var result = BuildController(db).GetUpcomingEventAgendas("unknown"); Assert.IsType(result); } // ── CREATE ─────────────────────────────────────────────────────────── [Fact] public void CreateEventAgenda_ValidDto_Persists() { using var db = DbContextFactory.Create(); MakeSection(db); db.SaveChanges(); var dto = new EventAgendaDTO { label = new List(), description = new List(), sectionAgendaId = "sa1" }; var result = BuildController(db).CreateEventAgenda("sa1", dto); Assert.IsType(result); Assert.Equal(1, db.EventAgendas.Count()); } [Fact] public void CreateEventAgenda_UnknownSection_Returns500() { using var db = DbContextFactory.Create(); var dto = new EventAgendaDTO { label = new List(), description = new List(), sectionAgendaId = "unknown" }; // La section n'existe pas → KeyNotFoundException → ObjectResult 500 var result = BuildController(db).CreateEventAgenda("unknown", dto); var status = Assert.IsType(result); Assert.Equal(500, status.StatusCode); } // ── DELETE ─────────────────────────────────────────────────────────── [Fact] public void DeleteEventAgenda_ExistingEvent_Returns202() { using var db = DbContextFactory.Create(); MakeSection(db); var ev = MakeEvent("sa1", null); db.EventAgendas.Add(ev); db.SaveChanges(); var id = ev.Id; var result = BuildController(db).DeleteEventAgenda(id); var status = Assert.IsType(result); Assert.Equal(202, status.StatusCode); Assert.Equal(0, db.EventAgendas.Count()); } [Fact] public void DeleteEventAgenda_UnknownId_Returns404() { using var db = DbContextFactory.Create(); var result = BuildController(db).DeleteEventAgenda(9999); Assert.IsType(result); } } }