public void GetYearOfLearningCommencementDateMeetsExpectation(string candidate)
        {
            // arrange
            var testDate = DateTime.Parse(candidate);

            var handler      = new Mock <IValidationErrorHandler>(MockBehavior.Strict);
            var mockDDRule07 = new Mock <IDerivedData_07Rule>(MockBehavior.Strict);
            var yearData     = new Mock <IAcademicYearDataService>(MockBehavior.Strict);

            yearData
            .Setup(x => x.GetAcademicYearOfLearningDate(testDate, AcademicYearDates.PreviousYearEnd))
            .Returns(DateTime.Today);

            var sut = new EmpStat_01Rule(handler.Object, mockDDRule07.Object, yearData.Object);

            // act, not interested in the result just that we hit a strict signature
            sut.GetYearOfLearningCommencementDate(testDate);

            // assert
            handler.VerifyAll();
            mockDDRule07.VerifyAll();
            yearData.VerifyAll();
        }
        public void IsApprenticeshipMeetsExpectation(bool expectation)
        {
            // arrange
            var mockItem = new Mock <ILearningDelivery>();

            var handler      = new Mock <IValidationErrorHandler>(MockBehavior.Strict);
            var mockDDRule07 = new Mock <IDerivedData_07Rule>(MockBehavior.Strict);

            mockDDRule07
            .Setup(x => x.IsApprenticeship(null))
            .Returns(expectation);
            var yeardata = new Mock <IAcademicYearDataService>(MockBehavior.Strict);

            var sut = new EmpStat_01Rule(handler.Object, mockDDRule07.Object, yeardata.Object);

            // act
            var result = sut.IsApprenticeship(mockItem.Object);

            // assert
            Assert.Equal(expectation, result);
            handler.VerifyAll();
            mockDDRule07.VerifyAll();
        }
        public void ValidItemDoesNotRaiseValidationMessage(int fundModel, string learnStart, string previousYearEnd)
        {
            // arrange
            const string LearnRefNumber = "123456789X";
            var          testDate       = DateTime.Parse(learnStart);

            var mockDelivery = new Mock <ILearningDelivery>();

            mockDelivery
            .SetupGet(y => y.FundModel)
            .Returns(fundModel);
            mockDelivery
            .SetupGet(y => y.LearnStartDate)
            .Returns(testDate);
            mockDelivery
            .SetupGet(y => y.ProgTypeNullable)
            .Returns(TypeOfLearningProgramme.IntermediateLevelApprenticeship);

            var deliveries = Collection.Empty <ILearningDelivery>();

            deliveries.Add(mockDelivery.Object);

            // ensure the status is INSIDE the qualifying date range
            var mockStatus = new Mock <ILearnerEmploymentStatus>();

            mockStatus
            .SetupGet(y => y.DateEmpStatApp)
            .Returns(testDate);

            var statii = Collection.Empty <ILearnerEmploymentStatus>();

            statii.Add(mockStatus.Object);

            var mockLearner = new Mock <ILearner>();

            mockLearner
            .SetupGet(x => x.LearnRefNumber)
            .Returns(LearnRefNumber);
            mockLearner
            .SetupGet(x => x.LearningDeliveries)
            .Returns(deliveries.AsSafeReadOnlyList());
            mockLearner
            .SetupGet(x => x.LearnerEmploymentStatuses)
            .Returns(statii.AsSafeReadOnlyList());

            // get the learner inside the qualifying date range
            mockLearner
            .SetupGet(x => x.DateOfBirthNullable)
            .Returns(testDate.AddYears(-20));

            var handler      = new Mock <IValidationErrorHandler>(MockBehavior.Strict);
            var mockDDRule07 = new Mock <IDerivedData_07Rule>(MockBehavior.Strict);

            mockDDRule07
            .Setup(x => x.IsApprenticeship(Moq.It.IsAny <int>()))
            .Returns(false);
            var yearData = new Mock <IAcademicYearDataService>(MockBehavior.Strict);

            yearData
            .Setup(x => x.GetAcademicYearOfLearningDate(testDate, AcademicYearDates.PreviousYearEnd))
            .Returns(DateTime.Parse(previousYearEnd));

            var sut = new EmpStat_01Rule(handler.Object, mockDDRule07.Object, yearData.Object);

            // act
            sut.Validate(mockLearner.Object);

            // assert
            handler.VerifyAll();
            mockDDRule07.VerifyAll();
            yearData.VerifyAll();
        }