public async Task TestGetByNumberInputMatches() { // Arrange var phoneNumbers = GeneratePhoneNumberEntityList(); var mockDbSet = phoneNumbers.AsQueryable().BuildMockDbSet(); var mockContext = new Mock <DemographicsDbContext>(); mockContext .Setup(x => x.Set <PhoneNumber>()) .Returns(mockDbSet.Object) .Verifiable(); var testModel = new PhoneNumberInputModel { Number = "1234567890" }; var repository = new PhoneNumberRepository(mockContext.Object); // Act var result = await repository.GetByNumber(testModel); // Assert Assert.NotNull(result); Assert.Equal("1234567890", result.Number); }
/// <summary> /// Handle an incoming <see cref="PhoneNumberInputModel"/> DTO. /// </summary> /// <param name="entity"></param> /// <param name="model"></param> /// <returns></returns> private async Task HandleIncomingPhoneNumber(Patient entity, PhoneNumberInputModel model) { if (entity == null || model == null || string.IsNullOrEmpty(model.Number)) { throw new ArgumentNullException(); } // Does a functionally identical entity already exist? var result = await _unitOfWork.PhoneNumberRepository.GetByNumber(model); if (result == null) // No--create a new entity and link it up { var phoneNumber = _mapper.Map <PhoneNumber>(model); // Get rid of symbols // phoneNumber.Number = Regex.Replace(phoneNumber.Number, @"[- ().]", ""); _unitOfWork.PhoneNumberRepository.Create(phoneNumber); entity.PatientPhoneNumbers.Add(new PatientPhoneNumber { Patient = entity, PhoneNumber = phoneNumber }); } // Yes--link it up if it isn't already linked (if it is already linked, no need to do anything) else if (!entity.PatientPhoneNumbers.Any(pa => pa.PatientId == entity.Id && pa.PhoneNumberId == result.Id)) { entity.PatientPhoneNumbers.Add(new PatientPhoneNumber { Patient = entity, PhoneNumber = result }); } }
/// <summary> /// Gets a <see cref="PhoneNumber"/> entity by its <seealso cref="PhoneNumber.Number"/> property. /// </summary> /// <param name="model"></param> /// <returns></returns> /// <exception cref="ArgumentNullException"></exception> public async Task <PhoneNumber> GetByNumber(PhoneNumberInputModel model) { if (model == null || string.IsNullOrWhiteSpace(model.Number)) { throw new ArgumentNullException(); } var numberToCompare = Regex.Replace(model.Number, @"[- ().]", ""); var result = await base.GetByCondition(pn => pn.Number.Contains(numberToCompare)) .FirstOrDefaultAsync(); return(result); }
public void TestGetNumberModelNumberEmpty() { // Arrange var repository = new PhoneNumberRepository(null); var testObject = new PhoneNumberInputModel { Number = "" }; // Act async Task <PhoneNumber> TestAction() => await repository.GetByNumber(testObject); // Assert Assert.ThrowsAsync <ArgumentNullException>(TestAction); }