public void IsQualifyingFundModelMeetsExpectation(bool expectation)
        {
            // arrange
            var mockItem = new Mock <ILearningDelivery>();

            var handler   = new Mock <IValidationErrorHandler>(MockBehavior.Strict);
            var commonOps = new Mock <IProvideRuleCommonOperations>(MockBehavior.Strict);

            commonOps
            .Setup(x => x.HasQualifyingFunding(
                       mockItem.Object,
                       10,  // TypeOfFunding.CommunityLearning,
                       35,  // TypeOfFunding.AdultSkills
                       36,  // TypeOfFunding.ApprenticeshipsFrom1May2017,
                       70,  // TypeOfFunding.EuropeanSocialFund,
                       81)) // TypeOfFunding.OtherAdult
            .Returns(expectation);

            var sut = new LearnDelFAMType_09Rule(handler.Object, commonOps.Object);

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

            // assert
            Assert.Equal(expectation, result);
        }
        public void ValidItemDoesNotRaiseValidationMessage(int candidate)
        {
            const string LearnRefNumber = "123456789X";
            const string LearnAimRef    = "salddfkjeifdnase";
            var          fam            = new Mock <ILearningDeliveryFAM>();
            var          fams           = new ILearningDeliveryFAM[] { fam.Object };

            var delivery = new Mock <ILearningDelivery>();

            delivery
            .SetupGet(y => y.LearnAimRef)
            .Returns(LearnAimRef);
            delivery
            .SetupGet(y => y.FundModel)
            .Returns(candidate);
            delivery
            .SetupGet(y => y.LearnStartDate)
            .Returns(DateTime.Parse("2019-07-31"));
            delivery
            .SetupGet(y => y.LearningDeliveryFAMs)
            .Returns(fams);

            var deliveries = new ILearningDelivery[] { delivery.Object };

            var learner = new Mock <ILearner>();

            learner
            .SetupGet(x => x.LearnRefNumber)
            .Returns(LearnRefNumber);
            learner
            .SetupGet(x => x.LearningDeliveries)
            .Returns(deliveries);

            var dd35 = new Mock <IDerivedData_35Rule>(MockBehavior.Strict);

            dd35.Setup(x => x.IsCombinedAuthorities(delivery.Object)).Returns(false);

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

            var learningDeliveryFAMQS = new Mock <ILearningDeliveryFAMQueryService>(MockBehavior.Strict);

            learningDeliveryFAMQS
            .Setup(x => x.HasLearningDeliveryFAMType(
                       delivery.Object.LearningDeliveryFAMs,
                       "SOF"))
            .Returns(false);

            var sut = new LearnDelFAMType_09Rule(handler.Object, learningDeliveryFAMQS.Object, dd35.Object);

            sut.Validate(learner.Object);

            handler.VerifyAll();
            learningDeliveryFAMQS.VerifyAll();
        }
        public void ValidItemDoesNotRaiseValidationMessage(int candidate, string monitor)
        {
            // arrange
            const string LearnRefNumber = "123456789X";
            const string learnAimRef    = "salddfkjeifdnase";

            var mockFAM = new Mock <ILearningDeliveryFAM>();

            mockFAM
            .SetupGet(x => x.LearnDelFAMType)
            .Returns(monitor.Substring(0, 3));
            mockFAM
            .SetupGet(x => x.LearnDelFAMCode)
            .Returns(monitor.Substring(3));

            var fams = Collection.Empty <ILearningDeliveryFAM>();

            fams.Add(mockFAM.Object);

            var mockDelivery = new Mock <ILearningDelivery>();

            mockDelivery
            .SetupGet(y => y.LearnAimRef)
            .Returns(learnAimRef);
            mockDelivery
            .SetupGet(y => y.FundModel)
            .Returns(candidate);
            mockDelivery
            .SetupGet(y => y.LearningDeliveryFAMs)
            .Returns(fams.AsSafeReadOnlyList());

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

            deliveries.Add(mockDelivery.Object);

            var mockLearner = new Mock <ILearner>();

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

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

            var sut = new LearnDelFAMType_09Rule(handler.Object);

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

            // assert
            handler.VerifyAll();
        }
        [InlineData(81)] // TypeOfFunding.OtherAdult
        public void ValidItemDoesNotRaiseValidationMessage(int candidate)
        {
            // arrange
            const string LearnRefNumber = "123456789X";
            const string learnAimRef    = "salddfkjeifdnase";

            var mockDelivery = new Mock <ILearningDelivery>();

            mockDelivery
            .SetupGet(y => y.LearnAimRef)
            .Returns(learnAimRef);
            mockDelivery
            .SetupGet(y => y.FundModel)
            .Returns(candidate);

            var deliveries = new ILearningDelivery[] { mockDelivery.Object };

            var mockLearner = new Mock <ILearner>();

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

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

            // these two operations control the path
            var commonOps = new Mock <IProvideRuleCommonOperations>(MockBehavior.Strict);

            commonOps
            .Setup(x => x.HasQualifyingFunding(
                       mockDelivery.Object,
                       10,  // TypeOfFunding.CommunityLearning,
                       35,  // TypeOfFunding.AdultSkills
                       36,  // TypeOfFunding.ApprenticeshipsFrom1May2017,
                       70,  // TypeOfFunding.EuropeanSocialFund,
                       81)) // TypeOfFunding.OtherAdult
            .Returns(true);

            commonOps
            .Setup(x => x.CheckDeliveryFAMs(mockDelivery.Object, It.IsAny <Func <ILearningDeliveryFAM, bool> >()))
            .Returns(false);

            var sut = new LearnDelFAMType_09Rule(handler.Object, commonOps.Object);

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

            // assert
            handler.VerifyAll();
        }
        public void HasDisqualifyingMonitorMeetsExpectation(string famType, string famCode, bool expectation)
        {
            var fam = new Mock <ILearningDeliveryFAM>();

            fam
            .SetupGet(y => y.LearnDelFAMType)
            .Returns(famType);
            fam
            .SetupGet(y => y.LearnDelFAMCode)
            .Returns(famCode);

            var fams = new List <ILearningDeliveryFAM>
            {
                fam.Object
            };

            var mockDelivery = new Mock <ILearningDelivery>();

            mockDelivery
            .SetupGet(y => y.LearningDeliveryFAMs)
            .Returns(fams);

            var dd35 = new Mock <IDerivedData_35Rule>(MockBehavior.Strict);

            dd35.Setup(x => x.IsCombinedAuthorities(mockDelivery.Object)).Returns(false);
            var handler = new Mock <IValidationErrorHandler>(MockBehavior.Strict);
            var learningDeliveryFAMQS = new Mock <ILearningDeliveryFAMQueryService>(MockBehavior.Strict);

            learningDeliveryFAMQS
            .Setup(x => x.HasLearningDeliveryFAMType(
                       mockDelivery.Object.LearningDeliveryFAMs,
                       "SOF"))
            .Returns(expectation);
            learningDeliveryFAMQS
            .Setup(x => x.HasLearningDeliveryFAMCodeForType(
                       mockDelivery.Object.LearningDeliveryFAMs,
                       "SOF",
                       "105"))
            .Returns(false);

            var result = new LearnDelFAMType_09Rule(handler.Object, learningDeliveryFAMQS.Object, dd35.Object).HasDisqualifyingMonitor(mockDelivery.Object);

            Assert.Equal(expectation, result);
        }
        public void HasQualifyingMonitorWithNullFAMsReturnsFalse()
        {
            var mockDelivery = new Mock <ILearningDelivery>();

            var dd35 = new Mock <IDerivedData_35Rule>(MockBehavior.Strict);

            dd35.Setup(x => x.IsCombinedAuthorities(mockDelivery.Object)).Returns(false);
            var handler = new Mock <IValidationErrorHandler>(MockBehavior.Strict);
            var learningDeliveryFAMQS = new Mock <ILearningDeliveryFAMQueryService>(MockBehavior.Strict);

            learningDeliveryFAMQS
            .Setup(x => x.HasLearningDeliveryFAMType(
                       mockDelivery.Object.LearningDeliveryFAMs,
                       "SOF"))
            .Returns(false);

            var result = new LearnDelFAMType_09Rule(handler.Object, learningDeliveryFAMQS.Object, dd35.Object).HasDisqualifyingMonitor(mockDelivery.Object);

            Assert.Equal(false, result);
        }
        public void HasESFAAdultFundingWithNullFAMsReturnsFalse()
        {
            // arrange
            var mockItem = new Mock <ILearningDelivery>();

            var handler   = new Mock <IValidationErrorHandler>(MockBehavior.Strict);
            var commonOps = new Mock <IProvideRuleCommonOperations>(MockBehavior.Strict);

            commonOps
            .Setup(x => x.CheckDeliveryFAMs(mockItem.Object, Moq.It.IsAny <Func <ILearningDeliveryFAM, bool> >()))
            .Returns(false);

            var sut = new LearnDelFAMType_09Rule(handler.Object, commonOps.Object);

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

            // assert
            Assert.False(result);
        }
        public void InvalidItemRaisesValidationMessage(int candidate)
        {
            const string LearnRefNumber = "123456789X";
            const string LearnAimRef    = "salddfkjeifdnase";

            var fam  = new Mock <ILearningDeliveryFAM>();
            var fams = new ILearningDeliveryFAM[] { fam.Object };

            var delivery = new Mock <ILearningDelivery>();

            delivery
            .SetupGet(y => y.LearnAimRef)
            .Returns(LearnAimRef);
            delivery
            .SetupGet(y => y.FundModel)
            .Returns(candidate);
            delivery
            .SetupGet(y => y.LearnStartDate)
            .Returns(DateTime.Parse("2019-07-31"));
            delivery
            .SetupGet(y => y.LearningDeliveryFAMs)
            .Returns(fams);

            var deliveries = new ILearningDelivery[] { delivery.Object };

            var learner = new Mock <ILearner>();

            learner
            .SetupGet(x => x.LearnRefNumber)
            .Returns(LearnRefNumber);
            learner
            .SetupGet(x => x.LearningDeliveries)
            .Returns(deliveries);

            var dd35 = new Mock <IDerivedData_35Rule>(MockBehavior.Strict);

            dd35.Setup(x => x.IsCombinedAuthorities(delivery.Object)).Returns(false);

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

            handler
            .Setup(x => x.Handle(RuleNameConstants.LearnDelFAMType_09, LearnRefNumber, 0, It.IsAny <IEnumerable <IErrorMessageParameter> >()));
            handler
            .Setup(x => x.BuildErrorMessageParameter("FundModel", candidate))
            .Returns(new Mock <IErrorMessageParameter>().Object);
            handler
            .Setup(x => x.BuildErrorMessageParameter("LearnDelFAMType", "SOF"))
            .Returns(new Mock <IErrorMessageParameter>().Object);
            handler
            .Setup(x => x.BuildErrorMessageParameter("LearnDelFAMCode", "105"))
            .Returns(new Mock <IErrorMessageParameter>().Object);

            var learningDeliveryFAMQS = new Mock <ILearningDeliveryFAMQueryService>(MockBehavior.Strict);

            learningDeliveryFAMQS
            .Setup(x => x.HasLearningDeliveryFAMType(
                       delivery.Object.LearningDeliveryFAMs,
                       "SOF"))
            .Returns(true);
            learningDeliveryFAMQS
            .Setup(x => x.HasLearningDeliveryFAMCodeForType(
                       delivery.Object.LearningDeliveryFAMs,
                       "SOF",
                       "105"))
            .Returns(false);

            var sut = new LearnDelFAMType_09Rule(handler.Object, learningDeliveryFAMQS.Object, dd35.Object);

            sut.Validate(learner.Object);

            handler.VerifyAll();
            learningDeliveryFAMQS.VerifyAll();
        }
        [InlineData(81)] // TypeOfFunding.OtherAdult
        public void InvalidItemRaisesValidationMessage(int candidate)
        {
            // arrange
            const string LearnRefNumber = "123456789X";
            const string learnAimRef    = "salddfkjeifdnase";

            var mockDelivery = new Mock <ILearningDelivery>();

            mockDelivery
            .SetupGet(y => y.LearnAimRef)
            .Returns(learnAimRef);
            mockDelivery
            .SetupGet(y => y.FundModel)
            .Returns(candidate);
            mockDelivery
            .SetupGet(y => y.AimSeqNumber)
            .Returns(0);

            var deliveries = new ILearningDelivery[] { mockDelivery.Object };

            var mockLearner = new Mock <ILearner>();

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

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

            handler
            .Setup(x => x.Handle(RuleNameConstants.LearnDelFAMType_09, LearnRefNumber, 0, It.IsAny <IEnumerable <IErrorMessageParameter> >()));
            handler
            .Setup(x => x.BuildErrorMessageParameter("FundModel", candidate))
            .Returns(new Mock <IErrorMessageParameter>().Object);
            handler
            .Setup(x => x.BuildErrorMessageParameter("LearnDelFAMType", "SOF"))     // Monitoring.Delivery.Types.SourceOfFunding
            .Returns(new Mock <IErrorMessageParameter>().Object);
            handler
            .Setup(x => x.BuildErrorMessageParameter("LearnDelFAMCode", "105"))
            .Returns(new Mock <IErrorMessageParameter>().Object);

            // these two operations control the path
            var commonOps = new Mock <IProvideRuleCommonOperations>(MockBehavior.Strict);

            commonOps
            .Setup(x => x.HasQualifyingFunding(
                       mockDelivery.Object,
                       10,  // TypeOfFunding.CommunityLearning,
                       35,  // TypeOfFunding.AdultSkills
                       36,  // TypeOfFunding.ApprenticeshipsFrom1May2017,
                       70,  // TypeOfFunding.EuropeanSocialFund,
                       81)) // TypeOfFunding.OtherAdult
            .Returns(true);
            commonOps
            .Setup(x => x.CheckDeliveryFAMs(mockDelivery.Object, It.IsAny <Func <ILearningDeliveryFAM, bool> >()))
            .Returns(true);

            var sut = new LearnDelFAMType_09Rule(handler.Object, commonOps.Object);

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

            // assert
            handler.VerifyAll();
        }
        public void InvalidItemRaisesValidationMessage(int candidate)
        {
            // arrange
            const string LearnRefNumber = "123456789X";
            const string learnAimRef    = "salddfkjeifdnase";

            var mockFAM = new Mock <ILearningDeliveryFAM>();

            mockFAM
            .SetupGet(x => x.LearnDelFAMType)
            .Returns(Monitoring.Delivery.Types.FullOrCoFunding);
            mockFAM
            .SetupGet(x => x.LearnDelFAMCode)
            .Returns("2");

            var fams = Collection.Empty <ILearningDeliveryFAM>();

            fams.Add(mockFAM.Object);

            var mockDelivery = new Mock <ILearningDelivery>();

            mockDelivery
            .SetupGet(y => y.LearnAimRef)
            .Returns(learnAimRef);
            mockDelivery
            .SetupGet(y => y.FundModel)
            .Returns(candidate);
            mockDelivery
            .SetupGet(y => y.LearningDeliveryFAMs)
            .Returns(fams.AsSafeReadOnlyList());

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

            deliveries.Add(mockDelivery.Object);

            var mockLearner = new Mock <ILearner>();

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

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

            handler
            .Setup(x => x.Handle(
                       Moq.It.Is <string>(y => y == LearnDelFAMType_09Rule.Name),
                       Moq.It.Is <string>(y => y == LearnRefNumber),
                       0,
                       Moq.It.IsAny <IEnumerable <IErrorMessageParameter> >()));
            handler
            .Setup(x => x.BuildErrorMessageParameter(
                       Moq.It.Is <string>(y => y == LearnDelFAMType_09Rule.MessagePropertyName),
                       Moq.It.IsAny <ILearningDelivery>()))
            .Returns(new Mock <IErrorMessageParameter>().Object);

            var sut = new LearnDelFAMType_09Rule(handler.Object);

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

            // assert
            handler.VerifyAll();
        }