From aabfd5d8b524d0a9d72eacab787b1ef2b8d6c0d4 Mon Sep 17 00:00:00 2001 From: Maverick Studer Date: Wed, 29 May 2024 11:58:53 +0200 Subject: [PATCH] RED-6821: Dossier templates only soft-deleted, cannot create new template with same name && RED-9210: RED_USER and RED_MANAGER can bulk-delete dossier-templates - should return 403 --- .../controller/DossierTemplateController.java | 2 +- .../DossierTemplatePersistenceService.java | 2 ++ .../tests/DossierTemplateTest.java | 25 +++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) 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/DossierTemplateController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateController.java index 1ca33b9e9..c3fb59ad9 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateController.java @@ -136,7 +136,7 @@ public class DossierTemplateController implements DossierTemplateResource { @Override - @PreAuthorize("hasAuthority('" + READ_DOSSIER_TEMPLATES + "')") + @PreAuthorize("hasAuthority('" + WRITE_DOSSIER_TEMPLATES + "')") public void deleteDossierTemplates(@RequestBody List dossierTemplateIds) { String userId = KeycloakSecurity.getUserId(); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java index 2f5e78f0d..a1bd54ad1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java @@ -211,9 +211,11 @@ public class DossierTemplatePersistenceService { if (hasNonDeletedDossiers) { throw new BadRequestException("Cannot delete dossier template with active dossiers!"); } else { + dossierTemplate.setModifiedBy(deletingUserId); dossierTemplate.setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplate.setSoftDeleteTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + dossierTemplate.setName(dossierTemplate.getName() + "_" + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } }, () -> { throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId)); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java index db5e6f2b2..02f42c1fe 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java @@ -188,6 +188,31 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { } + @Test + public void testDossierTemplateNameChangedOnDelete() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + var allTemplates = dossierTemplateClient.getAllDossierTemplates(); + assertThat(allTemplates.size()).isEqualTo(1); + assertThat(allTemplates.get(0)).isEqualTo(dossierTemplate); + assertThat(dossierTemplate.isApplyDictionaryUpdatesToAllDossiersByDefault()).isFalse(); + + var testDossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); + + dossierClient.hardDeleteDossiers(Collections.singleton(testDossier.getId())); + + dossierTemplateClient.deleteDossierTemplate(dossierTemplate.getId()); + assertThat(dossierTemplateClient.getAllDossierTemplates().isEmpty()).isTrue(); + + dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + var loadedTemplate = dossierTemplateClient.getDossierTemplate(dossierTemplate.getId()); + + assertThat(loadedTemplate).isEqualTo(dossierTemplate); + } + + @Test public void testDossierTemplateUniqueNameConflict() {