using adas_core.Domain.Enums; using adas_core.Domain.Models; using adas_core.Domain.Models.AppSettings; using adas_core.Domain.Models.Pumps; using adas_core.Infrastructure.Repositories; using Microsoft.Extensions.Options; using MongoDB.Driver; using Options = Microsoft.Extensions.Options.Options; namespace adas_core.Test.Repositories; [TestFixture] [Category("Integration")] public class PumpArchiveRepositoryTest { [OneTimeSetUp] public async Task Init() { _optionsApiSettings = Options.Create(_apiSettings); var pump1 = new PumpObservation { Code = "Tile-6", Time = Now, Name = "g-1-pump-Tile-6", Number = 2, Total = 7, TotalAux = 0, Status = PumpEnum.Status.Infusing, PumpMode = PumpEnum.Mode.Infusing, InfusingStatus = PumpEnum.InfusingStatus.Infusing, Pressure = new CommonPumpTypes.PumpValue { Value = 6, Units = "mmHg" }, DrugName = "Nutrición Parenteral", Concentration = new CommonPumpTypes.PumpValue { Value = 1, Units = "ml/ml" }, DrugAmount = new CommonPumpTypes.PumpValue { Value = 1, Units = "ml" }, DiluentVolume = new CommonPumpTypes.PumpValue { Value = 1, Units = "ml" }, DoseRate = new CommonPumpTypes.PumpValue { Value = 27, Units = "ml/h" }, Rate = new CommonPumpTypes.PumpValue { Value = 27, Units = "ml/h" }, VolumeInfused = new CommonPumpTypes.PumpValue { Value = 127.52, Units = "ml" }, VolumeRemaining = new CommonPumpTypes.PumpValue { Value = 0.00001 }, TimeRemaining = new CommonPumpTypes.PumpValue { Value = 0, Units = "min" }, PatientWeight = new CommonPumpTypes.PumpValue { Value = 1, Units = "kg" }, AlarmType = PumpEnum.AlarmType.Attention, GatewayNumber = 1, IsAux = false, IsInfusing = true }; var pump2 = new PumpObservation { Code = "Tile-6", Time = Now.AddDays(-10), Name = "g-1-pump-Tile-6", Number = 2, Total = 7, TotalAux = 0, Status = PumpEnum.Status.Infusing, PumpMode = PumpEnum.Mode.Infusing, InfusingStatus = PumpEnum.InfusingStatus.Infusing, Pressure = new CommonPumpTypes.PumpValue { Value = 6, Units = "mmHg" }, DrugName = "Nutrición Parenteral", Concentration = new CommonPumpTypes.PumpValue { Value = 1, Units = "ml/ml" }, DrugAmount = new CommonPumpTypes.PumpValue { Value = 1, Units = "ml" }, DiluentVolume = new CommonPumpTypes.PumpValue { Value = 1, Units = "ml" }, DoseRate = new CommonPumpTypes.PumpValue { Value = 27, Units = "ml/h" }, Rate = new CommonPumpTypes.PumpValue { Value = 27, Units = "ml/h" }, VolumeInfused = new CommonPumpTypes.PumpValue { Value = 127.52, Units = "ml" }, VolumeRemaining = new CommonPumpTypes.PumpValue { Value = 0.00001 }, TimeRemaining = new CommonPumpTypes.PumpValue { Value = 0, Units = "min" }, PatientWeight = new CommonPumpTypes.PumpValue { Value = 1, Units = "kg" }, AlarmType = PumpEnum.AlarmType.Attention, GatewayNumber = 1, IsAux = false, IsInfusing = true }; await IntegrationDb.Database.DropCollectionAsync("archive_patients_pumpobservations"); await IntegrationDb.Database.CreateCollectionAsync("archive_patients_pumpobservations"); _repository = new PumpArchiveRepository(_optionsApiSettings, IntegrationDb.Database); await _repository.InsertOneAsync(pump1); await _repository.InsertOneAsync(pump2); Assert.That(await _repository.Collection.CountDocumentsAsync(_ => true), Is.EqualTo(2)); } private PumpArchiveRepository _repository; private readonly ApiSettings _apiSettings = new() { ArchivePatientsPumpobservations = "archive_patients_pumpobservations" }; private IOptions _optionsApiSettings; private static readonly DateTime Now = DateTime.Now; /// /// Verifies that the DeleteBeforeDate repository method removes all records with a date earlier than the specified cutoff, retaining only records dated on or after that cutoff. /// [Test] public async Task DeleteBeforeDate() { var result = await _repository.Collection.FindAsync(_ => true); Assert.That(result, Is.Not.Null); Assert.That(result.ToList(), Has.Count.GreaterThan(1)); await _repository.DeleteBeforeDate(Now.AddDays(-1)); var resultDelete = await _repository.Collection.FindAsync(_ => true); Assert.That(resultDelete, Is.Not.Null); Assert.That(resultDelete.ToList(), Has.Count.EqualTo(1)); } }