use of org.hisp.dhis.tracker.bundle.TrackerBundle in project dhis2-core by dhis2.
the class DefaultTrackerValidationServiceTest method shouldNotValidateSuperUserSkip.
@Test
void shouldNotValidateSuperUserSkip() {
TrackerBundle bundle = newBundle().validationMode(ValidationMode.SKIP).user(superUser()).build();
TrackerValidationHook hook1 = mock(TrackerValidationHook.class);
service = new DefaultTrackerValidationService(List.of(hook1), Collections.emptyList());
service.validate(bundle);
verifyNoInteractions(hook1);
}
use of org.hisp.dhis.tracker.bundle.TrackerBundle in project dhis2-core by dhis2.
the class DefaultTrackerValidationServiceTest method needsToRunPreventsHookExecutionOnImportStrategyDeleteByDefault.
@Test
void needsToRunPreventsHookExecutionOnImportStrategyDeleteByDefault() {
Event invalidEvent = event();
TrackerBundle bundle = newBundle().importStrategy(TrackerImportStrategy.DELETE).events(events(invalidEvent)).build();
// StrategyPreProcessor sets the ImportStrategy in the bundle for every
// dto
bundle.setStrategy(invalidEvent, TrackerImportStrategy.DELETE);
ValidationHook hook1 = ValidationHook.builder().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 shouldValidateSuperUserNoSkip.
@Test
void shouldValidateSuperUserNoSkip() {
TrackerBundle bundle = newBundle().validationMode(ValidationMode.FULL).user(superUser()).build();
TrackerValidationHook hook1 = mock(TrackerValidationHook.class);
TrackerValidationHook hook2 = mock(TrackerValidationHook.class);
service = new DefaultTrackerValidationService(List.of(hook1, hook2), Collections.emptyList());
service.validate(bundle);
verify(hook1, times(1)).validate(any(), any());
verify(hook2, times(1)).validate(any(), any());
}
use of org.hisp.dhis.tracker.bundle.TrackerBundle 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.bundle.TrackerBundle in project dhis2-core by dhis2.
the class PreCheckSecurityOwnershipValidationHook method validateEvent.
@Override
public void validateEvent(ValidationErrorReporter reporter, Event event) {
TrackerImportValidationContext context = reporter.getValidationContext();
TrackerImportStrategy strategy = context.getStrategy(event);
TrackerBundle bundle = context.getBundle();
User user = bundle.getUser();
checkNotNull(user, USER_CANT_BE_NULL);
checkNotNull(event, EVENT_CANT_BE_NULL);
checkNotNull(event.getOrgUnit(), ORGANISATION_UNIT_CANT_BE_NULL);
OrganisationUnit organisationUnit = context.getOrganisationUnit(event.getOrgUnit());
ProgramStage programStage = context.getProgramStage(event.getProgramStage());
Program program = context.getProgram(event.getProgram());
// has to be checked
if (program.isWithoutRegistration() || strategy.isCreate() || strategy.isDelete()) {
checkOrgUnitInCaptureScope(reporter, event, organisationUnit);
}
String teiUid = getTeiUidFromEvent(context, event, program);
CategoryOptionCombo categoryOptionCombo = bundle.getPreheat().getCategoryOptionCombo(event.getAttributeOptionCombo());
OrganisationUnit ownerOrgUnit = context.getOwnerOrganisationUnit(teiUid, program.getUid());
// Check acting user is allowed to change existing/write event
if (strategy.isUpdateOrDelete()) {
ProgramStageInstance programStageInstance = context.getProgramStageInstance(event.getEvent());
TrackedEntityInstance entityInstance = programStageInstance.getProgramInstance().getEntityInstance();
validateUpdateAndDeleteEvent(reporter, event, programStageInstance, entityInstance == null ? null : entityInstance.getUid(), ownerOrgUnit);
} else {
validateCreateEvent(reporter, event, user, categoryOptionCombo, programStage, teiUid, organisationUnit, ownerOrgUnit, program, event.isCreatableInSearchScope());
}
}
Aggregations