use of org.hisp.dhis.tracker.bundle.TrackerBundle in project dhis2-core by dhis2.
the class EventProgramPreProcessorTest method testProgramStageHasNoReferenceToProgram.
@Test
void testProgramStageHasNoReferenceToProgram() {
// Given
ProgramStage programStage = new ProgramStage();
programStage.setUid("LGSWs20XFvy");
when(preheat.get(ProgramStage.class, "LGSWs20XFvy")).thenReturn(programStage);
Event event = new Event();
event.setProgramStage(programStage.getUid());
TrackerBundle bundle = TrackerBundle.builder().events(Collections.singletonList(event)).preheat(preheat).build();
// When
preProcessorToTest.process(bundle);
verify(preheat, never()).put(TrackerIdentifier.UID, programStage.getProgram());
}
use of org.hisp.dhis.tracker.bundle.TrackerBundle in project dhis2-core by dhis2.
the class DefaultTrackerValidationServiceTest method needsToRunPreventsHookExecutionIfReturnsFalse.
@Test
void needsToRunPreventsHookExecutionIfReturnsFalse() {
Event invalidEvent = event();
TrackerBundle bundle = newBundle().events(events(invalidEvent)).build();
ValidationHook hook1 = ValidationHook.builder().needsToRun(false).validateEvent((reporter, event) -> reporter.addErrorIf(() -> invalidEvent.equals(event), event, TrackerErrorCode.E1032)).build();
service = new DefaultTrackerValidationService(List.of(hook1), Collections.emptyList());
TrackerValidationReport report = service.validate(bundle);
assertFalse(report.hasErrors());
}
use of org.hisp.dhis.tracker.bundle.TrackerBundle in project dhis2-core by dhis2.
the class DefaultTrackerValidationServiceTest method warningsDoNotInvalidateAndRemoveEntities.
@Test
void warningsDoNotInvalidateAndRemoveEntities() {
Event validEvent = event();
TrackerBundle bundle = newBundle().events(events(validEvent)).build();
ValidationHook hook = ValidationHook.builder().validateEvent((reporter, event) -> {
if (validEvent.equals(event)) {
reporter.addWarning(event, TrackerErrorCode.E1120);
}
}).build();
service = new DefaultTrackerValidationService(List.of(hook), Collections.emptyList());
TrackerValidationReport report = service.validate(bundle);
assertFalse(report.hasErrors());
assertTrue(report.hasWarnings());
assertEquals(1, report.getWarnings().size());
assertHasWarning(report, TrackerErrorCode.E1120, validEvent);
assertTrue(bundle.getEvents().contains(validEvent));
}
use of org.hisp.dhis.tracker.bundle.TrackerBundle 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.bundle.TrackerBundle in project dhis2-core by dhis2.
the class DefaultTrackerValidationServiceTest method removeOnErrorHookPreventsFurtherValidationOfInvalidEntityEvenInFullValidationMode.
@Test
void removeOnErrorHookPreventsFurtherValidationOfInvalidEntityEvenInFullValidationMode() {
// Test shows
// 1. Hooks with removeOnError==true remove invalid entities from the
// TrackerBundle to prevent
// subsequent hooks from validating it
// 2. the TrackerBundle is mutated to only contain valid DTOs after
// validation
//
// Currently, the bundle is mutated by
// 1. AbstractTrackerDtoValidationHook removes invalid DTOs if the hook
// has removeOnError == true
// 2. DefaultTrackerValidationService removes invalid DTOs if they were
// not previously removed
// by AbstractTrackerDtoValidationHook i.e. hooks having removeOnError
// == false
Event validEvent = event();
Event invalidEvent = event();
TrackerBundle bundle = newBundle().events(events(invalidEvent, validEvent)).build();
ValidationHook removeOnError = ValidationHook.builder().removeOnError(true).validateEvent((reporter, event) -> reporter.addErrorIf(() -> invalidEvent.equals(event), event, TrackerErrorCode.E1032)).build();
// using default AbstractTrackerDtoValidationHook behavior of
// removeOnError==false
ValidationHook doNotRemoveOnError = ValidationHook.builder().validateEvent((reporter, event) -> reporter.addErrorIf(() -> invalidEvent.equals(event), event, TrackerErrorCode.E9999)).build();
service = new DefaultTrackerValidationService(List.of(removeOnError, doNotRemoveOnError), Collections.emptyList());
TrackerValidationReport report = service.validate(bundle);
assertTrue(report.hasErrors());
assertEquals(1, report.getErrors().size(), "only remove on error hook should add 1 error");
assertHasError(report, TrackerErrorCode.E1032, invalidEvent);
assertFalse(bundle.getEvents().contains(invalidEvent));
assertTrue(bundle.getEvents().contains(validEvent));
}
Aggregations