public ValidationError Execute(Child child, NonBlockingValidationContext context) { // At least one of the race fields must = true if (! (child.AmericanIndianOrAlaskaNative || child.Asian || child.BlackOrAfricanAmerican || child.NativeHawaiianOrPacificIslander || child.White) ) { var fields = new string[] { "AmericanIndianOrAlaskaNative", "Asian", "BlackOrAfricanAmerican", "NativeHawaiianOrPacificIslander", "White" }; return(new ValidationError( fields: fields, message: $"One of {String.Join(",", fields)} must be true." )); } return(null); }
public void Execute_ReturnsError_IfConditionTrueAndFieldDoesNotExist_OrIsEmptyString( bool conditionResult, string fieldValue, bool doesError ) { // if var fieldName = "FieldName"; var entity = new TestValidatableEntity { FieldName = fieldValue }; // when var validationContext = new NonBlockingValidationContext(); var rule = new Mock <ConditionalFieldRequired <TestValidatableEntity> >("condition Message", fieldName, null); rule.Protected() .Setup <bool>("CheckCondition", new object[] { entity, validationContext }) .Returns(conditionResult); rule.CallBase = true; var result = rule.Object.Execute(entity, validationContext); // then Assert.Equal(doesError, result != null); }
public ValidationError Execute(Child child, NonBlockingValidationContext context) { if (child.Gender == Gender.Unspecified) { return(new ValidationError( field: "Gender", message: "Gender must be specified" )); } return(null); }
public ValidationError Execute(Family family, NonBlockingValidationContext context) { if (family != null) { var child = context.GetParentEntity <Child>(); // Enrollments for children living with foster families // are exempt from family determination validations if (child != null && !child.Foster) { var enrollment = context.GetParentEntity <Enrollment>(); if (enrollment != null) { var fundings = enrollment.Fundings ?? _fundings.GetFundingsByEnrollmentId(enrollment.Id); // If enrollment is funded if (fundings.Any(f => f.Source == FundingSource.CDC)) { // most recent determination must be < 1 year old from today var compareDate = DateTime.Now.Date; // unless validating in the context of a report, // in which case determination date must be < 1 year from // end of report's reporting period var report = context.GetParentEntity <CdcReport>(); if (report != null) { compareDate = report.ReportingPeriod?.PeriodEnd ?? _reportingPeriods.GetById(report.ReportingPeriodId).PeriodEnd; } var mostRecentDetermination = (family.Determinations ?? _determinations.GetDeterminationsByFamilyId(family.Id)) .OrderByDescending(d => d.DeterminationDate) .FirstOrDefault(); if (mostRecentDetermination != null) { if (mostRecentDetermination.DeterminationDate.HasValue && mostRecentDetermination.DeterminationDate < compareDate.AddYears(-1) ) { return(new ValidationError( field: "Determinations", message: "Annual income determinations is due" )); } } } } } } return(null); }
public ValidationError Execute(Child child, NonBlockingValidationContext context) { var certificates = child.C4KCertificates ?? _certificates.GetC4KCertificatesByChildId(child.Id); ValidateSubObject(certificates, child); if (certificates.Any(c => c.ValidationErrors.Count > 0)) { return(new ValidationError( field: "C4KCertificates", message: "C4KCertificates have validation errors", isSubObjectValidation: true )); } return(null); }
public ValidationError Execute(CdcReport report, NonBlockingValidationContext context) { var enrollments = report.Enrollments ?? _reports.GetEnrollmentsForReport(report); ValidateSubObject(enrollments, report); if (enrollments.Any(e => e.ValidationErrors.Count > 0)) { return(new ValidationError( field: "Enrollments", message: "Enrollments have validation errors", isSubObjectValidation: true )); } return(null); }
public void Execute_WithReportParentEntity_ReturnsError_IfEnrollmentFunded_AndDeterminationDateNotValid( bool enrollmentIsFunded, bool dateIsValid, bool doesError ) { // if var enrollment = new Enrollment { Fundings = new List <Funding>() }; if (enrollmentIsFunded) { enrollment.Fundings.Add(new Funding { Source = FundingSource.CDC }); } var periodEnd = DateTime.Now.Date.AddDays(-10); var report = new CdcReport(); var reportingPeriod = new ReportingPeriod { PeriodEnd = periodEnd }; report.GetType().GetProperty(nameof(report.ReportingPeriod)).SetValue(report, reportingPeriod, null); var determination = new FamilyDetermination { // a valid date is < 1 year older than report reporting period end DeterminationDate = dateIsValid ? periodEnd.AddMonths(-8) : periodEnd.AddMonths(-18) }; // when var fundings = new Mock <IFundingRepository>(); var reportingPeriods = new Mock <IReportingPeriodRepository>(); var rule = new IfEnrollmentFunded_DeterminationDateValid(fundings.Object, reportingPeriods.Object); var context = new NonBlockingValidationContext(); context.AddParentEntity(enrollment); context.AddParentEntity(report); var result = rule.Execute(determination, context); // then Assert.Equal(doesError, result != null); }
public ValidationError Execute(T entity, NonBlockingValidationContext context) { var prop = typeof(T).GetProperty(_fieldName); if (prop != null) { var value = prop.GetValue(entity); if (CheckCondition(entity, context) && (value == null || value as string == "")) { return(new ValidationError( field: _fieldName, message: $"{(_prettyFieldName != null ? _prettyFieldName : _fieldName)} is required when {_conditionalMessage}" )); } } return(null); }
public ValidationError Execute(T entity, NonBlockingValidationContext context) { var prop = typeof(T).GetProperty(_fieldName); if (prop != null) { var value = prop.GetValue(entity); if (value == null || value as string == "") { return(new ValidationError( message: $"{(_prettyFieldName != null ? _prettyFieldName : _fieldName)} is required", isSubObjectValidation: _isSubObjectValidation, field: _fieldName )); } } return(null); }
public ValidationError Execute(Enrollment enrollment, NonBlockingValidationContext context) { if (enrollment.ChildId != Guid.Empty) { var child = enrollment.Child ?? _children.GetChildById(enrollment.ChildId); ValidateSubObject(child, enrollment); if (child.ValidationErrors.Count > 0) { return(new ValidationError( field: "Child", message: "Child has validation errors", isSubObjectValidation: true )); } } return(null); }
public ValidationError Execute(Child child, NonBlockingValidationContext context) { if (child.FamilyId.HasValue) { var family = child.Family ?? _families.GetFamilyById(child.FamilyId.Value); ValidateSubObject(family, child); if (family.ValidationErrors.Count > 0) { return(new ValidationError( field: "Family", message: "Family has validation errors", isSubObjectValidation: true )); } } return(null); }
public ValidationError Execute(Enrollment enrollment, NonBlockingValidationContext context) { if (enrollment == null) { return(null); } var fundings = enrollment.Fundings ?? _fundings.GetFundingsByEnrollmentId(enrollment.Id); ValidateSubObject(fundings, enrollment); if (fundings.Any(f => f.ValidationErrors.Count > 0)) { return(new ValidationError( field: "Fundings", message: "Fundings has validation errors", isSubObjectValidation: true )); } return(null); }
public ValidationError Execute(Family family, NonBlockingValidationContext context) { var child = context.GetParentEntity <Child>(); // Enrollments for children living with foster families // are exempt from family determination validations if (child != null && !child.Foster && family != null) { var determinations = family.Determinations ?? _determinations.GetDeterminationsByFamilyId(family.Id); ValidateSubObject(determinations, family); if (determinations.Any(det => det.ValidationErrors.Count > 0)) { return(new ValidationError( field: "Determinations", message: "Determinations has validation error", isSubObjectValidation: true )); } } return(null); }
public void Execute_ReturnsError_IfEnrollmentFunded_AndDeterminationDateNotValid( bool enrollmentIsFunded, bool dateIsValid, bool doesError ) { // if var enrollment = new Enrollment { Fundings = new List <Funding>() }; if (enrollmentIsFunded) { enrollment.Fundings.Add(new Funding { Source = FundingSource.CDC }); } var determination = new FamilyDetermination { // a valid date is < 1 year older than TODAY DeterminationDate = dateIsValid ? DateTime.Now.Date.AddMonths(-8) : DateTime.Now.Date.AddMonths(-18) }; // when var fundings = new Mock <IFundingRepository>(); var reportingPeriods = new Mock <IReportingPeriodRepository>(); var rule = new IfEnrollmentFunded_DeterminationDateValid(fundings.Object, reportingPeriods.Object); var context = new NonBlockingValidationContext(); context.AddParentEntity(enrollment); var result = rule.Execute(determination, context); // then Assert.Equal(doesError, result != null); }
public ValidationError Execute(FamilyDetermination determination, NonBlockingValidationContext context) { var enrollment = context.GetParentEntity <Enrollment>(); if (enrollment == null) { return(null); } var fundings = enrollment.Fundings ?? _fundings.GetFundingsByEnrollmentId(enrollment.Id); if (fundings.Any(f => f.Source == FundingSource.CDC)) { // Generally, DeterminationDate must be < 1 year from today var compareDate = DateTime.Now.Date; // However, if validating in the context of report enrollments, // determination date must be < 1 year from end of reporting period var report = context.GetParentEntity <CdcReport>(); if (report != null) { compareDate = report.ReportingPeriod != null ? report.ReportingPeriod.PeriodEnd : _reportingPeriods.GetById(report.ReportingPeriodId).PeriodEnd; } if (determination.DeterminationDate < compareDate.AddYears(-1)) { return(new ValidationError( field: "DeterminationDate", message: "Annual income determination is due" )); } } return(null); }
protected override bool CheckCondition(C4KCertificate entity, NonBlockingValidationContext context) { return(!entity.EndDate.HasValue); }
protected abstract bool CheckCondition(T entity, NonBlockingValidationContext context);
public ValidationError Execute(Funding funding, NonBlockingValidationContext context) { if (!funding.FirstReportingPeriodId.HasValue) { return(null); } var currentEnrollment = funding.Enrollment ?? _enrollments.GetEnrollmentById(funding.EnrollmentId); var childId = currentEnrollment.ChildId; var otherCdcFundings = _fundings.GetFundingsByChildId(childId).Where(f => f.Source == FundingSource.CDC).Where(f => f.Id != funding.Id); var sortedFundings = otherCdcFundings.OrderBy(f => f.FirstReportingPeriod.PeriodStart); if (sortedFundings.Count() == 0) { return(null); } var firstReportingPeriodStart = funding.FirstReportingPeriod != null ? funding.FirstReportingPeriod.PeriodStart : _reportingPeriods.GetById(funding.FirstReportingPeriodId.Value).PeriodStart; DateTime?lastReportingPeriodEnd = null; if (funding.LastReportingPeriodId.HasValue) { lastReportingPeriodEnd = funding.LastReportingPeriod != null ? funding.LastReportingPeriod.PeriodEnd : _reportingPeriods.GetById(funding.LastReportingPeriodId.Value).PeriodEnd; } var doesOverlap = false; foreach (var currentFunding in sortedFundings) { if (doesOverlap) { break; } var currentFirstReportingPeriodStart = currentFunding.FirstReportingPeriod.PeriodStart; if (currentFirstReportingPeriodStart == firstReportingPeriodStart) { doesOverlap = true; } else if (currentFirstReportingPeriodStart < firstReportingPeriodStart) { if (currentFunding.LastReportingPeriod == null) { doesOverlap = true; } else { var currentLastReportingPeriodEnd = currentFunding.LastReportingPeriod.PeriodEnd; if (firstReportingPeriodStart <= currentLastReportingPeriodEnd) { doesOverlap = true; } } } else /* (firstReportingPeriod < currentFirstReportingPeriodStart) */ { if (lastReportingPeriodEnd == null) { doesOverlap = true; } else { if (currentFirstReportingPeriodStart <= lastReportingPeriodEnd) { doesOverlap = true; } } } } if (doesOverlap) { return(new ValidationError( message: "Cannot claim a child twice in a reporting period", isSubObjectValidation: false, field: "FirstReportingPeriod" )); } return(null); }
protected override bool CheckCondition(Child entity, NonBlockingValidationContext context) { return(entity.C4KCertificates != null && entity.C4KCertificates.Count != 0); }