Example #1
0
        public void FundingLine_03_No_Error_WhenContractEndDate_IsNull(string year, string month)
        {
            _contractAllocations = new List <ContractAllocation>()
            {
                new ContractAllocation()
                {
                    FundingStreamPeriodCode = "APPS2021",
                    StartDate = new DateTime(2021, 06, 01),
                    EndDate   = null
                }
            };

            var easRecord = new EasCsvRecord()
            {
                AdjustmentType = "adjustment",
                FundingLine    = "FundingLine2021",
                CalendarYear   = year,
                CalendarMonth  = month,
                Value          = "10"
            };

            _validator = new BusinessRulesValidator(_contractAllocations, _fundingLineContractTypeMappings, paymentTypes, null, null, dateTimeProviderMock.Object, 1);
            var result = _validator.Validate(easRecord);

            Assert.DoesNotContain(result.Errors, x => x.ErrorCode.Equals("FundingLine_03"));
        }
        public void NotHaveError_When_DevolvedSourceOfFunding_DoesNotExist_For_NonRequired_Fundlines(string fundingLine, string devolvedSourceOfFunding)
        {
            easRecord.FundingLine = fundingLine;
            easRecord.DevolvedAreaSourceOfFunding = devolvedSourceOfFunding;
            _validator = new BusinessRulesValidator(_contractAllocations, _fundingLineContractTypeMappings, paymentTypes, _devolvedContracts, _sofCodeDictionary, dateTimeProviderMock.Object, 1);
            var result = _validator.Validate(easRecord);

            Assert.DoesNotContain(result.Errors, x => x.ErrorCode.Equals("DevolvedAreaSourceOfFunding_02"));
        }
        public void DevolvedAreaSourceOfFunding_04_NoError_ContractValid()
        {
            easRecord.FundingLine   = "Adult Education - Eligible for MCA/GLA funding (non-procured)";
            easRecord.CalendarMonth = "10";
            easRecord.DevolvedAreaSourceOfFunding = "116";
            _validator = new BusinessRulesValidator(_contractAllocations, _fundingLineContractTypeMappings, paymentTypes, _devolvedContracts, _sofCodeDictionary, dateTimeProviderMock.Object, 1);

            var result = _validator.Validate(easRecord);

            Assert.DoesNotContain(result.Errors, x => x.ErrorCode.Equals("DevolvedAreaSourceOfFunding_04"));
        }
        public void HaveError_When_AdjustmentType_IsNotFound(string adjustmentType)
        {
            var easRecord = new EasCsvRecord()
            {
                CalendarMonth  = "8",
                CalendarYear   = "2020",
                Value          = "1",
                AdjustmentType = adjustmentType
            };

            dateTimeProviderMock.Setup(x => x.GetNowUtc()).Returns(new DateTime(2020, 09, 01));
            _validator = new BusinessRulesValidator(null, null, paymentTypes, null, null, dateTimeProviderMock.Object, 1);
            var validationResult = _validator.Validate(easRecord);

            _validator.ShouldHaveValidationErrorFor(x => x.AdjustmentType, easRecord).WithErrorCode("AdjustmentType_01");
        }
        public void Not_HaveAnError_WhenCalendarYear_Is_Valid()
        {
            var easRecord = new EasCsvRecord()
            {
                CalendarMonth  = "8",
                CalendarYear   = "2020",
                Value          = "1",
                AdjustmentType = "AdjustmentType",
                FundingLine    = "FundingLine"
            };

            dateTimeProviderMock.Setup(x => x.GetNowUtc()).Returns(new DateTime(2020, 09, 01));
            _validator = new BusinessRulesValidator(_contractAllocations, _fundingLineContractTypeMappings, paymentTypes, null, null, dateTimeProviderMock.Object, 1);
            var result = _validator.Validate(easRecord);

            Assert.True(result.IsValid);
        }
        public void AllowValidAlphaNumericCharacters_When_Validating_AdjustmentType(string adjustmentType)
        {
            var easRecord = new EasCsvRecord()
            {
                CalendarMonth  = "8",
                CalendarYear   = "2020",
                Value          = "1",
                FundingLine    = "Funding-123+.Line",
                AdjustmentType = adjustmentType
            };

            dateTimeProviderMock.Setup(x => x.GetNowUtc()).Returns(new DateTime(2020, 09, 01));
            _validator = new BusinessRulesValidator(_contractAllocations, _fundingLineContractTypeMappings, paymentTypes, null, null, dateTimeProviderMock.Object, 1);
            var result = _validator.Validate(easRecord);

            Assert.True(result.IsValid);
        }
Example #7
0
        public void FundingLine_03_NotHaveError_When_ContractTypeIsNotRequiredForFundline(string fundline)
        {
            var easRecord = new EasCsvRecord()
            {
                CalendarMonth  = "7",
                CalendarYear   = "2020",
                Value          = "1",
                FundingLine    = fundline,
                AdjustmentType = "adjustmentType"
            };

            dateTimeProviderMock.Setup(x => x.GetNowUtc()).Returns(new DateTime(2020, 09, 01));
            _validator = new BusinessRulesValidator(_contractAllocations, _fundingLineContractTypeMappings, paymentTypes, null, null, dateTimeProviderMock.Object, 1);
            var result = _validator.Validate(easRecord);

            Assert.DoesNotContain(result.Errors, x => x.ErrorCode.Equals("FundingLine_03"));
        }
        public void NotHaveErrorWhenCalendarMonthAndYearAreInTheAcademicYear(string calendarMonth, string calendarYear)
        {
            var easRecord = new EasCsvRecord()
            {
                CalendarMonth  = calendarMonth,
                CalendarYear   = calendarYear,
                Value          = "1",
                AdjustmentType = "AdjustmentType",
                FundingLine    = "FundingLine"
            };

            // Mock future date , so that validation doesn't fail on Calendar Month future date
            dateTimeProviderMock.Setup(x => x.GetNowUtc()).Returns(new DateTime(2021, 10, 01));
            _validator = new BusinessRulesValidator(_contractAllocations, _fundingLineContractTypeMappings, paymentTypes, null, null, dateTimeProviderMock.Object, 1);
            var result = _validator.Validate(easRecord);

            Assert.False(result?.Errors != null && result.Errors.Any(x => x.ErrorCode == $"CalendarYearCalendarMonth_02"));
        }
        public void HaveError_WhenCalendarYear_Is_NotValid(string calendarYear)
        {
            var easRecord = new EasCsvRecord()
            {
                CalendarMonth  = "12",
                CalendarYear   = calendarYear,
                Value          = "1",
                AdjustmentType = "AdjustmentType",
                FundingLine    = "FundingLine"
            };

            dateTimeProviderMock.Setup(x => x.GetNowUtc()).Returns(new DateTime(2020, 09, 01));
            _validator = new BusinessRulesValidator(null, null, paymentTypes, null, null, dateTimeProviderMock.Object, 1);
            _validator.ShouldHaveValidationErrorFor(x => x.CalendarYear, easRecord).WithErrorCode("CalendarYear_01");
            var result = _validator.Validate(easRecord);
            //Assert.False(result.IsValid);
            //Assert.Equal("The CalendarYear is not valid.", result.Errors[0].ErrorMessage);
            //Assert.Equal("CalendarYear_01", result.Errors[0].ErrorCode);
        }
        private async Task <List <ValidationErrorModel> > ValidateAsync(IEasJobContext easJobContext, IReadOnlyDictionary <string, ValidationErrorRule> validationErrorReferenceData, IEnumerable <EasCsvRecord> easCsvRecords, CancellationToken cancellationToken)
        {
            List <ValidationResult> validationResults = new List <ValidationResult>();
            List <ValidationResult> businessRulesValidationResults = new List <ValidationResult>();

            cancellationToken.ThrowIfCancellationRequested();

            List <PaymentType> paymentTypes = await _easPaymentService.GetAllPaymentTypes(cancellationToken);

            List <ContractAllocation> contractsForProvider = await _fcsDataService.GetContractsForProviderAsync(easJobContext.Ukprn, cancellationToken);

            List <FundingLineContractTypeMapping> fundingLineContractTypeMappings = await _fundingLineContractTypeMappingDataService.GetAllFundingLineContractTypeMappings(cancellationToken);

            var devolvedContracts = await _fcsDataService.GetDevolvedContractsForProviderAsync(easJobContext.Ukprn, cancellationToken);

            var sofCodeMcaShortCodeDictionary = await _postcodesDataService.GetMcaShortCodesForSofCodesAsync(DataServiceConstants.ValidDevolvedSourceOfFundingCodes, cancellationToken);

            BusinessRulesValidator validator = new BusinessRulesValidator(contractsForProvider, fundingLineContractTypeMappings, paymentTypes, devolvedContracts, sofCodeMcaShortCodeDictionary, _dateTimeProvider, easJobContext.ReturnPeriod);

            // Business Rule validators
            foreach (EasCsvRecord easRecord in easCsvRecords)
            {
                ValidationResult validate = validator.Validate(easRecord);
                if (!validate.IsValid)
                {
                    businessRulesValidationResults.Add(validate);
                }
            }

            // Cross Record Validation
            var crossRecordValidationResult = new CrossRecordValidator().Validate(easCsvRecords);

            validationResults.AddRange(businessRulesValidationResults);
            if (!crossRecordValidationResult.IsValid)
            {
                validationResults.Add(crossRecordValidationResult);
            }

            var validationErrorList = _validationErrorBuilder.BuildValidationErrors(validationResults, validationErrorReferenceData).ToList();

            return(validationErrorList);
        }
        private IEnumerable<ValidationMessage> ValidateUser(User newUser)
        {
            IBusinessRulesValidator businessRuleValidator = new BusinessRulesValidator();
            businessRuleValidator.Add(UserModelValidator, newUser);
            businessRuleValidator.Add(PasswordPolicyRuleValidator, newUser);

            return businessRuleValidator.Validate();
        }
        /// <summary>
        /// Validates the specified password policy entity.
        /// </summary>
        /// <param name="passwordPolicy">The password policy.</param>
        private IEnumerable<ValidationMessage> ValidatePasswordPolicy(PasswordPolicy passwordPolicy)
        {
            IBusinessRulesValidator validator = new BusinessRulesValidator();
            validator.Add(PasswordPolicyValidator, passwordPolicy);

            return validator.Validate();
        }