using Microsoft.EntityFrameworkCore; using System.Configuration; using System.Reflection; using Models.Models; using Models.Repositories; namespace phronCare.Test { [TestFixture] public class TicketRepositoryTests { private TicketRepository _ticketRepository; private PhronCareOperationsHubContext _context; [SetUp] public void Setup() { #if NETCOREAPP // Copiar el archivo config para asegurarse de que ConfigurationManager lo encuentre string configFile = $"{Assembly.GetExecutingAssembly().Location}.config"; string outputConfigFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath; File.Copy(configFile, outputConfigFile, true); #endif // Obtener la cadena de conexión desde app.config usando ConfigurationManager var connectionString = ConfigurationManager.ConnectionStrings["OperationsHub"]?.ConnectionString; if (string.IsNullOrEmpty(connectionString)) { throw new InvalidOperationException("No se encontró la cadena de conexión 'OperationsHub'."); } var optionsBuilder = new DbContextOptionsBuilder(); optionsBuilder.UseSqlServer(connectionString); _context = new PhronCareOperationsHubContext(optionsBuilder.Options); _ticketRepository = new TicketRepository(_context); } [TearDown] public void TearDown() { // Verifica que _context no sea null antes de llamarlo _context?.Dispose(); } [Test] public async Task GetSummaryAsync_ShouldReturnValidSummaryData() { // Act var summaryData = await _ticketRepository.GetSummaryAsync(); // Assert Assert.That(summaryData, Is.Not.Null, "El resumen no debe ser nulo"); Assert.That(summaryData.Any(), Is.True, "El resumen debe contener al menos un elemento"); foreach (var item in summaryData) { Assert.Multiple(() => { Assert.That(item.Estado, Is.Not.Null, "El campo Estado no debe ser nulo"); Assert.That(item.Cantidad, Is.GreaterThanOrEqualTo(0), "La cantidad debe ser mayor o igual a cero"); }); } } [Test] public async Task GetAllAsync_ReturnsAllTickets() { var tickets = await _ticketRepository.GetAllAsync(); Assert.That(tickets, Is.Not.Null); Assert.That(tickets.Any(), Is.True); } } }