public async Task ThenIfDatesFallWithinRangeOfDifferentExistingApprenticeshipThenOverlapsBoth() { //Arrange _apprenticeshipRepository.Setup(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >())) .ReturnsAsync(CreateTestData()); var request = new GetOverlappingApprenticeshipsRequest { OverlappingApprenticeshipRequests = new List <ApprenticeshipOverlapValidationRequest> { new ApprenticeshipOverlapValidationRequest { Uln = "1234567890", StartDate = new DateTime(2018, 03, 15), EndDate = new DateTime(2018, 07, 15) } } }; //Act var result = await _handler.Handle(request); //Assert Assert.AreEqual(2, result.Data.Count); }
public async Task ThenIfDatesStraddleExistingApprenticeshipThenIsOverlapping(DateTime startDate, DateTime endDate) { //Arrange _apprenticeshipRepository.Setup(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >())) .ReturnsAsync(CreateTestData()); var request = new GetOverlappingApprenticeshipsRequest { OverlappingApprenticeshipRequests = new List <ApprenticeshipOverlapValidationRequest> { new ApprenticeshipOverlapValidationRequest { Uln = "1234567890", StartDate = startDate, EndDate = endDate } } }; //Act var result = await _handler.Handle(request); //Assert Assert.AreEqual(1, result.Data.Count); }
public async Task ThenIfEndDateFallsWithinRangeOfExistingApprenticeshipThenIsOverlapping() { //Arrange _apprenticeshipRepository.Setup(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >())) .ReturnsAsync(CreateSingleRecordTestData()); var request = new GetOverlappingApprenticeshipsRequest { OverlappingApprenticeshipRequests = new List <ApprenticeshipOverlapValidationRequest> { new ApprenticeshipOverlapValidationRequest { Uln = "1234567890", StartDate = new DateTime(2018, 01, 15), EndDate = new DateTime(2018, 03, 15) } } }; //Act var result = await _handler.Handle(request); //Assert Assert.AreEqual(1, result.Data.Count); Assert.AreEqual(ValidationFailReason.OverlappingEndDate, result.Data[0].ValidationFailReason); }
public async Task ThenTheOverlapCheckDisregardsDatesWithinTheSameMonth(DateTime startDate, DateTime endDate) { //Arrange _apprenticeshipRepository.Setup(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >())) .ReturnsAsync(CreateTestData()); var request = new GetOverlappingApprenticeshipsRequest { OverlappingApprenticeshipRequests = new List <ApprenticeshipOverlapValidationRequest> { new ApprenticeshipOverlapValidationRequest { Uln = "1234567890", StartDate = startDate, EndDate = endDate } } }; //Act var result = await _handler.Handle(request); //Assert Assert.IsEmpty(result.Data); }
public async Task ThenIfNoUlnsMatchInputThenNotOverlapping() { //Arrange _apprenticeshipRepository.Setup(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >())) .ReturnsAsync(CreateSingleRecordTestData()); var request = new GetOverlappingApprenticeshipsRequest { OverlappingApprenticeshipRequests = new List <ApprenticeshipOverlapValidationRequest> { new ApprenticeshipOverlapValidationRequest { Uln = "999999999", StartDate = new DateTime(2018, 01, 1), EndDate = new DateTime(2018, 06, 30) } } }; //Act var result = await _handler.Handle(request); //Assert Assert.IsEmpty(result.Data); }
public async Task ThenIfDatesDoNotFallWithinRangeOfExistingApprenticeshipThenNotOverlapping(DateTime startDate, DateTime endDate) { //Arrange _apprenticeshipRepository.Setup(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >())) .ReturnsAsync(CreateSingleRecordTestData()); var request = new GetOverlappingApprenticeshipsRequest { OverlappingApprenticeshipRequests = new List <ApprenticeshipOverlapValidationRequest> { new ApprenticeshipOverlapValidationRequest { Uln = "1234567890", StartDate = startDate, EndDate = endDate } } }; //Act var result = await _handler.Handle(request); //Assert Assert.IsEmpty(result.Data); }
public void ThenTheRequestMustContainAtLeastOneRecord() { //Arrange var request = new GetOverlappingApprenticeshipsRequest(); //Act var result = _validator.Validate(request); //Assert Assert.IsFalse(result.IsValid); }
public async Task ThenTheRequestIsValidated() { //Arrange var request = new GetOverlappingApprenticeshipsRequest { OverlappingApprenticeshipRequests = new List <ApprenticeshipOverlapValidationRequest>() }; //Act await _handler.Handle(request); //Assert _validator.Verify(x => x.Validate(It.IsAny <GetOverlappingApprenticeshipsRequest>()), Times.Once); }
public void ThenEndDateIsRequired() { //Arrange var request = new GetOverlappingApprenticeshipsRequest { OverlappingApprenticeshipRequests = new List <ApprenticeshipOverlapValidationRequest> { new ApprenticeshipOverlapValidationRequest() } }; //Act var result = _validator.Validate(request); //Assert Assert.IsFalse(result.IsValid); Assert.IsTrue(result.Errors.Any(x => x.PropertyName.Contains(nameof(ApprenticeshipOverlapValidationRequest.EndDate)))); }
private async Task ValidateOverlaps(List <Apprenticeship> apprenticeships) { _logger.Info("Performing overlap validation for bulk upload"); var watch = Stopwatch.StartNew(); var overlapValidationRequest = new GetOverlappingApprenticeshipsRequest { OverlappingApprenticeshipRequests = new List <ApprenticeshipOverlapValidationRequest>() }; var i = 0; foreach (var apprenticeship in apprenticeships.Where(x => x.StartDate.HasValue && x.EndDate.HasValue && !string.IsNullOrEmpty(x.ULN))) { overlapValidationRequest.OverlappingApprenticeshipRequests.Add(new ApprenticeshipOverlapValidationRequest { ApprenticeshipId = i, //assign a row id, as this value will be zero for files Uln = apprenticeship.ULN, StartDate = apprenticeship.StartDate.Value, EndDate = apprenticeship.EndDate.Value }); i++; } _logger.Trace($"Building Overlap validation command took {watch.ElapsedMilliseconds} milliseconds"); watch = Stopwatch.StartNew(); if (overlapValidationRequest.OverlappingApprenticeshipRequests.Any()) { var overlapResponse = await _mediator.SendAsync(overlapValidationRequest); watch.Stop(); _logger.Trace($"Overlap validation took {watch.ElapsedMilliseconds} milliseconds"); if (overlapResponse.Data.Any()) { _logger.Info($"Found {overlapResponse.Data.Count} overlapping errors"); var errors = overlapResponse.Data.Select(overlap => new ValidationFailure(string.Empty, overlap.ValidationFailReason.ToString())).ToList(); throw new ValidationException(errors); } } }
public async Task ThenApprenticeshipStoppedBeforeStartedShouldBeIgnored() { //Arrange _apprenticeshipRepository.Setup(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >())) .ReturnsAsync(new List <ApprenticeshipResult> { new ApprenticeshipResult { Id = 666, EmployerAccountId = 1, LegalEntityName = "Test Corp", ProviderId = 999, Uln = "123", StartDate = new DateTime(2018, 01, 01), EndDate = new DateTime(2018, 06, 01), StopDate = new DateTime(2018, 01, 01), PaymentStatus = PaymentStatus.Withdrawn } }); var request = new GetOverlappingApprenticeshipsRequest { OverlappingApprenticeshipRequests = new List <ApprenticeshipOverlapValidationRequest> { new ApprenticeshipOverlapValidationRequest { ApprenticeshipId = 2345, Uln = "123", StartDate = new DateTime(2017, 12, 01), EndDate = new DateTime(2018, 09, 01) } } }; //Act var result = await _handler.Handle(request); //Assert Assert.IsEmpty(result.Data); }
public async Task ThenIgnoreRequestsWithoutUlns() { //Arrange var request = new GetOverlappingApprenticeshipsRequest { OverlappingApprenticeshipRequests = new List <ApprenticeshipOverlapValidationRequest> { new ApprenticeshipOverlapValidationRequest { Uln = null, StartDate = new DateTime(2017, 10, 1), EndDate = new DateTime(2017, 11, 1) } } }; //Act await _handler.Handle(request); //Assert _apprenticeshipRepository.Verify(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >()), Times.Never); }
public async Task ThenTheRepositoryIsCalledToRetrieveApprenticeshipsByUln() { //Arrange var request = new GetOverlappingApprenticeshipsRequest { OverlappingApprenticeshipRequests = new List <ApprenticeshipOverlapValidationRequest> { new ApprenticeshipOverlapValidationRequest { Uln = "1234567890", StartDate = new DateTime(2017, 10, 1), EndDate = new DateTime(2017, 11, 1) } } }; //Act await _handler.Handle(request); //Assert _apprenticeshipRepository.Verify(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >()), Times.Once); }
public async Task ThenAnExistingApprenticeshipShouldNotBeConsideredAsOverlappingWithItself() { //Arrange _apprenticeshipRepository.Setup(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >())) .ReturnsAsync(new List <ApprenticeshipResult> { new ApprenticeshipResult { Id = 666, EmployerAccountId = 1, LegalEntityName = "Test Corp", ProviderId = 999, Uln = "1234567890", StartDate = new DateTime(2018, 03, 15), EndDate = new DateTime(2018, 05, 15) } }); var request = new GetOverlappingApprenticeshipsRequest { OverlappingApprenticeshipRequests = new List <ApprenticeshipOverlapValidationRequest> { new ApprenticeshipOverlapValidationRequest { ApprenticeshipId = 666, Uln = "1234567890", StartDate = new DateTime(2018, 02, 15), EndDate = new DateTime(2018, 04, 15) } } }; //Act var result = await _handler.Handle(request); //Assert Assert.IsEmpty(result.Data); }