Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #8
0
        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);
                }
            }
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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);
        }