From abccf8ca82c36e7e73fe0e22aa176b181047030a Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 6 Jun 2024 18:17:53 +0200 Subject: [PATCH] RED-8339: fixed misbehaving when adding an override in old endpoint --- .../controller/ComponentLogController.java | 36 +++++++++++++------ .../tests/ComponentOverrideTest.java | 16 +++++---- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ComponentLogController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ComponentLogController.java index c923c9f67..a6306036a 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ComponentLogController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ComponentLogController.java @@ -3,6 +3,7 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.GET_RSS; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_REDACTION_LOG; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -14,7 +15,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; @@ -54,9 +54,7 @@ public class ComponentLogController implements ComponentLogResource { @Deprecated(forRemoval = true) @PostMapping(value = COMPONENT_LOG_PATH + OVERRIDE_PATH + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("hasAuthority('" + GET_RSS + "')") - public void addOverride(@PathVariable(DOSSIER_ID) String dossierId, - @PathVariable(FILE_ID) String fileId, - @RequestBody ComponentsOverrides componentsOverrides) { + public void addOverride(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody ComponentsOverrides componentsOverrides) { accessControlService.checkDossierExistenceAndAccessPermissionsToDossier(dossierId); accessControlService.validateFileResourceExistence(fileId); @@ -65,10 +63,29 @@ public class ComponentLogController implements ComponentLogResource { throw new BadRequestException("Request body cannot be empty!"); } + var componentLog = componentLogService.getComponentLog(dossierId, fileId); + componentsOverrides.getComponentOverrides() .forEach((k, v) -> { - ComponentLogEntryValue overrideValue = ComponentLogEntryValue.builder().value(v).build(); - ComponentLogEntry override = ComponentLogEntry.builder().name(k).componentValues(List.of(overrideValue)).build(); + ComponentLogEntry override; + var entryOptional = componentLog.getComponentLogEntries() + .stream() + .filter(componentLogEntry -> componentLogEntry.getName().equals(k)) + .findFirst(); + if (entryOptional.isPresent()) { + override = entryOptional.get(); + override.getComponentValues() + .forEach(componentLogEntryValue -> componentLogEntryValue.setValue(v)); + } else { + ComponentLogEntryValue overrideValue = ComponentLogEntryValue.builder() + .value(v) + .originalValue(v) + .valueDescription("") + .componentRuleId("") + .componentLogEntityReferences(new ArrayList<>()) + .build(); + override = ComponentLogEntry.builder().name(k).componentValues(List.of(overrideValue)).build(); + } componentLogService.addOverride(dossierId, fileId, override); }); @@ -78,8 +95,7 @@ public class ComponentLogController implements ComponentLogResource { @Deprecated(forRemoval = true) @GetMapping(value = COMPONENT_LOG_PATH + OVERRIDE_PATH + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("hasAuthority('" + GET_RSS + "')") - public ComponentsOverrides getOverrides(@PathVariable(DOSSIER_ID) String dossierId, - @PathVariable(FILE_ID) String fileId) { + public ComponentsOverrides getOverrides(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId) { accessControlService.checkDossierExistenceAndViewPermissionsToDossier(dossierId); accessControlService.validateFileResourceExistence(fileId); @@ -100,9 +116,7 @@ public class ComponentLogController implements ComponentLogResource { @Deprecated(forRemoval = true) @PostMapping(value = COMPONENT_LOG_PATH + OVERRIDE_PATH + "/revert" + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("hasAuthority('" + GET_RSS + "')") - public void revertOverrides(@PathVariable(DOSSIER_ID) String dossierId, - @PathVariable(FILE_ID) String fileId, - @RequestBody RevertOverrideRequest revertOverrideRequest) { + public void revertOverrides(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody RevertOverrideRequest revertOverrideRequest) { accessControlService.checkDossierExistenceAndAccessPermissionsToDossier(dossierId); accessControlService.validateFileResourceExistence(fileId); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java index 554af14e0..dfae3f0a5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java @@ -21,6 +21,7 @@ import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemp import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.ComponentLogEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentsOverrides; import com.iqser.red.service.persistence.service.v1.api.shared.model.component.RevertOverrideRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; @@ -186,16 +187,19 @@ public class ComponentOverrideTest extends AbstractPersistenceServerServiceTest .get().isOverridden()); Map componentOverrides = new HashMap<>(); - componentOverrides.put("Study_Title", "BBBB Strange Chemical Name And the rest of a title – With a dash and some more text"); + String value = "BBBB Strange Chemical Name And the rest of a title – With a dash and some more text"; + componentOverrides.put("Study_Title", value); ComponentsOverrides componentOverrideModel4 = ComponentsOverrides.builder().componentOverrides(componentOverrides).build(); componentLogClient.addOverride(dossier.getId(), file.getId(), componentOverrideModel4); overridesFromOldEndpoint = componentLogClient.getComponentLog(dossier.getId(), file.getId(), true); - assertTrue(overridesFromOldEndpoint.getComponentLogEntries() - .stream() - .filter(component -> component.getName().equals("Study_Title")) - .findAny() - .get().isOverridden()); + ComponentLogEntry studyTitle = overridesFromOldEndpoint.getComponentLogEntries() + .stream() + .filter(component -> component.getName().equals("Study_Title")) + .findAny() + .get(); + assertTrue(studyTitle.isOverridden()); + assertTrue(studyTitle.getComponentValues().stream().anyMatch(componentLogEntryValue -> componentLogEntryValue.getValue().equals(value))); }