using System.Security.Claims; using adas_core.Application.Repositories.Interfaces; using adas_core.Application.Services; using adas_core.Application.Services.Interfaces; using adas_core.Application.Subscriptions; using adas_core.Domain.Enums; using adas_core.Domain.Models; using adas_core.Domain.Models.AppSettings; using adas_core.Domain.Models.Masters; using adas_core.Domain.Models.MongoModels; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using MongoDB.Bson; using Moq; using Options = Microsoft.Extensions.Options.Options; using static NUnit.Framework.Assert; namespace adas_core.Test.Services; [TestFixture] internal class PatientServiceTest { [SetUp] public void Setup() { _admissionService = new Mock(); _patientRepositoryMock = new Mock(); _patientArchiveRepository = new Mock(); _poCMappingServiceMock = new Mock(); var treatmentServiceMock = new Mock(); _treatServiceLazy = new Lazy(() => treatmentServiceMock.Object); var observationServiceMock = new Mock(); _observationServiceLazy = new Lazy(() => observationServiceMock.Object); _diagnosisServiceMock = new Mock(); _appointmentServiceMock = new Mock(); var pumpServiceMock = new Mock(); _pumpServiceLazy = new Lazy(() => pumpServiceMock.Object); _recordingAlertService = new Mock(); _dischargeService = new Mock { CallBase = true }; _unitService = new Mock { CallBase = true }; _displayservice = new Mock { CallBase = true }; _pocService = new Mock { CallBase = true }; _optionsApiSettings = Options.Create(_apiSettings); _listSettings = Options.Create(new ListSettings()); _logger = new Mock>(); _clientMessageServiceMock = new Mock(); _subscribersServiceMock = new Mock(); _subscriberGroupedServiceMock = new Mock(); _lazyAdmissionService = new Lazy(() => _admissionService.Object); _displayConfigServiceMock = new Mock(); _groupedServiceMock = new Mock(); _patientCarePlanServiceMock = new Mock(); var subscribers = new List(); // Set up the mock object to return a specific value when a method is called _subscribersServiceMock.Setup(x => x.GetSubscribers()).Returns(subscribers); var userClaims = new ClaimsPrincipal(new ClaimsIdentity([ new Claim(ClaimTypes.Name, "TestUser") ], "mock")); var httpContextMock = new DefaultHttpContext { User = userClaims }; _masterListMock = new Mock(); _httpContextAccessorMock.Setup(accessor => accessor.HttpContext) .Returns(httpContextMock); _patientService = new PatientService( _patientRepositoryMock.Object, _patientArchiveRepository.Object, _observationServiceLazy, _treatServiceLazy, _poCMappingServiceMock.Object, _diagnosisServiceMock.Object, _appointmentServiceMock.Object, _pumpServiceLazy, _recordingAlertService.Object, _dischargeService.Object, _optionsApiSettings, _listSettings, _logger.Object, _clientMessageServiceMock.Object, _subscribersServiceMock.Object, _subscriberGroupedServiceMock.Object, _unitService.Object, _displayservice.Object, _pocService.Object, _lazyAdmissionService, _displayConfigServiceMock.Object, _groupedServiceMock.Object, _patientCarePlanServiceMock.Object, _httpContextAccessorMock.Object, _auditServiceMock.Object, _masterListMock.Object ); var unit = new Unit { Id = _unitId, Name = "UCI5C", Title = "CONTROLC", Configuration = new UnitConfiguration { AutoAdt = true } }; _unitService.Setup(u => u.FindByName(unit.Name)).ReturnsAsync(unit); _unitService.Setup(u => u.FindById(unit.Id)).ReturnsAsync(unit); var pocCinna1 = new PointOfCare { Id = _pocCinna01Id, UnitId = _unitId, Room = "CINA01", Bed = "CINA01", Status = StatusEnum.PointOfCare.InUse }; var pocCinna2 = new PointOfCare { Id = _pocCinna02Id, UnitId = _unitId, Room = "CINA02", Bed = "CINA02", Status = StatusEnum.PointOfCare.InUse }; var pocCinna3 = new PointOfCare { Id = _pocCinna03Id, UnitId = _unitId, Room = "CINA03", Bed = "CINA03", Status = StatusEnum.PointOfCare.InUse }; var pocCinna4 = new PointOfCare { Id = _pocCinna03Id, UnitId = _unitId, Room = "CINA04", Bed = "CINA04", Status = StatusEnum.PointOfCare.InUse }; var pocPushed = new PointOfCare { Id = _pocPushedId, UnitId = _unitId, Room = VirtualPointOfCare.Pushed.ToString(), Bed = VirtualPointOfCare.Pushed.ToString() }; var pocMoved = new PointOfCare { Id = _pocMovedId, UnitId = _unitId, Room = VirtualPointOfCare.Moved.ToString(), Bed = VirtualPointOfCare.Moved.ToString() }; var pocDeleted = new PointOfCare { Id = _pocDeletedId, UnitId = _unitId, Room = VirtualPointOfCare.Deleted.ToString(), Bed = VirtualPointOfCare.Deleted.ToString() }; var pocCanceled = new PointOfCare { Id = _pocCanceledId, UnitId = _unitId, Room = VirtualPointOfCare.Cancelled.ToString(), Bed = VirtualPointOfCare.Cancelled.ToString() }; var pocRecovered = new PointOfCare { Id = _pocRecoveredId, UnitId = _unitId, Room = VirtualPointOfCare.Recovered.ToString(), Bed = VirtualPointOfCare.Recovered.ToString() }; var pocUnknown = new PointOfCare { Id = _pocUnknowndId, UnitId = _unitId, Room = VirtualPointOfCare.Unknown.ToString(), Bed = VirtualPointOfCare.Unknown.ToString() }; // Find By Bed And Unit _pocService.Setup(poc => poc.FindByBedAndUnitId("CINA01", unit.Id)).ReturnsAsync(pocCinna1); _pocService.Setup(poc => poc.FindByBedAndUnitId("CINA02", unit.Id)).ReturnsAsync(pocCinna2); _pocService.Setup(poc => poc.FindByBedAndUnitId("CINA03", unit.Id)).ReturnsAsync(pocCinna3); _pocService.Setup(poc => poc.FindByBedAndUnitId("CINA04", unit.Id)).ReturnsAsync(pocCinna4); _pocService.Setup(poc => poc.FindByBedAndUnitId(VirtualPointOfCare.Pushed.ToString(), unit.Id)) .ReturnsAsync(pocPushed); _pocService.Setup(poc => poc.FindByBedAndUnitId(VirtualPointOfCare.Moved.ToString(), unit.Id)) .ReturnsAsync(pocMoved); _pocService.Setup(poc => poc.FindByBedAndUnitId(VirtualPointOfCare.Deleted.ToString(), unit.Id)) .ReturnsAsync(pocDeleted); _pocService.Setup(poc => poc.FindByBedAndUnitId(VirtualPointOfCare.Cancelled.ToString(), unit.Id)) .ReturnsAsync(pocCanceled); _pocService.Setup(poc => poc.FindByBedAndUnitId(VirtualPointOfCare.Recovered.ToString(), unit.Id)) .ReturnsAsync(pocRecovered); _pocService.Setup(poc => poc.FindByBedAndUnitId(VirtualPointOfCare.Unknown.ToString(), unit.Id)) .ReturnsAsync(pocUnknown); // Find By ID _pocService.Setup(poc => poc.FindById(_pocCinna01Id)).ReturnsAsync(pocCinna1); _pocService.Setup(poc => poc.FindById(_pocCinna02Id)).ReturnsAsync(pocCinna2); _pocService.Setup(poc => poc.FindById(_pocCinna03Id)).ReturnsAsync(pocCinna3); _pocService.Setup(poc => poc.FindById(_pocCinna04Id)).ReturnsAsync(pocCinna4); _pocService.Setup(poc => poc.FindById(pocPushed.Id)).ReturnsAsync(pocPushed); _pocService.Setup(poc => poc.FindById(pocMoved.Id)).ReturnsAsync(pocMoved); _pocService.Setup(poc => poc.FindById(pocDeleted.Id)).ReturnsAsync(pocDeleted); _pocService.Setup(poc => poc.FindById(pocCanceled.Id)).ReturnsAsync(pocCanceled); _pocService.Setup(poc => poc.FindById(pocRecovered.Id)).ReturnsAsync(pocRecovered); _pocService.Setup(poc => poc.FindById(pocUnknown.Id)).ReturnsAsync(pocUnknown); // GetByCodeSysAndCode Info _pocService.Setup(poc => poc.GetInfo(_pocCinna01Id, It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(pocCinna1); _pocService.Setup(poc => poc.GetInfo(_pocCinna02Id, It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(pocCinna2); _pocService.Setup(poc => poc.GetInfo(_pocCinna03Id, It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(pocCinna3); _pocService.Setup(poc => poc.GetInfo(_pocCinna04Id, It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(pocCinna4); _pocService.Setup(poc => poc.GetInfo(_pocPushedId, It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(pocPushed); _pocService.Setup(poc => poc.GetInfo(_pocMovedId, It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(pocMoved); _pocService.Setup(poc => poc.GetInfo(_pocDeletedId, It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(pocDeleted); _pocService.Setup(poc => poc.GetInfo(_pocCanceledId, It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(pocCanceled); _pocService.Setup(poc => poc.GetInfo(_pocRecoveredId, It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(pocRecovered); _pocService.Setup(poc => poc.GetInfo(_pocUnknowndId, It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(pocUnknown); // GetByCodeSysAndCode All _pocService.Setup(poc => poc.GetAll()).ReturnsAsync([ pocCinna1, pocCinna2, pocCinna3, pocCinna4, pocPushed, pocMoved, pocDeleted, pocCanceled, pocRecovered, pocUnknown ]); _pocService.Setup(poc => poc.GetAllLocationInfo()).ReturnsAsync([ pocCinna1, pocCinna2, pocCinna3, pocCinna4, pocPushed, pocMoved, pocDeleted, pocCanceled, pocRecovered, pocUnknown ]); _unitService.Setup(poc => poc.GetAll(It.IsAny())).ReturnsAsync([unit]); } private PatientService _patientService = null!; private Mock _patientRepositoryMock = null!; private Mock _poCMappingServiceMock = null!; private Mock _diagnosisServiceMock = null!; private Mock _appointmentServiceMock = null!; private Lazy _pumpServiceLazy = null!; private Mock _patientArchiveRepository = null!; private Lazy _observationServiceLazy = null!; private Lazy _treatServiceLazy = null!; private Mock _recordingAlertService = null!; private Mock _dischargeService = null!; private Mock _unitService = null!; private Mock _displayservice = null!; private Mock _pocService = null!; private Mock _displayConfigServiceMock = null!; private Mock _groupedServiceMock = null!; private Mock _patientCarePlanServiceMock = null!; private readonly Mock _httpContextAccessorMock = new(); private readonly Mock _auditServiceMock = new(); private IMock _masterListMock = null!; private readonly ApiSettings _apiSettings = new() { IccaFacility = "Philips.CIS.CVC", CreatePatientWithOru = false, UpdatePatientDataWithAdtA02 = true }; private IOptions _optionsApiSettings = null!; private IOptions _listSettings = null!; private Mock> _logger = null!; private Mock _clientMessageServiceMock = null!; private Mock _subscribersServiceMock = null!; private Mock _subscriberGroupedServiceMock = null!; private Lazy _lazyAdmissionService = null!; private Mock _admissionService = null!; private readonly ObjectId _unitId = ObjectId.GenerateNewId(); private readonly ObjectId _pocCinna01Id = ObjectId.GenerateNewId(); private readonly ObjectId _pocCinna02Id = ObjectId.GenerateNewId(); private readonly ObjectId _pocCinna03Id = ObjectId.GenerateNewId(); private readonly ObjectId _pocCinna04Id = ObjectId.GenerateNewId(); private readonly ObjectId _pocPushedId = ObjectId.GenerateNewId(); private readonly ObjectId _pocMovedId = ObjectId.GenerateNewId(); private readonly ObjectId _pocDeletedId = ObjectId.GenerateNewId(); private readonly ObjectId _pocCanceledId = ObjectId.GenerateNewId(); private readonly ObjectId _pocRecoveredId = ObjectId.GenerateNewId(); private readonly ObjectId _pocUnknowndId = ObjectId.GenerateNewId(); [Test] public async Task Find_Patient_By_APIRequest_Get_Patient_By_PatientNumber() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var apiRequest = new ApiRequest { Type = "ORU_R01", PatientNumber = patientNumber, Patient = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }, Location = location, Facility = "Philips.CIS.CVC" }; var patientInBd = new Patient { UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = patientNumber, Person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male } }; _patientRepositoryMock.Setup(p => p.FindByPatientNumber(patientNumber)).ReturnsAsync(patientInBd); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); var patient = await _patientService.FindPatientByApiRequest(apiRequest); That(patient, Is.Not.Null); using (Assert.EnterMultipleScope()) { That(patient!.PatientNumber, Is.EqualTo("12345")); That(patient.PointOfCareId!.Value, Is.EqualTo((ObjectId?)_pocCinna02Id)); }; } [Test] public async Task Find_Patient_By_APIRequest_Not_Exists_CreatePatientWithORU_True_Created_Patient() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ORU_R01", PatientNumber = patientNumber, Patient = person, Location = location, Facility = "Philips.CIS.CVC" }; _optionsApiSettings.Value.CreatePatientWithOru = true; var patientService = new PatientService( _patientRepositoryMock.Object, _patientArchiveRepository.Object, _observationServiceLazy, _treatServiceLazy, _poCMappingServiceMock.Object, _diagnosisServiceMock.Object, _appointmentServiceMock.Object, _pumpServiceLazy, _recordingAlertService.Object, _dischargeService.Object, _optionsApiSettings, _listSettings, _logger.Object, _clientMessageServiceMock.Object, _subscribersServiceMock.Object, _subscriberGroupedServiceMock.Object, _unitService.Object, _displayservice.Object, _pocService.Object, _lazyAdmissionService, _displayConfigServiceMock.Object, _groupedServiceMock.Object, _patientCarePlanServiceMock.Object, _httpContextAccessorMock.Object, _auditServiceMock.Object, _masterListMock.Object ); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); var patient = await patientService.FindPatientByApiRequest(apiRequest); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id && arg.PatientNumber == patientNumber)), Times.Once); That(patient, Is.Not.Null); using (Assert.EnterMultipleScope()) { That(patient!.PatientNumber, Is.EqualTo("12345")); That(patient.UnitId!.Value, Is.EqualTo(_unitId)); That(patient.PointOfCareId, Is.Not.Null); }; } [Test] public async Task Find_Patient_By_APIRequest_Not_Exists_And_Location_Ocuped_CreatePatientWithORU_True_Created_In_Temporal_Bed() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ORU_R01", PatientNumber = patientNumber, Patient = person, Location = location, Facility = "Philips.CIS.CVC" }; _optionsApiSettings.Value.CreatePatientWithOru = true; var patientService = new PatientService( _patientRepositoryMock.Object, _patientArchiveRepository.Object, _observationServiceLazy, _treatServiceLazy, _poCMappingServiceMock.Object, _diagnosisServiceMock.Object, _appointmentServiceMock.Object, _pumpServiceLazy, _recordingAlertService.Object, _dischargeService.Object, _optionsApiSettings, _listSettings, _logger.Object, _clientMessageServiceMock.Object, _subscribersServiceMock.Object, _subscriberGroupedServiceMock.Object, _unitService.Object, _displayservice.Object, _pocService.Object, _lazyAdmissionService, _displayConfigServiceMock.Object, _groupedServiceMock.Object, _patientCarePlanServiceMock.Object, _httpContextAccessorMock.Object, _auditServiceMock.Object, _masterListMock.Object ); var patientLocation = new Patient { PatientNumber = "11111", Person = new Person(), UnitId = _unitId, PointOfCareId = _pocCinna02Id }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(f => f.FindByLocation(location)).ReturnsAsync(patientLocation); _patientRepositoryMock.Setup(f => f.FindByUnitAndPocId(_unitId, _pocCinna02Id)).ReturnsAsync(patientLocation); var patient = await patientService.FindPatientByApiRequest(apiRequest); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocUnknowndId && arg.PatientNumber == patientNumber)), Times.Once); That(patient, Is.Not.Null); using (Assert.EnterMultipleScope()) { That(patient!.PatientNumber, Is.EqualTo("12345")); That(patient.UnitId!.Value, Is.EqualTo(_unitId)); That(patient.PointOfCareId, Is.Not.Null); }; } [Test] public async Task Find_Patient_By_APIRequest_Not_Exists_CreatePatientWithORU_False_Not_Created_In_Temporal_Bed() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ORU_R01", PatientNumber = patientNumber, Patient = person, Location = location, Facility = "Philips.CIS.CVC" }; _optionsApiSettings.Value.CreatePatientWithOru = false; var patientService = new PatientService( _patientRepositoryMock.Object, _patientArchiveRepository.Object, _observationServiceLazy, _treatServiceLazy, _poCMappingServiceMock.Object, _diagnosisServiceMock.Object, _appointmentServiceMock.Object, _pumpServiceLazy, _recordingAlertService.Object, _dischargeService.Object, _optionsApiSettings, _listSettings, _logger.Object, _clientMessageServiceMock.Object, _subscribersServiceMock.Object, _subscriberGroupedServiceMock.Object, _unitService.Object, _displayservice.Object, _pocService.Object, _lazyAdmissionService, _displayConfigServiceMock.Object, _groupedServiceMock.Object, _patientCarePlanServiceMock.Object, _httpContextAccessorMock.Object, _auditServiceMock.Object, _masterListMock.Object ); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); var patient = await patientService.FindPatientByApiRequest(apiRequest); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocUnknowndId && arg.PatientNumber == patientNumber)), Times.Never); That(patient, Is.Null); } [Test] public async Task Find_Patient_By_APIRequest_Exists_In_Different_Location_NOT_Changes_Patient_Location() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ORU_R01", PatientNumber = patientNumber, Patient = person, Location = location, Facility = "Philips.CIS.CVC" }; var patientInBd = new Patient { UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = patientNumber, Person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male } }; _patientRepositoryMock.Setup(p => p.FindByPatientNumber(patientNumber)).ReturnsAsync(patientInBd); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); var patient = await _patientService.FindPatientByApiRequest(apiRequest); That(patient, Is.Not.Null); using (Assert.EnterMultipleScope()) { That(patient!.PatientNumber, Is.EqualTo("12345")); That(patient.UnitId!.Value, Is.EqualTo(_unitId)); That(patient.PointOfCareId!.Value, Is.EqualTo((ObjectId?)_pocCinna02Id)); }; } [Test] public async Task ADT_A01_New_Patient_Empty_Bed_Insert_In_Location() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A01", PatientNumber = patientNumber, Patient = person, Location = location }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.Update(It.Is(arg => arg.UnitString == "UCI5C" && arg.Bed == "CINA02" && arg.PatientNumber == patientNumber)), Times.Once); } [Test] public async Task ADT_A01_New_Patient_Unknown_Location_Insert_Nothing() { var location = new PatientLocation("UCI5H", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A01", PatientNumber = patientNumber, Patient = person, Location = location }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(() => null); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.IsAny()), Times.Never); } [Test] public async Task ADT_A01_New_Patient_Bed_In_Use_Moves_Existing_Patient_To_Temporal_Bed() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "123456"; var unitId = ObjectId.GenerateNewId(); var pocId = ObjectId.GenerateNewId(); var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male, Ids = new Dictionary { { "MR", "12345" }, { "VN", "" } } }; var poc = new PointOfCare { Id = pocId, UnitId = unitId, Room = "CINA02", Bed = "CINA02", Status = StatusEnum.PointOfCare.InUse }; var pocPushed = new PointOfCare { Id = ObjectId.GenerateNewId(), UnitId = unitId, Room = VirtualPointOfCare.Pushed.ToString(), Bed = VirtualPointOfCare.Pushed.ToString() }; var unit = new Unit { Id = unitId, Name = "UCI5C", Title = "CONTROLC", Configuration = new UnitConfiguration { AutoAdt = true } }; var apiRequest = new ApiRequest { Type = "ADT_A01", PatientNumber = patientNumber, Patient = person, Location = location }; var mongoId = ObjectId.GenerateNewId(); var patientInBd = new Patient { Id = mongoId, PointOfCareId = pocId, UnitId = unitId, PatientNumber = "123456", Person = new Person { FirstName = "Jose", LastName = "Luis", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male, Ids = new Dictionary { { "MR", "123456" }, { "VN", "" } } } }; var existingPatient = new Patient { Id = ObjectId.GenerateNewId(), PointOfCareId = pocId, UnitId = unitId, PatientNumber = "1234567", Person = new Person { FirstName = "Jose", LastName = "Luis", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male, Ids = new Dictionary { { "MR", "123456" }, { "VN", "" } } } }; var admissionServiceMock = new Mock(); admissionServiceMock.Setup(a => a.GetAdmissionByPatientNumber(patientNumber)).ReturnsAsync((Admission?)null); _pocService.Setup(p => p.FindByBedAndUnitId("CINA02", It.IsAny())).ReturnsAsync(poc); _pocService.Setup(p => p.FindByBedAndUnitId(VirtualPointOfCare.Pushed.ToString(), unit.Id)) .ReturnsAsync(pocPushed); _pocService.Setup(p => p.FindById(pocPushed.Id)).ReturnsAsync(pocPushed); _pocService.Setup(p => p.FindById(pocId)).ReturnsAsync(poc); _unitService.Setup(u => u.FindByName(unit.Name)).ReturnsAsync(unit); _unitService.Setup(u => u.FindById(unit.Id)).ReturnsAsync(unit); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindByUnitAndPocId(unit.Id, poc.Id)).ReturnsAsync(existingPatient); _patientRepositoryMock.Setup(p => p.FindById(existingPatient.Id)).ReturnsAsync(existingPatient); _patientRepositoryMock.Setup(p => p.FindById(patientInBd.Id)).ReturnsAsync(patientInBd); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.FindByPatientNumber(It.Is(arg => arg == patientInBd.PatientNumber)), Times.Once); _patientRepositoryMock.Verify( p => p.Update(It.Is(arg => arg.Bed == "CINA02" && arg.PatientNumber == patientNumber)), Times.Once); } [Test] public async Task ADT_A01_New_Patient_Bed_In_Use_With_Same_Patient_Number_Updates_Demographic_Data() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var unitId = ObjectId.GenerateNewId(); var pocId = ObjectId.GenerateNewId(); var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male, Ids = new Dictionary { { "MR", patientNumber }, { "VN", "" } } }; var apiRequest = new ApiRequest { Type = "ADT_A01", PatientNumber = patientNumber, Patient = person, Location = location }; var mongoId = ObjectId.GenerateNewId(); var patientInBd = new Patient { Id = mongoId, PointOfCareId = pocId, UnitId = unitId, PatientNumber = patientNumber, Person = new Person { FirstName = "_", LastName = "_", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male, Ids = new Dictionary { { "MR", patientNumber }, { "VN", "" } } } }; _poCMappingServiceMock.Setup(p => p.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindById(patientInBd.Id)).ReturnsAsync(patientInBd); _patientRepositoryMock.Setup(p => p.FindByPatientNumber(patientNumber)).ReturnsAsync(patientInBd); _patientRepositoryMock.Setup(p => p.FindByUnitAndPocId(unitId, pocId)).ReturnsAsync(patientInBd); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.Update(It.Is(arg => arg.Bed == "CINA02" && arg.PatientNumber == patientNumber && arg.Person != null && arg.Person.Equals(person))), Times.Once); } [Test] public async Task ADT_A05_New_Patient_New_Bed_Creates_Location() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A01", PatientNumber = patientNumber, Patient = person, Location = location }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.Update(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id && arg.PatientNumber == patientNumber)), Times.Once); } [Test] public async Task ADT_A05_New_Patient_Bed_In_Use_Moves_Existing_Patient_To_Temporal_Bed() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A01", PatientNumber = patientNumber, Patient = person, Location = location }; var mongoId = ObjectId.GenerateNewId(); var patientInBd = new Patient { Id = mongoId, UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = "123456", Person = new Person { FirstName = "Jose", LastName = "Luis", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male } }; _patientRepositoryMock.Setup(p => p.FindByUnitAndPocId(_unitId, _pocCinna02Id)).ReturnsAsync(patientInBd); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindById(mongoId)).ReturnsAsync(patientInBd); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify(p => p.UpdateOneAsync(mongoId, It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocPushedId))); _patientRepositoryMock.Verify( p => p.Update(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id && arg.PatientNumber == patientNumber)), Times.Once()); } [Test] public async Task ADT_A03_END_VISIT_PATIENT_NOT_EXISTS_DO_NOTHING() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A03", PatientNumber = patientNumber, Patient = person, Location = location }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.Update(It.Is(arg => arg.PointOfCareId == _pocDeletedId && arg.UnitId == _unitId && arg.PatientNumber == patientNumber)), Times.Never); } [Test] public async Task ADT_A03_END_VISIT_PATIENT_EXISTS() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var mongoId = ObjectId.GenerateNewId(); var apiRequest = new ApiRequest { Type = "ADT_A03", PatientNumber = patientNumber, Patient = person, Location = location }; var patientInBd = new Patient { Id = mongoId, UnitId = _unitId, PointOfCareId = _pocCinna02Id, Bed = location.Bed, PatientNumber = patientNumber, Person = person }; _patientRepositoryMock.Setup(p => p.FindByPatientNumber(patientNumber)).ReturnsAsync(patientInBd); _patientRepositoryMock.Setup(p => p.FindById(mongoId)).ReturnsAsync(patientInBd); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.UpdateOneAsync(mongoId, It.Is(arg => arg.PointOfCareId == _pocDeletedId && arg.UnitId == _unitId && arg.PatientNumber == patientNumber)), Times.Once); _pocService.Verify( p => p.CheckNextAdmission(_pocCinna02Id), Times.Once); } [Test] public async Task ADT_A02_TRANSFER_PATIENT_FROM_EXISTS_BED_TO_NOT_EXISTS_BED_SHOULD_MOVE_TO_VIRTUAL_POC_UNKNOWN() { var location = new PatientLocation("UCI5C", "CINA02"); var otherlocation = new PatientLocation("UCI5X", "CINA01"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A02", PatientNumber = patientNumber, Patient = person, OldLocation = location, Location = otherlocation }; var existingPatient = new Patient { Id = ObjectId.GenerateNewId(), PatientNumber = "12345", Person = person, Location = location, UnitId = _unitId, PointOfCareId = _pocCinna02Id }; // Crear una nueva instancia de ApiSettings var testApiSettings = new ApiSettings { IccaFacility = "Philips.CIS.CVC", PointOfCareMapping = new PointOfCareMapping { Required = false } }; // Crear una nueva instancia de IOptions var testOptionsApiSettings = Options.Create(testApiSettings); // Crear una nueva instancia de PatientService utilizando la configuración custom var patientServiceForThisTest = new PatientService( _patientRepositoryMock.Object, _patientArchiveRepository.Object, _observationServiceLazy, _treatServiceLazy, _poCMappingServiceMock.Object, _diagnosisServiceMock.Object, _appointmentServiceMock.Object, _pumpServiceLazy, _recordingAlertService.Object, _dischargeService.Object, testOptionsApiSettings, _listSettings, _logger.Object, _clientMessageServiceMock.Object, _subscribersServiceMock.Object, _subscriberGroupedServiceMock.Object, _unitService.Object, _displayservice.Object, _pocService.Object, _lazyAdmissionService, _displayConfigServiceMock.Object, _groupedServiceMock.Object, _patientCarePlanServiceMock.Object, _httpContextAccessorMock.Object, _auditServiceMock.Object, _masterListMock.Object ); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _poCMappingServiceMock.Setup(i => i.Map(otherlocation)).ReturnsAsync(otherlocation); _patientRepositoryMock.Setup(i => i.FindByPatientNumber(patientNumber)).ReturnsAsync(existingPatient); _patientRepositoryMock.Setup(i => i.FindById(existingPatient.Id)).ReturnsAsync(existingPatient); await patientServiceForThisTest.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.UpdateOneAsync(existingPatient.Id, It.Is(x => x.PointOfCareId == _pocUnknowndId && x.PatientNumber == patientNumber)), Times.Once()); } [Test] public async Task ADT_A02_TRANSFER_PATIENT_FROM_NOT_EXISTS_BED_TO_BED_SHOULD_CREATE_PATIENT() { var location = new PatientLocation("UCI5C", "CINA02", "CINA02"); var oldLocation = new PatientLocation("UCI5C", "CINA04", "CINA04"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var mongoId = ObjectId.GenerateNewId(); var apiRequest = new ApiRequest { Type = "ADT_A02", PatientNumber = patientNumber, Patient = person, Location = location, OldLocation = oldLocation }; var newPatientInBed = new Patient { UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = patientNumber, Person = person, Location = location }; _patientRepositoryMock.Setup(p => p.FindByPatientNumber(patientNumber)).ReturnsAsync((Patient?)null); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindById(mongoId)).ReturnsAsync((Patient?)null); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.PatientNumber == newPatientInBed.PatientNumber)), Times.Once); } [Test] public async Task ADT_A02_TRANSFER_PATIENT_FROM_BED_TO_IN_USE_BED() { // Old Location for existing patient var oldLocation = new PatientLocation("UCI5C", "CINA03"); // New Location for existing patient var location = new PatientLocation("UCI5C", "CINA02"); const string newPatientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var mongoIdNewPatient = ObjectId.GenerateNewId(); // Existing patient in new patient location var mongoIdOldPatient = ObjectId.GenerateNewId(); var oldPatientInBed = new Patient { Id = mongoIdOldPatient, UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = "123456", Person = new Person { FirstName = "Jose", LastName = "Luis", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male } }; var newPatientInBed = new Patient { Id = mongoIdNewPatient, PointOfCareId = _pocCinna03Id, UnitId = _unitId, PatientNumber = newPatientNumber, Person = person }; var apiRequest = new ApiRequest { Type = "ADT_A02", PatientNumber = newPatientNumber, Patient = person, Location = location, OldLocation = oldLocation }; _patientRepositoryMock.Setup(p => p.FindByPatientNumber(newPatientNumber)).ReturnsAsync(newPatientInBed); _patientRepositoryMock.Setup(p => p.FindByLocation(location)).ReturnsAsync(oldPatientInBed); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindByUnitAndPocId(_unitId, _pocCinna02Id)).ReturnsAsync(oldPatientInBed); _patientRepositoryMock.Setup(p => p.FindById(oldPatientInBed.Id)).ReturnsAsync(oldPatientInBed); _patientRepositoryMock.Setup(p => p.FindById(newPatientInBed.Id)).ReturnsAsync(newPatientInBed); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.UpdateOneAsync(mongoIdOldPatient, It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocMovedId)), Times.Once()); _dischargeService.Verify(p => p.GetDischargeByPatientId(mongoIdOldPatient), Times.Once); _patientRepositoryMock.Verify( p => p.UpdateOneAsync(mongoIdNewPatient, It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id)), Times.Once()); _pocService.Verify(p => p.CheckNextAdmission(_pocMovedId), Times.Once); } [Test] public async Task ADT_A02_TRANSFER_PATIENT_FROM_NOT_EXISTS_TO_NOT_EMPTY_BED_SHOULD_CHANGE_LAST_PATIENT_TO_TEMPORTAL_BED() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var mongoId = ObjectId.GenerateNewId(); var apiRequest = new ApiRequest { Type = "ADT_A02", PatientNumber = patientNumber, Patient = person, Location = location }; var oldPatientInBed = new Patient { Id = mongoId, UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = "123456", Person = new Person { FirstName = "Jose", LastName = "Luis", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male } }; _patientRepositoryMock.Setup(p => p.FindByUnitAndPocId(_unitId, _pocCinna02Id)).ReturnsAsync(oldPatientInBed); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindById(mongoId)).ReturnsAsync(oldPatientInBed); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.UpdateOneAsync(mongoId, It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocMovedId && arg.PatientNumber == oldPatientInBed.PatientNumber)), Times.Once); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id && arg.PatientNumber == patientNumber)), Times.Once()); } [Test] public async Task ADT_A02_TRANSFER_PATIENT_FROM_NOT_EXISTS_BED_TO_NOT_EMPTY_BED_WITH_SAME_PATIENT_NUMBER_SHOULD_UPTADE_DEMOGRAPHIC_DATA() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var mongoId = ObjectId.GenerateNewId(); var apiRequest = new ApiRequest { Type = "ADT_A02", PatientNumber = patientNumber, Patient = person, Location = location }; var oldPatientInBed = new Patient { Id = mongoId, UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = patientNumber, Person = new Person { FirstName = "_", LastName = "_" } }; _patientRepositoryMock.Setup(p => p.FindByUnitAndPocId(_unitId, _pocCinna02Id)).ReturnsAsync(oldPatientInBed); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindByPatientNumber(patientNumber)).ReturnsAsync(oldPatientInBed); _patientRepositoryMock.Setup(p => p.FindById(mongoId)).ReturnsAsync(oldPatientInBed); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.UpdatePatientData(mongoId, patientNumber, It.Is(arg => arg.Equals(person)), false), Times.Once); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.IsAny()), Times.Never); } [Test] public async Task ADT_A04_New_Patient_Creates_Patient() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A04", PatientNumber = patientNumber, Patient = person, Location = location }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id && arg.PatientNumber == patientNumber)), Times.Once); } [Test] public async Task ADT_A04_New_Patient_Not_Location_Creates_Patient() { var location = new PatientLocation("NEONATAL", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A04", PatientNumber = patientNumber, Patient = person, Location = location }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync((PatientLocation?)null); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.PatientNumber == patientNumber)), Times.Never); } [Test] public async Task ADT_A08_No_exist_CreatePatientWithADT_A08_True_Patient_Creates_Patient() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A08", PatientNumber = patientNumber, Patient = person, Location = location }; _optionsApiSettings.Value.CreatePatientWithAdtA08 = true; var patientService = new PatientService( _patientRepositoryMock.Object, _patientArchiveRepository.Object, _observationServiceLazy, _treatServiceLazy, _poCMappingServiceMock.Object, _diagnosisServiceMock.Object, _appointmentServiceMock.Object, _pumpServiceLazy, _recordingAlertService.Object, _dischargeService.Object, _optionsApiSettings, _listSettings, _logger.Object, _clientMessageServiceMock.Object, _subscribersServiceMock.Object, _subscriberGroupedServiceMock.Object, _unitService.Object, _displayservice.Object, _pocService.Object, _lazyAdmissionService, _displayConfigServiceMock.Object, _groupedServiceMock.Object, _patientCarePlanServiceMock.Object, _httpContextAccessorMock.Object, _auditServiceMock.Object, _masterListMock.Object ); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); // Act await patientService.SaveRequest(apiRequest); // Assert: Verify that the Update method is called with the correct patient _patientRepositoryMock.Verify(p => p.Update(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id && arg.PatientNumber == patientNumber)), Times.Once); // Add additional logging for debugging Console.WriteLine("Test completed successfully"); } [Test] public async Task ADT_A08_No_exist_Patient_Not_Creates_Patient() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A08", PatientNumber = patientNumber, Patient = person, Location = location }; _optionsApiSettings.Value.CreatePatientWithAdtA08 = false; var patientService = new PatientService( _patientRepositoryMock.Object, _patientArchiveRepository.Object, _observationServiceLazy, _treatServiceLazy, _poCMappingServiceMock.Object, _diagnosisServiceMock.Object, _appointmentServiceMock.Object, _pumpServiceLazy, _recordingAlertService.Object, _dischargeService.Object, _optionsApiSettings, _listSettings, _logger.Object, _clientMessageServiceMock.Object, _subscribersServiceMock.Object, _subscriberGroupedServiceMock.Object, _unitService.Object, _displayservice.Object, _pocService.Object, _lazyAdmissionService, _displayConfigServiceMock.Object, _groupedServiceMock.Object, _patientCarePlanServiceMock.Object, _httpContextAccessorMock.Object, _auditServiceMock.Object, _masterListMock.Object ); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); await patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id && arg.PatientNumber == patientNumber)), Times.Never); } [Test] public async Task ADT_A08_Exist_Patient_Update_Patient() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A08", PatientNumber = patientNumber, Patient = person, Location = location }; var patient = new Patient { UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = patientNumber, Person = person }; _optionsApiSettings.Value.CreatePatientWithAdtA08 = false; var patientService = new PatientService( _patientRepositoryMock.Object, _patientArchiveRepository.Object, _observationServiceLazy, _treatServiceLazy, _poCMappingServiceMock.Object, _diagnosisServiceMock.Object, _appointmentServiceMock.Object, _pumpServiceLazy, _recordingAlertService.Object, _dischargeService.Object, _optionsApiSettings, _listSettings, _logger.Object, _clientMessageServiceMock.Object, _subscribersServiceMock.Object, _subscriberGroupedServiceMock.Object, _unitService.Object, _displayservice.Object, _pocService.Object, _lazyAdmissionService, _displayConfigServiceMock.Object, _groupedServiceMock.Object, _patientCarePlanServiceMock.Object, _httpContextAccessorMock.Object, _auditServiceMock.Object, _masterListMock.Object ); _patientRepositoryMock.Setup(f => f.FindByPatientNumber(patientNumber)).ReturnsAsync(patient); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); await patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.Update(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id && arg.PatientNumber == patientNumber)), Times.Once); } [Test] public async Task ADT_A11_Exist_Patient_CANCELLED_Patient() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A11", PatientNumber = patientNumber, Patient = person, Location = location }; var patient = new Patient { UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = patientNumber, Person = person, Id = ObjectId.GenerateNewId() }; var patientService = new PatientService( _patientRepositoryMock.Object, _patientArchiveRepository.Object, _observationServiceLazy, _treatServiceLazy, _poCMappingServiceMock.Object, _diagnosisServiceMock.Object, _appointmentServiceMock.Object, _pumpServiceLazy, _recordingAlertService.Object, _dischargeService.Object, _optionsApiSettings, _listSettings, _logger.Object, _clientMessageServiceMock.Object, _subscribersServiceMock.Object, _subscriberGroupedServiceMock.Object, _unitService.Object, _displayservice.Object, _pocService.Object, _lazyAdmissionService, _displayConfigServiceMock.Object, _groupedServiceMock.Object, _patientCarePlanServiceMock.Object, _httpContextAccessorMock.Object, _auditServiceMock.Object, _masterListMock.Object ); _patientRepositoryMock.Setup(f => f.FindByPatientNumber(patientNumber)).ReturnsAsync(patient); // sectionServiceMock.Setup(f => f.FindByPatient(patient.id)).ReturnsAsync(null); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); await patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.UpdateOneAsync(patient.Id, It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCanceledId && arg.PatientNumber == patientNumber)), Times.Once); } [Test] public async Task ADT_A11_No_Exist_Patient_Not_CANCELLED_Patient() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A11", PatientNumber = patientNumber, Patient = person, Location = location }; var patientService = new PatientService( _patientRepositoryMock.Object, _patientArchiveRepository.Object, _observationServiceLazy, _treatServiceLazy, _poCMappingServiceMock.Object, _diagnosisServiceMock.Object, _appointmentServiceMock.Object, _pumpServiceLazy, _recordingAlertService.Object, _dischargeService.Object, _optionsApiSettings, _listSettings, _logger.Object, _clientMessageServiceMock.Object, _subscribersServiceMock.Object, _subscriberGroupedServiceMock.Object, _unitService.Object, _displayservice.Object, _pocService.Object, _lazyAdmissionService, _displayConfigServiceMock.Object, _groupedServiceMock.Object, _patientCarePlanServiceMock.Object, _httpContextAccessorMock.Object, _auditServiceMock.Object, _masterListMock.Object ); await patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.UpdateOneAsync(It.IsAny(), It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCanceledId && arg.PatientNumber == patientNumber)), Times.Never); } [Test] public async Task ADT_A12_TRANSFER_PATIENT_NOT_EXISTS_TO_EMPTY_BED_SHOULD_CREATE_BED() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A12", PatientNumber = patientNumber, Patient = person, Location = location }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id && arg.PatientNumber == patientNumber)), Times.Once()); } [Test] public async Task ADT_A12_TRANSFER_PATIENT_FROM_BED_TO_NOT_EXISTS_BED_SHOULD_CREATE_BED() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var mongoId = ObjectId.GenerateNewId(); var apiRequest = new ApiRequest { Type = "ADT_A12", PatientNumber = patientNumber, Patient = person, Location = location }; var newPatientInBed = new Patient { Id = mongoId, UnitId = _unitId, PointOfCareId = ObjectId.GenerateNewId(), PatientNumber = patientNumber, Person = person }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindByPatientNumber(patientNumber)).ReturnsAsync(newPatientInBed); _patientRepositoryMock.Setup(p => p.FindById(mongoId)).ReturnsAsync(newPatientInBed); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.UpdateOneAsync(mongoId, It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id)), Times.Once); } [Test] public async Task ADT_A12_TRANSFER_PATIENT_FROM_BED_TO_IN_USE_BED() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var mongoIdOldPatient = ObjectId.GenerateNewId(); var mongoIdNewPatient = ObjectId.GenerateNewId(); var apiRequest = new ApiRequest { Type = "ADT_A12", PatientNumber = patientNumber, Patient = person, Location = location }; var oldPatientInBed = new Patient { Id = mongoIdOldPatient, UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = "123456", Person = new Person { FirstName = "Jose", LastName = "Luis", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male } }; var newPatientInBed = new Patient { Id = mongoIdNewPatient, UnitId = _unitId, PointOfCareId = _pocCinna03Id, PatientNumber = patientNumber, Person = person }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindByUnitAndPocId(_unitId, _pocCinna02Id)).ReturnsAsync(oldPatientInBed); _patientRepositoryMock.Setup(p => p.FindByPatientNumber(patientNumber)).ReturnsAsync(newPatientInBed); _patientRepositoryMock.Setup(p => p.FindById(It.Is(id => id == mongoIdOldPatient))) .ReturnsAsync(oldPatientInBed); _patientRepositoryMock.Setup(p => p.FindById(It.Is(id => id == mongoIdNewPatient))) .ReturnsAsync(newPatientInBed); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.UpdatePatientData(mongoIdNewPatient, patientNumber, It.Is(arg => arg.Equals(person)), false), Times.Once); _patientRepositoryMock.Verify( p => p.UpdateOneAsync(mongoIdOldPatient, It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocMovedId)), Times.Once); _patientRepositoryMock.Verify(p => p.Update(It.IsAny()), Times.Never()); } [Test] public async Task ADT_A12_TRANSFER_PATIENT_NOT_EXISTS_TO_NOT_EMPTY_BED_SHOULD_CHANGE_LAST_PATIENT_TO_TEMPORTAL_BED() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var mongoId = ObjectId.GenerateNewId(); var apiRequest = new ApiRequest { Type = "ADT_A12", PatientNumber = patientNumber, Patient = person, Location = location }; var oldPatientInBed = new Patient { Id = mongoId, UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = "123456", Person = new Person { FirstName = "Jose", LastName = "Luis", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male } }; _patientRepositoryMock.Setup(p => p.FindByUnitAndPocId(_unitId, _pocCinna02Id)).ReturnsAsync(oldPatientInBed); _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindById(mongoId)).ReturnsAsync(oldPatientInBed); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.UpdateOneAsync(mongoId, It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocMovedId)), Times.Once); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id && arg.PatientNumber == patientNumber)), Times.Once()); } [Test] public async Task ADT_A13_TRANSFER_PATIENT_NOT_EXISTS_TO_NOT_EMPTY_BED_SHOULD_CHANGE_LAST_PATIENT_TO_TEMPORTAL_BED() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var mongoId = ObjectId.GenerateNewId(); var apiRequest = new ApiRequest { Type = "ADT_A13", PatientNumber = patientNumber, Patient = person, Location = location }; var patient = new Patient { Id = mongoId, UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = patientNumber, Person = person }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindByPatientNumber(patientNumber)).ReturnsAsync(patient); _patientRepositoryMock.Setup(p => p.FindById(mongoId)).ReturnsAsync(patient); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.UpdateOneAsync(mongoId, It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id)), Times.Once); } [Test] public async Task ADT_A13_TRANSFER_PATIENT_NOT_EXISTS_TO_EMPTY_BED_SHOULD_CHANGE_LAST_PATIENT_TO_TEMPORTAL_BED() { var location = new PatientLocation("UCI5C", ""); const string patientNumber = "12345"; var recoveredLocation = new PatientLocation("UCI5C", "Recovered", "Recovered"); var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var mongoId = ObjectId.GenerateNewId(); var apiRequest = new ApiRequest { Type = "ADT_A13", PatientNumber = patientNumber, Patient = person, Location = location }; var patient = new Patient { Id = mongoId, UnitId = _unitId, PointOfCareId = _pocDeletedId, PatientNumber = patientNumber, Person = person }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _poCMappingServiceMock .Setup(i => i.Map(It.Is(l => l.UnitName == recoveredLocation.UnitName && l.Bed == recoveredLocation.Bed))) .ReturnsAsync(recoveredLocation); _patientRepositoryMock.Setup(p => p.FindByPatientNumber(patientNumber)).ReturnsAsync(patient); _patientRepositoryMock.Setup(p => p.FindById(mongoId)).ReturnsAsync(patient); _patientRepositoryMock.Setup(p => p.FindByUnitAndPocId(_unitId, _pocDeletedId)).ReturnsAsync(patient); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.UpdateOneAsync(mongoId, It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocRecoveredId)), Times.Once); } [Test] public async Task ADT_A31_Upadate_Patient() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Vill", Gender = PatientEnum.Gender.Male }; var mongoId = ObjectId.GenerateNewId(); var neWperson = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A31", PatientNumber = patientNumber, Patient = neWperson, Location = location }; var patient = new Patient { Id = mongoId, UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = patientNumber, Person = person }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindByPatientNumber(patientNumber)).ReturnsAsync(patient); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify(p => p.Update(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id && arg.Person != null && arg.Person.LastName == neWperson.LastName && arg.Person.BirthDate == neWperson.BirthDate)), Times.Once); } [Test] public async Task ADT_A31_Upadate_Patient_Not_Found_Not_Update() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; var neWperson = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A31", PatientNumber = patientNumber, Patient = neWperson, Location = location }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify(p => p.Update(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id && arg.Person != null && arg.Person.LastName == neWperson.LastName && arg.Person.BirthDate == neWperson.BirthDate)), Times.Never); } [Test] public async Task ADT_A39_Merge_Patient() { var location = new PatientLocation("UCI5C", "CINA02"); var oldLocation = new PatientLocation("XXXXXX", "XXXXXX"); const string patientNumber = "12345"; const string oldPatientNumber = "54321"; var person = new Person { FirstName = "Miguel", LastName = "Vill", Gender = PatientEnum.Gender.Male }; var mongoId = ObjectId.GenerateNewId(); var oldPerson = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A39", PatientNumber = patientNumber, OldPatientNumber = oldPatientNumber, Location = location }; var patient = new Patient { Id = mongoId, UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = patientNumber, Person = person }; var oldPatient = new Patient { Id = ObjectId.GenerateNewId(), UnitString = oldLocation.UnitName, Bed = oldLocation.Bed, PatientNumber = oldPatientNumber, Person = oldPerson }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindByPatientNumber(patientNumber)).ReturnsAsync(patient); _patientRepositoryMock.Setup(p => p.FindByPatientNumber(oldPatientNumber)).ReturnsAsync(oldPatient); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify(p => p.Delete(oldPatient.Id), Times.Once); } [Test] public async Task ADT_A39_Not_OldPatient_Not_Merge_Patient() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; const string oldPatientNumber = "54321"; var person = new Person { FirstName = "Miguel", LastName = "Vill", Gender = PatientEnum.Gender.Male }; var mongoId = ObjectId.GenerateNewId(); var apiRequest = new ApiRequest { Type = "ADT_A39", PatientNumber = patientNumber, OldPatientNumber = oldPatientNumber, Location = location }; var patient = new Patient { Id = mongoId, UnitId = _unitId, PointOfCareId = _pocCinna02Id, PatientNumber = patientNumber, Person = person }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindByPatientNumber(patientNumber)).ReturnsAsync(patient); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify(p => p.Delete(It.IsAny()), Times.Never); } [Test] public async Task ADT_A39_Not_Patient_Not_Merge_Patient() { var location = new PatientLocation("NEONATAL", "CINA02"); var oldLocation = new PatientLocation("XXXXXX", "XXXXXX"); const string patientNumber = "12345"; const string oldPatientNumber = "54321"; var oldPerson = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A39", PatientNumber = patientNumber, OldPatientNumber = oldPatientNumber, Location = location }; var oldPatient = new Patient { Id = ObjectId.GenerateNewId(), UnitString = oldLocation.UnitName, Bed = oldLocation.Bed, PatientNumber = oldPatientNumber, Person = oldPerson }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindByPatientNumber(oldPatientNumber)).ReturnsAsync(oldPatient); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify(p => p.Delete(oldPatient.Id), Times.Never); } [Test] public async Task ADT_A44_Upadate_Patient() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; const string oldPatientNumber = "54321"; var person = new Person { FirstName = "Miguel", LastName = "Vill", Gender = PatientEnum.Gender.Male }; var newPerson = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A44", PatientNumber = patientNumber, Patient = newPerson, Location = location, OldPatientNumber = oldPatientNumber }; var oldPatient = new Patient { Id = ObjectId.GenerateNewId(), UnitId = _unitId, PointOfCareId = _pocCinna02Id, Person = person }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); _patientRepositoryMock.Setup(p => p.FindByPatientNumber(oldPatientNumber)).ReturnsAsync(oldPatient); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify(p => p.Update(It.Is(arg => arg.PatientNumber == patientNumber)), Times.Once); } [Test] public async Task ADT_A44_Not_OldPatient_Not__Upadate_Patient() { var location = new PatientLocation("UCI5C", "CINA02"); const string patientNumber = "12345"; const string oldPatientNumber = "54321"; var newPerson = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var apiRequest = new ApiRequest { Type = "ADT_A44", PatientNumber = patientNumber, Patient = newPerson, Location = location, OldPatientNumber = oldPatientNumber }; _poCMappingServiceMock.Setup(i => i.Map(location)).ReturnsAsync(location); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify(p => p.Update(It.Is(arg => arg.PatientNumber == patientNumber)), Times.Never); } [Test] public async Task ICCA_Process_No_Patient_BD_Insert_ICCA_Patients() { var iccaPatients = new List { new() { Location = new PatientLocation("UCI5C", "CINA01"), PatientNumber = "patientNumber_1", PatientId = "patientId_1", AdmitTime = DateTime.Now }, new() { Location = new PatientLocation("UCI5C", "CINA02"), PatientNumber = "patientNumber_2", PatientId = "patientId_2", AdmitTime = DateTime.Now }, new() { Location = new PatientLocation("UCI5C", "CINA03"), PatientNumber = "patientNumber_3", PatientId = "patientId_3", AdmitTime = DateTime.Now }, new() { Location = new PatientLocation("UCI5C", "CINA04"), PatientNumber = "patientNumber_4", PatientId = "patientId_4", AdmitTime = DateTime.Now } }; var apiRequest = new ApiRequest { Type = "ICCA", IccaPatients = iccaPatients }; await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna01Id && arg.PatientNumber == iccaPatients[0].PatientNumber)), Times.Once); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna02Id && arg.PatientNumber == iccaPatients[1].PatientNumber)), Times.Once); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna03Id && arg.PatientNumber == iccaPatients[2].PatientNumber)), Times.Once); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna03Id && arg.PatientNumber == iccaPatients[3].PatientNumber)), Times.Once); } [Test] public async Task ICCA_Process_Patient_BD_Insert_ICCA_Patient_Pushed_Actual_Patient() { var location1 = new PatientLocation("UCI5C", "CINA01"); const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var iccaPatients = new List { new() { Location = location1, PatientNumber = "patientNumber_1", PatientId = "patientId_1", AdmitTime = DateTime.Now } }; var apiRequest = new ApiRequest { Type = "ICCA", IccaPatients = iccaPatients }; var patientInBd = new Patient { Id = ObjectId.GenerateNewId(), UnitId = _unitId, PointOfCareId = _pocCinna01Id, PatientNumber = patientNumber, Person = person }; _patientRepositoryMock.Setup(s => s.FindByPointOfCareId(_pocCinna01Id)).ReturnsAsync(patientInBd); _patientRepositoryMock.Setup(p => p.FindById(patientInBd.Id)).ReturnsAsync(patientInBd); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.UpdateOneAsync(It.Is(arg => arg == patientInBd.Id), It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocMovedId)), Times.Once); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna01Id && arg.PatientNumber == iccaPatients[0].PatientNumber)), Times.Once); } [Test] public async Task ICCA_Process_Patient_BD_No_Insert_ICCA_Patient_UNKNOWN_Actual_Patient() { const string patientNumber = "12345"; var person = new Person { FirstName = "Miguel", LastName = "Villanueva", BirthDate = new DateTime(), Gender = PatientEnum.Gender.Male }; var iccaPatients = new List(); var apiRequest = new ApiRequest { Type = "ICCA", IccaPatients = iccaPatients }; var patientInBd = new Patient { Id = ObjectId.GenerateNewId(), UnitId = _unitId, PointOfCareId = _pocCinna01Id, PatientNumber = patientNumber, Person = person }; _patientRepositoryMock.Setup(s => s.FindByPointOfCareId(_pocCinna01Id)).ReturnsAsync(patientInBd); _patientRepositoryMock.Setup(p => p.FindById(patientInBd.Id)).ReturnsAsync(patientInBd); await _patientService.SaveRequest(apiRequest); _patientRepositoryMock.Verify( p => p.UpdateOneAsync(It.Is(arg => arg == patientInBd.Id), It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocUnknowndId)), Times.Once); _patientRepositoryMock.Verify( p => p.InsertOneAsync(It.Is(arg => arg.UnitId == _unitId && arg.PointOfCareId == _pocCinna01Id && arg.PatientNumber == iccaPatients[0].PatientNumber)), Times.Never); } //TODO GeTBoxTest }