use of org.hisp.dhis.tracker.ValidationMode in project dhis2-core by dhis2.
the class DefaultTrackerValidationServiceTest method failFastModePreventsFurtherValidationAfterFirstErrorIsAdded.
@Test
void failFastModePreventsFurtherValidationAfterFirstErrorIsAdded() {
Event validEvent = event();
Event invalidEvent = event();
TrackerBundle bundle = newBundle().validationMode(ValidationMode.FAIL_FAST).events(events(invalidEvent, validEvent)).build();
ValidationHook hook1 = ValidationHook.builder().removeOnError(false).validateEvent((reporter, event) -> reporter.addErrorIf(() -> invalidEvent.equals(event), event, TrackerErrorCode.E1032)).build();
TrackerValidationHook hook2 = mock(TrackerValidationHook.class);
service = new DefaultTrackerValidationService(List.of(hook1, hook2), Collections.emptyList());
TrackerValidationReport report = service.validate(bundle);
assertTrue(report.hasErrors());
assertHasError(report, TrackerErrorCode.E1032, invalidEvent);
assertFalse(bundle.getEvents().contains(invalidEvent));
assertTrue(bundle.getEvents().contains(validEvent));
verifyNoInteractions(hook2);
}
use of org.hisp.dhis.tracker.ValidationMode in project dhis2-core by dhis2.
the class DefaultTrackerValidationServiceTest method fullValidationModeAddsAllErrorsToReport.
@Test
void fullValidationModeAddsAllErrorsToReport() {
// Test shows
// in ValidationMode==FULL all hooks are called even with entities that
// are already invalid (i.e. have an error
// in the validation report)
Event validEvent = event();
Event invalidEvent = event();
TrackerBundle bundle = newBundle().events(events(invalidEvent, validEvent)).build();
ValidationHook hook1 = ValidationHook.builder().removeOnError(false).validateEvent((reporter, event) -> reporter.addErrorIf(() -> invalidEvent.equals(event), event, TrackerErrorCode.E1032)).build();
ValidationHook hook2 = ValidationHook.builder().removeOnError(false).validateEvent((reporter, event) -> reporter.addErrorIf(() -> invalidEvent.equals(event), event, TrackerErrorCode.E9999)).build();
service = new DefaultTrackerValidationService(List.of(hook1, hook2), Collections.emptyList());
TrackerValidationReport report = service.validate(bundle);
assertTrue(report.hasErrors());
assertEquals(2, report.getErrors().size(), "both hooks should add 1 error each");
assertHasError(report, TrackerErrorCode.E1032, invalidEvent);
assertHasError(report, TrackerErrorCode.E9999, invalidEvent);
assertFalse(bundle.getEvents().contains(invalidEvent));
assertTrue(bundle.getEvents().contains(validEvent));
}
use of org.hisp.dhis.tracker.ValidationMode in project dhis2-core by dhis2.
the class DefaultTrackerValidationServiceTest method childEntitiesOfInvalidParentsAreStillValidated.
@Test
void childEntitiesOfInvalidParentsAreStillValidated() {
// Test shows
// the children of a tracked entity will still be validated even if it
// as a parent is invalid
TrackedEntity invalidTrackedEntity = trackedEntity();
Enrollment invalidEnrollment = enrollment();
invalidTrackedEntity.setEnrollments(enrollments(invalidEnrollment));
Event invalidEvent = event();
invalidEnrollment.setEvents(events(invalidEvent));
TrackerBundle bundle = newBundle().validationMode(ValidationMode.FULL).trackedEntities(trackedEntities(invalidTrackedEntity)).enrollments(invalidTrackedEntity.getEnrollments()).events(invalidEnrollment.getEvents()).build();
ValidationHook hook = ValidationHook.builder().validateTrackedEntity((reporter, te) -> reporter.addErrorIf(() -> invalidTrackedEntity.equals(te), te, TrackerErrorCode.E1090)).validateEnrollment((reporter, enrollment) -> reporter.addErrorIf(() -> invalidEnrollment.equals(enrollment), enrollment, TrackerErrorCode.E1069)).validateEvent((reporter, event) -> reporter.addErrorIf(() -> invalidEvent.equals(event), event, TrackerErrorCode.E1032)).build();
service = new DefaultTrackerValidationService(List.of(hook), Collections.emptyList());
TrackerValidationReport report = service.validate(bundle);
assertTrue(report.hasErrors());
assertEquals(3, report.getErrors().size());
assertHasError(report, TrackerErrorCode.E1090, invalidTrackedEntity);
assertHasError(report, TrackerErrorCode.E1069, invalidEnrollment);
assertHasError(report, TrackerErrorCode.E1032, invalidEvent);
assertTrue(bundle.getTrackedEntities().isEmpty());
assertTrue(bundle.getEnrollments().isEmpty());
assertTrue(bundle.getEvents().isEmpty());
}
Aggregations