Search in sources :

Example 1 with AbstractTrackerDtoValidationHook

use of org.hisp.dhis.tracker.validation.hooks.AbstractTrackerDtoValidationHook 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));
}
Also used : ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) Arrays(java.util.Arrays) ValidationErrorReporter(org.hisp.dhis.tracker.report.ValidationErrorReporter) Mockito.verifyNoInteractions(org.mockito.Mockito.verifyNoInteractions) ArrayList(java.util.ArrayList) Enrollment(org.hisp.dhis.tracker.domain.Enrollment) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) AssertTrackerValidationReport.assertHasWarning(org.hisp.dhis.tracker.validation.hooks.AssertTrackerValidationReport.assertHasWarning) BiConsumer(java.util.function.BiConsumer) User(org.hisp.dhis.user.User) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) Event(org.hisp.dhis.tracker.domain.Event) TrackedEntity(org.hisp.dhis.tracker.domain.TrackedEntity) Mockito.times(org.mockito.Mockito.times) Mockito.when(org.mockito.Mockito.when) ValidationMode(org.hisp.dhis.tracker.ValidationMode) TrackerBundle(org.hisp.dhis.tracker.bundle.TrackerBundle) AbstractTrackerDtoValidationHook(org.hisp.dhis.tracker.validation.hooks.AbstractTrackerDtoValidationHook) Mockito.verify(org.mockito.Mockito.verify) TrackerErrorCode(org.hisp.dhis.tracker.report.TrackerErrorCode) Objects(java.util.Objects) Test(org.junit.jupiter.api.Test) List(java.util.List) Builder(lombok.Builder) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) TrackerImportStrategy(org.hisp.dhis.tracker.TrackerImportStrategy) TrackerValidationReport(org.hisp.dhis.tracker.report.TrackerValidationReport) AssertTrackerValidationReport.assertHasError(org.hisp.dhis.tracker.validation.hooks.AssertTrackerValidationReport.assertHasError) CodeGenerator(org.hisp.dhis.common.CodeGenerator) NotNull(org.jetbrains.annotations.NotNull) Collections(java.util.Collections) Mockito.mock(org.mockito.Mockito.mock) TrackerValidationReport(org.hisp.dhis.tracker.report.TrackerValidationReport) Event(org.hisp.dhis.tracker.domain.Event) TrackerBundle(org.hisp.dhis.tracker.bundle.TrackerBundle) AbstractTrackerDtoValidationHook(org.hisp.dhis.tracker.validation.hooks.AbstractTrackerDtoValidationHook) Test(org.junit.jupiter.api.Test)

Aggregations

ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Collections (java.util.Collections)1 List (java.util.List)1 Objects (java.util.Objects)1 BiConsumer (java.util.function.BiConsumer)1 Builder (lombok.Builder)1 CodeGenerator (org.hisp.dhis.common.CodeGenerator)1 TrackerImportStrategy (org.hisp.dhis.tracker.TrackerImportStrategy)1 ValidationMode (org.hisp.dhis.tracker.ValidationMode)1 TrackerBundle (org.hisp.dhis.tracker.bundle.TrackerBundle)1 Enrollment (org.hisp.dhis.tracker.domain.Enrollment)1 Event (org.hisp.dhis.tracker.domain.Event)1 TrackedEntity (org.hisp.dhis.tracker.domain.TrackedEntity)1 TrackerErrorCode (org.hisp.dhis.tracker.report.TrackerErrorCode)1 TrackerValidationReport (org.hisp.dhis.tracker.report.TrackerValidationReport)1 ValidationErrorReporter (org.hisp.dhis.tracker.report.ValidationErrorReporter)1 AbstractTrackerDtoValidationHook (org.hisp.dhis.tracker.validation.hooks.AbstractTrackerDtoValidationHook)1 AssertTrackerValidationReport.assertHasError (org.hisp.dhis.tracker.validation.hooks.AssertTrackerValidationReport.assertHasError)1 AssertTrackerValidationReport.assertHasWarning (org.hisp.dhis.tracker.validation.hooks.AssertTrackerValidationReport.assertHasWarning)1