From 215afe0834f986d2857ec20b6195213fec14416c Mon Sep 17 00:00:00 2001 From: maverickstuder Date: Tue, 19 Nov 2024 15:35:28 +0100 Subject: [PATCH] RED-10415: Error when deleting entities from Templates without dossiers --- .../processor/service/DictionaryService.java | 2 +- .../integration/tests/DictionaryTest.java | 159 ++++++++++++------ 2 files changed, 111 insertions(+), 50 deletions(-) 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 d2ad83315..6739d394d 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 @@ -268,7 +268,7 @@ public class DictionaryService { @PreAuthorize("hasAuthority('" + DELETE_DOSSIER_DICTIONARY_TYPE + "')") public void deleteDossierType(String type, String dossierTemplateId, String dossierId) { - accessControlService.checkDossierExistenceAndAccessPermissionsToDossier(dossierId); + accessControlService.checkAccessPermissionsToDossier(dossierId); accessControlService.verifyUserIsMemberOrApprover(dossierId); deleteType(toTypeId(type, dossierTemplateId, dossierId)); } 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 b8c80ef18..de645dad4 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 @@ -20,6 +20,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient; +import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; @@ -29,12 +30,15 @@ import com.iqser.red.service.persistence.management.v1.processor.service.Diction import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryService; import com.iqser.red.service.persistence.service.v1.api.external.model.UpdateEntries; import com.iqser.red.service.persistence.service.v1.api.shared.model.CreateTypeValue; +import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.TypeResponse; import com.iqser.red.service.persistence.service.v1.api.shared.model.TypeValue; import com.iqser.red.service.persistence.service.v1.api.shared.model.UpdateTypeValue; import com.iqser.red.service.persistence.service.v1.api.shared.model.dictionary.Dictionary; import com.iqser.red.service.persistence.service.v1.api.shared.model.dictionary.DictionaryDifference; import com.iqser.red.service.persistence.service.v1.api.shared.model.dictionary.DictionaryDifferencePerType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dictionary.DictionaryDifferenceResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; import com.knecon.fforesight.tenantcommons.TenantContext; @@ -60,6 +64,9 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { @Autowired private DossierTemplateClient dossierTemplateClient; + @Autowired + private DossierClient dossierClient; + private final List testList1 = List.of("William c. Spare", "Charalampos", "Carina Wilson", "PATRICIA A. SHEEHY", "William C. Spare", "carlsen", "Patricia A. Sheehy"); private final List testList2 = List.of("William C. Spare", "Charalampos", "Carina Wilson", "Patricia A. Sheehy", "William c. Spare", "carlsen", "PATRICIA A. SHEEHY"); @@ -409,19 +416,19 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { .build()); assertThat(returnedtype1.isDossierDictionaryOnly()).isTrue(); - assertThat(dictionaryClient.getAllTypes(dossier.getDossierTemplateId(), null, false) - .getTypes() - .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) - .size()).isEqualTo(1); - assertThat(dictionaryClient.getAllTypes(dossier.getDossierTemplateId(), dossier.getId(), false) - .getTypes() - .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) - .size()).isEqualTo(2); + assertThat(dictionaryClient.getAllTypes(dossier.getDossierTemplateId(), null, false).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .collect(Collectors.toList()).size()).isEqualTo(1); + assertThat(dictionaryClient.getAllTypes(dossier.getDossierTemplateId(), dossier.getId(), false).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .collect(Collectors.toList()).size()).isEqualTo(2); var dictionary = dictionaryClient.getDictionaryForType(returnedtype1.getType(), dossier.getDossierTemplateId(), dossier2.getId()); - assertThat(dictionaryClient.getAllTypes(dossier.getDossierTemplateId(), dossier2.getId(), false) - .getTypes() - .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) - .size()).isEqualTo(2); + assertThat(dictionaryClient.getAllTypes(dossier.getDossierTemplateId(), dossier2.getId(), false).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .collect(Collectors.toList()).size()).isEqualTo(2); } @@ -461,9 +468,10 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { assertThat(actualEntries).usingComparator(new ListContentWithoutOrderAndWithoutDuplicatesComparator<>()).isEqualTo(entries); dictionaryClient.deleteType(createdType.getType(), createdType.getDossierTemplateId()); - assertThat(dictionaryClient.getAllTypes(createdType.getDossierTemplateId(), null, false) - .getTypes() - .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()).size()).isEqualTo(0); + assertThat(dictionaryClient.getAllTypes(createdType.getDossierTemplateId(), null, false).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .collect(Collectors.toList()).size()).isEqualTo(0); dictionaryClient.addType(type); @@ -1019,20 +1027,20 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { .build()); assertThat(dtType.getRank()).isEqualTo(100); assertThat(dtType.isDossierDictionaryOnly()).isFalse(); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true) - .getTypes() - .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) - .size()).isEqualTo(1); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .collect(Collectors.toList()).size()).isEqualTo(1); dictionaryClient.deleteType(dtType.getType(), dtType.getDossierTemplateId()); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, false) - .getTypes() - .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) - .size()).isEqualTo(0); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true) - .getTypes() - .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) - .size()).isEqualTo(1); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, false).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .collect(Collectors.toList()).size()).isEqualTo(0); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .collect(Collectors.toList()).size()).isEqualTo(1); var dtType2 = dictionaryClient.addType(CreateTypeValue.builder() .type("test2") @@ -1046,24 +1054,24 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { .dossierTemplateId(dossierTemplate.getId()) .dossierDictionaryOnly(false) .build()); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, false) - .getTypes() - .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) - .size()).isEqualTo(1); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true) - .getTypes() - .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) - .size()).isEqualTo(2); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, false).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .collect(Collectors.toList()).size()).isEqualTo(1); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .collect(Collectors.toList()).size()).isEqualTo(2); assertThat(dtType2.getRank()).isEqualTo(dtType.getRank()); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier.getId(), false) - .getTypes() - .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) - .size()).isEqualTo(2); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier.getId(), true) - .getTypes() - .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) - .size()).isEqualTo(3); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier.getId(), false).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .collect(Collectors.toList()).size()).isEqualTo(2); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier.getId(), true).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .collect(Collectors.toList()).size()).isEqualTo(3); } @@ -1096,14 +1104,16 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { .dossierDictionaryOnly(false) .build()); - List types = dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true).getTypes().stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()); + List types = dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .collect(Collectors.toList()); assertThat(types.size()).isEqualTo(1); String dictionaryEntry = "entry1"; dictionaryManagementService.addEntries(dtType.getTypeId(), List.of(dictionaryEntry), false, false, DictionaryEntryType.ENTRY, true); var dictionaryEntries = dictionaryManagementService.getAllEntriesInDossierTemplate(dtType.getTypeId(), dictionaryEntry, DictionaryEntryType.ENTRY); - assertThat(types.get(0).isHasDictionary()).isFalse(); assertThat(dictionaryEntries.get(0).getValue()).isEqualTo(dictionaryEntry); } @@ -1130,10 +1140,10 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { .build()); assertThat(dtType.getRank()).isEqualTo(100); assertThat(dtType.isDossierDictionaryOnly()).isFalse(); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true) - .getTypes() - .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) - .size()).isEqualTo(1); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .collect(Collectors.toList()).size()).isEqualTo(1); assertThatThrownBy(() -> dictionaryManagementService.addEntries(dtType.getTypeId(), List.of("entry1", "entry2"), @@ -1144,6 +1154,57 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { } + @Test + void testDeleteDossierThenDeleteType() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "TestDossier"); + + CreateTypeValue createTypeValue = CreateTypeValue.builder() + .type("test_type") + .label("Test Type") + .hexColor("#fcba03") + .rank(100) + .hint(false) + .caseInsensitive(false) + .recommendation(false) + .addToDictionaryAction(true) + .dossierTemplateId(dossierTemplate.getId()) + .dossierDictionaryOnly(false) + .build(); + + var type = dictionaryClient.addType(createTypeValue); + + List customTypes = dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier.getId(), false).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .toList(); + + assertEquals(2, customTypes.size()); + + dossierClient.deleteDossier(dossier.getId()); + + dictionaryClient.deleteType(type.getType(), type.getDossierTemplateId()); + + var types = dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier.getId(), false).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .toList(); + + assertThat(types).isEmpty(); + + dictionaryClient.addType(createTypeValue); + + customTypes = dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier.getId(), false).getTypes() + .stream() + .filter(t -> !t.isSystemManaged()) + .toList(); + + assertEquals(2, customTypes.size()); + } + + private static final class ListContentWithoutOrderAndWithoutDuplicatesComparator implements Comparator> { @SuppressWarnings("SuspiciousMethodCalls")