Skip to content

Commit

Permalink
fix: Remove user field from tracker preheat [DHIS2-18001]
Browse files Browse the repository at this point in the history
  • Loading branch information
enricocolasante committed Sep 26, 2024
1 parent 0f99aef commit cfd9ef5
Show file tree
Hide file tree
Showing 10 changed files with 54 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
import org.hisp.dhis.tracker.imports.preheat.TrackerPreheat;
import org.hisp.dhis.tracker.imports.report.Entity;
import org.hisp.dhis.tracker.imports.report.TrackerTypeReport;
import org.hisp.dhis.user.CurrentUserUtil;

/**
* @author Luciano Fiandesio
Expand Down Expand Up @@ -377,7 +378,10 @@ private void delete(
: entityManager.merge(trackedEntityAttributeValue));

logTrackedEntityAttributeValueHistory(
preheat.getUsername(), trackedEntityAttributeValue, trackedEntity, ChangeLogType.DELETE);
CurrentUserUtil.getCurrentUsername(),
trackedEntityAttributeValue,
trackedEntity,
ChangeLogType.DELETE);
}

private void saveOrUpdate(
Expand Down Expand Up @@ -409,7 +413,10 @@ private void saveOrUpdate(
}

logTrackedEntityAttributeValueHistory(
preheat.getUsername(), trackedEntityAttributeValue, trackedEntity, changeLogType);
CurrentUserUtil.getCurrentUsername(),
trackedEntityAttributeValue,
trackedEntity,
changeLogType);
}

private static boolean isFileResource(TrackedEntityAttributeValue trackedEntityAttributeValue) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
import org.hisp.dhis.tracker.imports.job.NotificationTrigger;
import org.hisp.dhis.tracker.imports.job.TrackerNotificationDataBundle;
import org.hisp.dhis.tracker.imports.preheat.TrackerPreheat;
import org.hisp.dhis.user.CurrentUserUtil;
import org.hisp.dhis.util.DateUtils;
import org.springframework.stereotype.Component;

Expand Down Expand Up @@ -211,7 +212,7 @@ private void handleDataValues(
}

logTrackedEntityDataValueHistory(
preheat.getUsername(), dataElement, event, new Date(), valuesHolder);
CurrentUserUtil.getCurrentUsername(), dataElement, event, new Date(), valuesHolder);
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import org.hisp.dhis.trackedentity.TrackedEntity;
import org.hisp.dhis.tracker.imports.preheat.TrackerPreheat;
import org.hisp.dhis.tracker.imports.validation.validator.TrackerImporterAssertErrors;
import org.hisp.dhis.user.CurrentUserUtil;
import org.hisp.dhis.util.DateUtils;
import org.hisp.dhis.util.ObjectUtils;
import org.springframework.stereotype.Service;
Expand Down Expand Up @@ -155,7 +156,7 @@ private Enrollment from(
if (previousStatus != dbEnrollment.getStatus()) {
if (dbEnrollment.isCompleted()) {
dbEnrollment.setCompletedDate(now);
dbEnrollment.setCompletedBy(preheat.getUsername());
dbEnrollment.setCompletedBy(CurrentUserUtil.getCurrentUsername());
} else if (EnrollmentStatus.CANCELLED == dbEnrollment.getStatus()) {
dbEnrollment.setCompletedDate(now);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
import org.hisp.dhis.tracker.imports.domain.MetadataIdentifier;
import org.hisp.dhis.tracker.imports.domain.User;
import org.hisp.dhis.tracker.imports.preheat.TrackerPreheat;
import org.hisp.dhis.user.CurrentUserUtil;
import org.hisp.dhis.util.DateUtils;
import org.springframework.stereotype.Service;

Expand Down Expand Up @@ -228,7 +229,7 @@ private Event from(

if (currentStatus != previousStatus && currentStatus == EventStatus.COMPLETED) {
result.setCompletedDate(now);
result.setCompletedBy(preheat.getUsername());
result.setCompletedBy(CurrentUserUtil.getCurrentUsername());
}

if (currentStatus != EventStatus.COMPLETED) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,25 @@

import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.hisp.dhis.note.Note;
import org.hisp.dhis.tracker.imports.TrackerUserService;
import org.hisp.dhis.tracker.imports.domain.User;
import org.hisp.dhis.tracker.imports.preheat.TrackerPreheat;
import org.hisp.dhis.util.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
* @author Luciano Fiandesio
*/
@Service
@RequiredArgsConstructor
public class NotesConverterService
implements TrackerConverterService<org.hisp.dhis.tracker.imports.domain.Note, Note> {

@Autowired private final TrackerUserService userService;

@Override
public org.hisp.dhis.tracker.imports.domain.Note to(Note note) {
org.hisp.dhis.tracker.imports.domain.Note trackerNote =
Expand Down Expand Up @@ -71,7 +78,7 @@ public Note from(TrackerPreheat preheat, org.hisp.dhis.tracker.imports.domain.No
trackerNote.setAutoFields();
trackerNote.setNoteText(note.getValue());

trackerNote.setLastUpdatedBy(preheat.getUser());
trackerNote.setLastUpdatedBy(userService.getCurrentUser());
trackerNote.setCreator(note.getStoredBy());
return trackerNote;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@
*/
package org.hisp.dhis.tracker.imports.preheat;

import static com.google.common.base.Preconditions.checkNotNull;

import java.beans.Introspector;
import java.util.List;
import javax.annotation.Nonnull;
Expand Down Expand Up @@ -76,9 +74,6 @@ public TrackerPreheat preheat(
TrackerObjects trackerObjects, TrackerIdSchemeParams idSchemeParams, User user) {
TrackerPreheat preheat = new TrackerPreheat();
preheat.setIdSchemes(idSchemeParams);
preheat.setUser(user);

checkNotNull(preheat.getUser(), "TrackerPreheat is missing the user object.");

for (String supplier : preheatSuppliers) {
final String beanName = Introspector.decapitalize(supplier);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,6 @@
* @author Morten Olav Hansen <mortenoh@gmail.com>
*/
public class TrackerPreheat {
/** User to use for import job (important for threaded imports). */
@Getter @Setter private User user;

@Getter @Setter private UserInfoSnapshot userInfo;

/**
Expand Down Expand Up @@ -286,10 +283,6 @@ public MetadataIdentifier getCategoryOptionComboIdentifier(

public TrackerPreheat() {}

public String getUsername() {
return User.username(user);
}

/**
* Put a default metadata value (i.e. CategoryOption "default") into the preheat.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,7 @@
import org.hisp.dhis.tracker.imports.preheat.cache.PreheatCacheService;
import org.hisp.dhis.tracker.imports.preheat.mappers.CopyMapper;
import org.hisp.dhis.tracker.imports.preheat.mappers.PreheatMapper;
import org.hisp.dhis.user.User;
import org.hisp.dhis.user.UserDetails;
import org.hisp.dhis.user.CurrentUserUtil;
import org.mapstruct.factory.Mappers;

/**
Expand Down Expand Up @@ -109,7 +108,7 @@ protected void queryForIdentifiableObjects(
UID.of(idSchemeParam.getAttributeUid()),
ids);
} else {
objects = cacheAwareFetch(preheat.getUser(), schema, idSchemeParam, ids, mapper);
objects = cacheAwareFetch(schema, idSchemeParam, ids, mapper);
}

preheat.put(idSchemeParam, objects);
Expand All @@ -122,7 +121,6 @@ private String buildCacheKey(Schema schema) {

@SuppressWarnings({"unchecked", "rawtypes"})
private List<IdentifiableObject> cacheAwareFetch(
User user,
Schema schema,
TrackerIdSchemeParam idSchemeParam,
List<String> ids,
Expand Down Expand Up @@ -151,8 +149,7 @@ private List<IdentifiableObject> cacheAwareFetch(
// cache
objects =
map(
(List<IdentifiableObject>)
queryService.query(buildQuery(schema, user, idScheme, ids)),
(List<IdentifiableObject>) queryService.query(buildQuery(schema, idScheme, ids)),
mapper);

// put objects in query based on given scheme. If the key
Expand All @@ -171,8 +168,7 @@ private List<IdentifiableObject> cacheAwareFetch(
} else {
objects =
map(
(List<IdentifiableObject>)
queryService.query(buildQuery(schema, user, idScheme, ids)),
(List<IdentifiableObject>) queryService.query(buildQuery(schema, idScheme, ids)),
mapper);
}

Expand All @@ -193,9 +189,9 @@ private List<IdentifiableObject> map(
}
}

private Query buildQuery(Schema schema, User user, TrackerIdScheme idScheme, List<String> ids) {
private Query buildQuery(Schema schema, TrackerIdScheme idScheme, List<String> ids) {
Query query = Query.from(schema);
query.setCurrentUserDetails(user == null ? null : UserDetails.fromUser(user));
query.setCurrentUserDetails(CurrentUserUtil.getCurrentUserDetails());
query.add(generateRestrictionFromIdentifiers(idScheme, ids));
query.setDefaults(Defaults.INCLUDE);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,12 @@
import org.hisp.dhis.program.UserInfoSnapshot;
import org.hisp.dhis.test.TestBase;
import org.hisp.dhis.trackedentity.TrackedEntity;
import org.hisp.dhis.tracker.imports.TrackerUserService;
import org.hisp.dhis.tracker.imports.domain.DataValue;
import org.hisp.dhis.tracker.imports.domain.MetadataIdentifier;
import org.hisp.dhis.tracker.imports.domain.User;
import org.hisp.dhis.tracker.imports.preheat.TrackerPreheat;
import org.hisp.dhis.user.UserDetails;
import org.hisp.dhis.util.DateUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand All @@ -80,7 +82,10 @@ class EventTrackerConverterServiceTest extends TestBase {

private static final Date today = new Date();

private final NotesConverterService notesConverterService = new NotesConverterService();
@Mock public TrackerUserService trackerUserService;

private final NotesConverterService notesConverterService =
new NotesConverterService(trackerUserService);

private RuleEngineConverterService<org.hisp.dhis.tracker.imports.domain.Event, Event> converter;

Expand All @@ -100,6 +105,7 @@ class EventTrackerConverterServiceTest extends TestBase {
void setUpTest() {
converter = new EventTrackerConverterService(notesConverterService);
user = makeUser("U");
injectSecurityContext(UserDetails.fromUser(user));
programStage = createProgramStage('A', 1);
programStage.setUid(PROGRAM_STAGE_UID);
programStage.setProgram(program);
Expand Down Expand Up @@ -165,7 +171,6 @@ void shouldConvertFromEventWithCompletedDataWhenStatusIsCompleted() {
dataElement.setUid(CodeGenerator.generateUid());
when(preheat.getDataElement(MetadataIdentifier.ofUid(dataElement.getUid())))
.thenReturn(dataElement);
when(preheat.getUsername()).thenReturn(USERNAME);

org.hisp.dhis.tracker.imports.domain.Event event =
event(dataValue(MetadataIdentifier.ofUid(dataElement.getUid()), "value"));
Expand Down Expand Up @@ -233,7 +238,6 @@ void shouldConvertFromExistingEventWithCompletedDataWhenStatusIsCompleted() {
String eventUid = CodeGenerator.generateUid();
when(preheat.getDataElement(MetadataIdentifier.ofUid(dataElement.getUid())))
.thenReturn(dataElement);
when(preheat.getUsername()).thenReturn(USERNAME);
dbEvent.setStatus(EventStatus.ACTIVE);
when(preheat.getEvent(eventUid)).thenReturn(dbEvent);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,21 +32,28 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.*;

import java.util.List;
import java.util.stream.Collectors;
import org.hisp.dhis.note.Note;
import org.hisp.dhis.test.TestBase;
import org.hisp.dhis.test.random.BeanRandomizer;
import org.hisp.dhis.tracker.imports.TrackerUserService;
import org.hisp.dhis.tracker.imports.preheat.TrackerPreheat;
import org.hisp.dhis.user.User;
import org.hisp.dhis.user.UserDetails;
import org.hisp.dhis.util.DateUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

/**
* @author Luciano Fiandesio
*/
@ExtendWith(MockitoExtension.class)
class NotesConverterServiceTest extends TestBase {

private static final String CURRENT_USER = "usernamea";
Expand All @@ -55,18 +62,24 @@ class NotesConverterServiceTest extends TestBase {

private TrackerPreheat preheat;

private User user;

@Mock private TrackerUserService trackerUserService;

private final BeanRandomizer rnd = BeanRandomizer.create();

@BeforeEach
void setUp() {
this.notesConverterService = new NotesConverterService();
User user = makeUser("A");
this.notesConverterService = new NotesConverterService(trackerUserService);
user = makeUser("A");
UserDetails userDetails = UserDetails.fromUser(user);
injectSecurityContext(userDetails);
this.preheat = new TrackerPreheat();
preheat.setUser(user);
}

@Test
void verifyConvertTrackerNoteToNote() {
when(trackerUserService.getCurrentUser()).thenReturn(user);
org.hisp.dhis.tracker.imports.domain.Note trackerNote =
rnd.nextObject(org.hisp.dhis.tracker.imports.domain.Note.class);
final Note note = notesConverterService.from(preheat, trackerNote);
Expand All @@ -75,6 +88,7 @@ void verifyConvertTrackerNoteToNote() {

@Test
void verifyConvertTrackerNoteToNoteWithNoStoredByDefined() {
when(trackerUserService.getCurrentUser()).thenReturn(user);
org.hisp.dhis.tracker.imports.domain.Note trackerNote =
rnd.nextObject(org.hisp.dhis.tracker.imports.domain.Note.class);
trackerNote.setStoredBy(null);
Expand All @@ -84,6 +98,7 @@ void verifyConvertTrackerNoteToNoteWithNoStoredByDefined() {

@Test
void verifyConvertTrackerNotesToNotes() {
when(trackerUserService.getCurrentUser()).thenReturn(user);
List<org.hisp.dhis.tracker.imports.domain.Note> trackerNotes =
rnd.objects(org.hisp.dhis.tracker.imports.domain.Note.class, 10)
.collect(Collectors.toList());
Expand Down

0 comments on commit cfd9ef5

Please sign in to comment.