using adas_core.Domain.Enums; using adas_core.Domain.Models; using adas_core.Domain.Models.AppSettings; using adas_core.Domain.Models.MongoModels; using adas_core.Infrastructure.Repositories; using Microsoft.Extensions.Options; using Options = Microsoft.Extensions.Options.Options; namespace adas_core.Test.Repositories; [TestFixture] [Category("Integration")] public class PatientArchiveRepositoryTest { /// /// Performs one-time setup for integration tests by seeding the patient archive collection /// with three predefined records after resetting the collection. /// [OneTimeSetUp] public async Task Init() { _optionsApiSettings = Options.Create(_apiSettings); var patient1 = new Patient { UnitString = "PointOfCare", Bed = "bed1", PatientNumber = "patientNumber1", Person = new Person { FirstName = "firstName1", LastName = "lastName1", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male } }; var patient2 = new Patient { UnitString = "PointOfCare", Bed = "bed2", PatientNumber = "patientNumber2", Person = new Person { FirstName = "firstName2", LastName = "lastName2", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male } }; var patient3 = new Patient { UnitString = "PointOfCare", Bed = "bed3", PatientNumber = "patientNumber3", Person = new Person { FirstName = "firstName3", LastName = "lastName3", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male } }; await IntegrationDb.Database.DropCollectionAsync("archive_patient"); await IntegrationDb.Database.CreateCollectionAsync("archive_patient"); _repository = new PatientArchiveRepository(_optionsApiSettings, IntegrationDb.Database); await _repository.InsertOneAsync(patient1); await _repository.InsertOneAsync(patient2); await _repository.InsertOneAsync(patient3); } private PatientArchiveRepository _repository; private readonly ApiSettings _apiSettings = new() { ArchivePatientsDiagnosis = "archive_patients" }; private IOptions _optionsApiSettings; /// /// Verifies that the FindByPatientNumber repository method returns null when no record is found for the provided patient number. /// [Test] public async Task FindByPatientNumber_Not_Find_Return_null() { var result = await _repository.FindByPatientNumber(""); Assert.That(result, Is.Null); } /// /// Verifies that the repository's FindByPatientNumber method successfully retrieves a patient /// matching the provided patient number, ensuring the returned patient is not null and has /// the expected PatientNumber. /// [Test] public async Task FindByPatientNumber_Find_Return_Patient() { var result = await _repository.FindByPatientNumber("patientNumber1"); Assert.That(result, Is.Not.Null); Assert.That(result.PatientNumber, Is.EqualTo("patientNumber1")); } /// /// Verifies that the repository's FindAll method returns a non-null list containing the expected number of patient records. /// [Test] public async Task FindAll_Return_List_Patients() { var result = await _repository.FindAll(); Assert.That(result, Is.Not.Null); Assert.That(result.Count, Is.EqualTo(3)); } }