public void ThenTheRequestMustContainAtLeastOneRecord()
        {
            var request = new GetActiveApprenticeshipsByUlnRequest();

            var result = _validator.Validate(request);

            result.IsValid.Should().BeFalse();
        }
        public void ShouldReturnTrueWhenRequestIsValid()
        {
            var request = new GetActiveApprenticeshipsByUlnRequest
            {
                Uln = "5830206233"
            };

            var result = _validator.Validate(request);

            result.IsValid.Should().BeTrue();
        }
        public async Task ThenIgnoreRequestsWithoutUlns()
        {
            var request = new GetActiveApprenticeshipsByUlnRequest
            {
                Uln = null
            };

            await _handler.Handle(request);

            _apprenticeshipRepository.Verify(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >()), Times.Never);
        }
        public async Task ThenTheRepositoryIsCalledToRetrieveApprenticeshipsByUln()
        {
            var request = new GetActiveApprenticeshipsByUlnRequest
            {
                Uln = TestUln
            };

            await _handler.Handle(request);

            _apprenticeshipRepository.Verify(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >()), Times.Once);
        }
        public async Task ThenTheRequestIsValidated()
        {
            var request = new GetActiveApprenticeshipsByUlnRequest
            {
                Uln = ""
            };

            await _handler.Handle(request);

            _validator.Verify(x => x.Validate(It.IsAny <GetActiveApprenticeshipsByUlnRequest>()), Times.Once);
        }
        public void ThenUlnsAreRequired()
        {
            var request = new GetActiveApprenticeshipsByUlnRequest
            {
                Uln = ""
            };

            var result = _validator.Validate(request);

            result.IsValid.Should().BeFalse();
            Assert.IsTrue(result.Errors.Any(x => x.PropertyName.Contains("Uln")));
        }
        public void ThenIfTheRequestIsInvalidThenAValidationExceptionIsThrown()
        {
            _validator.Setup(x => x.Validate(It.IsAny <GetActiveApprenticeshipsByUlnRequest>()))
            .Returns(() =>
                     new ValidationResult(new List <ValidationFailure>
            {
                new ValidationFailure("Error", "Error Message")
            }));

            var request = new GetActiveApprenticeshipsByUlnRequest();

            Func <Task> act = async() => await _handler.Handle(request);

            act.ShouldThrow <ValidationException>();
        }
        public async Task ThenLoggerIsCalledForEveryRecord()
        {
            var testRecords = CreateTestData(TestUln);

            _apprenticeshipRepository
            .Setup(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >()))
            .ReturnsAsync(testRecords);

            var request = new GetActiveApprenticeshipsByUlnRequest {
                Uln = TestUln
            };

            await _handler.Handle(request);

            _logger.Verify(x => x.Info(It.IsAny <string>(), null, null, null, null, null, null), Times.Exactly(testRecords.Count));
        }
        public async Task ThenTheResponseIsMappedCorrectly()
        {
            var testRecord = CreateTestRecord(TestUln, new DateTime(2018, 02, 15), new DateTime(2018, 04, 15));

            _apprenticeshipRepository
            .Setup(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >()))
            .ReturnsAsync(new List <ApprenticeshipResult> {
                testRecord
            });

            var request = new GetActiveApprenticeshipsByUlnRequest {
                Uln = TestUln
            };

            var result = await _handler.Handle(request);

            var firstResult = result.Data.First();

            testRecord.Should().NotBeNull();
            testRecord.ShouldBeEquivalentTo(firstResult);
        }