From 8a5e97b9ced837eb0a091ec949949d9177955e39 Mon Sep 17 00:00:00 2001 From: Maverick Studer Date: Thu, 5 Dec 2024 15:03:45 +0100 Subject: [PATCH] RED-9056: Change flag name and decline requests except dossierDictionaryOnly is true --- .../impl/controller/DictionaryController.java | 4 +- .../external/resource/DictionaryResource.java | 2 +- .../processor/service/DictionaryService.java | 4 +- .../DictionaryPersistenceService.java | 7 +- .../integration/tests/DictionaryTest.java | 85 +++++++++++++++++-- 5 files changed, 90 insertions(+), 12 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/DictionaryController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java index d3978fbe9..31be0470f 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java @@ -357,9 +357,9 @@ public class DictionaryController implements DictionaryResource { public void changeFlags(@PathVariable(TYPE_PARAMETER_NAME) String type, @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(value = DOSSIER_ID_PARAMETER_NAME) String dossierId, - @RequestParam(value = "addToDictionary") boolean addToDictionary) { + @RequestParam(value = "addToDictionaryAction") boolean addToDictionaryAction) { - dictionaryService.changeAddToDictionary(type, dossierTemplateId, dossierId, addToDictionary); + dictionaryService.changeAddToDictionary(type, dossierTemplateId, dossierId, addToDictionaryAction); } diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java index a3fb5c1cb..651b8b35b 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java @@ -223,7 +223,7 @@ public interface DictionaryResource { void changeFlags(@PathVariable(TYPE_PARAMETER_NAME) String type, @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(DOSSIER_ID_PARAMETER_NAME) String dossierId, - @RequestParam(value = "addToDictionary") boolean addToDictionary); + @RequestParam(value = "addToDictionaryAction") boolean addToDictionaryAction); @PostMapping(value = DICTIONARY_REST_PATH + DIFFERENCE + DOSSIER_TEMPLATE_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java index 6739d394d..7ca589b49 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java @@ -494,9 +494,9 @@ public class DictionaryService { } @PreAuthorize("hasAuthority('" + ADD_UPDATE_DICTIONARY_TYPE + "')") - public void changeAddToDictionary(String type, String dossierTemplateId, String dossierId, boolean addToDictionary) { + public void changeAddToDictionary(String type, String dossierTemplateId, String dossierId, boolean addToDictionaryAction) { - dictionaryPersistenceService.updateAddToDictionary(toTypeId(type, dossierTemplateId, dossierId), addToDictionary); + dictionaryPersistenceService.updateAddToDictionary(toTypeId(type, dossierTemplateId, dossierId), addToDictionaryAction); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java index 05a1c4d45..19cf7d85d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java @@ -12,6 +12,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository; @@ -357,12 +358,14 @@ public class DictionaryPersistenceService { @Transactional - public void updateAddToDictionary(String typeId, boolean addToDictionary) { + public void updateAddToDictionary(String typeId, boolean addToDictionaryAction) { var typeEntity = getType(typeId); if (typeEntity.isDossierDictionaryOnly()) { - typeEntity.setAddToDictionaryAction(addToDictionary); + typeEntity.setAddToDictionaryAction(addToDictionaryAction); typeRepository.saveAndFlush(typeEntity); + } else { + throw new BadRequestException("The addToDictionaryAction flag can only be adjusted for dossierDictionaryOnly-types."); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java index 09d9d5698..39f6b06c5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java @@ -1183,7 +1183,7 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { var type = dictionaryClient.addType(createTypeValue); - List customTypes = dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier.getId(), false).getTypes() + List customTypes = dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier.getId(), false).getTypes() .stream() .filter(t -> !t.isSystemManaged()) .toList(); @@ -1213,7 +1213,7 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { @Test - void testRecreateTypeAndCheckMergedDictionary() { + void testRecreateTypeAndCheckMergedDictionary() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "TestDossier"); @@ -1240,7 +1240,10 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { UpdateEntries updateEntries = new UpdateEntries(newDossierEntries, allEntries); dictionaryClient.updateEntries(type.getType(), type.getDossierTemplateId(), updateEntries, dossier.getId(), DictionaryEntryType.ENTRY); - List deleted = entryRepository.findAll().stream().filter(DictionaryEntryEntity::isDeleted).toList(); + List deleted = entryRepository.findAll() + .stream() + .filter(DictionaryEntryEntity::isDeleted) + .toList(); assertEquals(3, deleted.size()); var updatedDossierDictionary = dictionaryClient.getDictionaryForType(type.getType(), dossierTemplate.getId(), dossier.getId()); @@ -1257,7 +1260,10 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { assertEquals(2, deletedType1Entities.size()); - deleted = entryRepository.findAll().stream().filter(DictionaryEntryEntity::isDeleted).toList(); + deleted = entryRepository.findAll() + .stream() + .filter(DictionaryEntryEntity::isDeleted) + .toList(); assertEquals(2, deleted.size()); // recreation @@ -1265,7 +1271,10 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { dictionaryClient.addEntry(type2.getType(), type2.getDossierTemplateId(), templateEntries, false, null, DictionaryEntryType.ENTRY); - deleted = entryRepository.findAll().stream().filter(DictionaryEntryEntity::isDeleted).toList(); + deleted = entryRepository.findAll() + .stream() + .filter(DictionaryEntryEntity::isDeleted) + .toList(); assertEquals(0, deleted.size()); deletedType1Entities = typeRepository.findAllTypesByDossierTemplateIdOrDossierId(dossierTemplate.getId(), dossier.getId()) @@ -1292,6 +1301,72 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { } + @Test + public void testChangeFlagsSuccessful() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + var dossier1 = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "Dossier1"); + + var type1 = dictionaryClient.addType(CreateTypeValue.builder() + .type("test_change_flags_true") + .label("Test Change Flags True") + .hexColor("#123456") + .rank(100) + .hint(false) + .hasDictionary(true) + .caseInsensitive(false) + .recommendation(false) + .addToDictionaryAction(false) + .dossierTemplateId(dossierTemplate.getId()) + .dossierDictionaryOnly(true) + .build()); + dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier1.getId(), false); + + + dictionaryClient.changeFlags(type1.getType(), dossierTemplate.getId(), dossier1.getId(), true); + + String compositeTypeId1 = type1.getType() + ":" + dossierTemplate.getId() + ":" + dossier1.getId(); + var updatedTypeEntity1 = typeRepository.findById(compositeTypeId1) + .orElseThrow(() -> new AssertionError("Type entity not found in repository")); + + assertThat(updatedTypeEntity1.isAddToDictionaryAction()).isTrue(); + } + + + @Test + public void testChangeFlagsUnsuccessful() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + var dossier2 = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "Dossier2"); + + var type2 = dictionaryClient.addType(CreateTypeValue.builder() + .type("test_change_flags_false") + .label("Test Change Flags False") + .hexColor("#654321") + .rank(101) + .hint(false) + .hasDictionary(true) + .caseInsensitive(false) + .recommendation(false) + .addToDictionaryAction(false) + .dossierTemplateId(dossierTemplate.getId()) + .dossierDictionaryOnly(false) + .build()); + dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier2.getId(), false); + + + assertThatThrownBy(() -> dictionaryClient.changeFlags(type2.getType(), dossierTemplate.getId(), dossier2.getId(), true)) + .isInstanceOf(FeignException.BadRequest.class) + .hasMessageContaining("The addToDictionaryAction flag can only be adjusted for dossierDictionaryOnly-types."); + + String compositeTypeId2 = type2.getType() + ":" + dossierTemplate.getId() + ":" + dossier2.getId(); + var typeEntity2 = typeRepository.findById(compositeTypeId2) + .orElseThrow(() -> new AssertionError("Type entity not found in repository")); + + assertThat(typeEntity2.isAddToDictionaryAction()).isFalse(); + } + + private static final class ListContentWithoutOrderAndWithoutDuplicatesComparator implements Comparator> { @SuppressWarnings("SuspiciousMethodCalls")