RED-9749 - Fix various issues with component definitions #622

Merged
andrei.isvoran.ext merged 1 commits from RED-9749-bp into release/2.465.x 2024-07-26 12:28:13 +02:00
9 changed files with 159 additions and 130 deletions

View File

@ -388,7 +388,7 @@ public class DossierTemplateControllerV2 implements DossierTemplateResource {
return Collections.emptyList();
}
List<ComponentDefinition> componentDefinitions = componentDefinitionService.createComponents(componentDefinitionAddRequests);
List<ComponentDefinition> componentDefinitions = componentDefinitionService.createComponents(dossierTemplateId, componentDefinitionAddRequests);
auditPersistenceService.audit(AuditRequest.builder()
.userId(KeycloakSecurity.getUserId())
.objectId(dossierTemplateId)

View File

@ -3477,15 +3477,11 @@ components:
The ComponentDefinitionAddRequest object represents a request to create a component definition within a dossier template.
The rank will be automatically generated and does not need to be provided at creation.
example:
dossierTemplateId: 8cd4b482-fb49-4315-9b51-789b4ae46c57
technicalName: study_conclusion
displayName: Study conclusion
description: The conclusion of the study
type: object
properties:
dossierTemplateId:
description: The ID of the dossier template to which this component belongs.
type: string
technicalName:
description: The technical name of the component.
type: string
@ -3496,7 +3492,6 @@ components:
description: A brief description of the component.
type: string
required:
- dossierTemplateId
- technicalName
- displayName
ComponentDefinitionUpdateRequest:

View File

@ -314,12 +314,11 @@ public class DossierTemplateImportService {
if (CollectionUtils.isNotEmpty(request.getComponentDefinitions())) {
for (ComponentDefinition componentDefinition : request.getComponentDefinitions()) {
ComponentDefinitionAddRequest componentDefinitionAddRequest = ComponentDefinitionAddRequest.builder()
.dossierTemplateId(dossierTemplateId)
.displayName(componentDefinition.getDisplayName())
.description(componentDefinition.getDescription())
.technicalName(componentDefinition.getTechnicalName())
.build();
componentDefinitionPersistenceService.insert(componentDefinitionAddRequest, componentDefinition.getRank());
componentDefinitionPersistenceService.insert(componentDefinitionAddRequest, componentDefinition.getRank(), dossierTemplateId);
}
}

View File

@ -6,17 +6,21 @@ import static com.iqser.red.service.persistence.management.v1.processor.roles.Ac
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ComponentDefinitionEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ComponentDefinitionPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
import com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentDefinition;
import com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentDefinitionAddRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentDefinitionUpdateRequest;
@ -32,28 +36,33 @@ import lombok.experimental.FieldDefaults;
public class ComponentDefinitionService {
ComponentDefinitionPersistenceService componentDefinitionPersistenceService;
DossierTemplateRepository dossierTemplateRepository;
@PreAuthorize("hasAuthority('" + ADD_UPDATE_DICTIONARY_TYPE + "')")
@Transactional
public List<ComponentDefinition> createComponents(List<ComponentDefinitionAddRequest> componentDefinitionAddRequests) {
public List<ComponentDefinition> createComponents(String dossierTemplateId, List<ComponentDefinitionAddRequest> componentDefinitionAddRequests) {
validateDossierTemplateExists(dossierTemplateId);
validateAddRequest(componentDefinitionAddRequests);
validateComponentRequest(componentDefinitionAddRequests);
List<ComponentDefinitionEntity> componentEntities = new ArrayList<>();
componentDefinitionAddRequests.forEach(componentDefinitionAddRequest -> componentEntities.add(componentDefinitionPersistenceService.insert(componentDefinitionAddRequest)));
componentDefinitionAddRequests.forEach(componentDefinitionAddRequest -> componentEntities.add(componentDefinitionPersistenceService.insert(componentDefinitionAddRequest,
dossierTemplateId)));
return componentEntities.stream()
.map(componentDefinitionEntity -> MagicConverter.convert(componentDefinitionEntity, ComponentDefinition.class))
.sorted(Comparator.comparing(ComponentDefinition::getRank))
.toList();
}
private void validateComponentRequest(List<ComponentDefinitionAddRequest> componentDefinitionAddRequests) {
private void validateAddRequest(List<ComponentDefinitionAddRequest> componentDefinitionAddRequests) {
String firstDossierTemplateId = componentDefinitionAddRequests.get(0).getDossierTemplateId();
boolean allMatch = componentDefinitionAddRequests.stream()
.allMatch(request -> request.getDossierTemplateId().equals(firstDossierTemplateId));
if (!allMatch) {
throw new BadRequestException("All components must have the same dossierTemplateId.");
long nrOfComponentsWithEmptyTechnicalName = componentDefinitionAddRequests.stream()
.filter(c -> StringUtils.isEmpty(c.getTechnicalName()))
.count();
if (nrOfComponentsWithEmptyTechnicalName != 0) {
throw new BadRequestException("Technical name can not be empty for a component.");
}
}
@ -61,6 +70,7 @@ public class ComponentDefinitionService {
@PreAuthorize("hasAuthority('" + READ_DICTIONARY_TYPES + "')")
public ComponentDefinition getComponentByDossierTemplateIdAndComponentId(String dossierTemplateId, String componentId) {
validateDossierTemplateExists(dossierTemplateId);
return MagicConverter.convert(componentDefinitionPersistenceService.findComponentByDossierTemplateIdAndComponentId(dossierTemplateId, componentId),
ComponentDefinition.class);
}
@ -69,17 +79,20 @@ public class ComponentDefinitionService {
@PreAuthorize("hasAuthority('" + READ_DICTIONARY_TYPES + "')")
public List<ComponentDefinition> getComponentsByDossierTemplateId(String dossierTemplateId, boolean includeSoftDeleted) {
List<ComponentDefinitionEntity> entities;
validateDossierTemplateExists(dossierTemplateId);
List<ComponentDefinitionEntity> componentDefinitionEntities;
if (includeSoftDeleted) {
entities = componentDefinitionPersistenceService.findComponentsByDossierTemplateId(dossierTemplateId);
componentDefinitionEntities = componentDefinitionPersistenceService.findComponentsByDossierTemplateId(dossierTemplateId);
} else {
entities = componentDefinitionPersistenceService.findComponentsByDossierTemplateIdExcludeSoftDeleted(dossierTemplateId);
componentDefinitionEntities = componentDefinitionPersistenceService.findComponentsByDossierTemplateIdExcludeSoftDeleted(dossierTemplateId);
}
return entities.stream()
return componentDefinitionEntities.stream()
.map(entity -> MagicConverter.convert(entity, ComponentDefinition.class))
.sorted(Comparator.comparingInt(ComponentDefinition::getRank))
.collect(Collectors.toList());
}
@ -87,6 +100,15 @@ public class ComponentDefinitionService {
@Transactional
public List<ComponentDefinition> updateComponents(String dossierTemplateId, List<ComponentDefinitionUpdateRequest> componentDefinitionUpdateRequests) {
validateDossierTemplateExists(dossierTemplateId);
long nrOfComponentUpdateRequestsWithEmptyDisplayName = componentDefinitionUpdateRequests.stream()
.filter(componentDefinitionUpdateRequest -> StringUtils.isEmpty(componentDefinitionUpdateRequest.getDisplayName()))
.count();
if (nrOfComponentUpdateRequestsWithEmptyDisplayName != 0) {
throw new BadRequestException("Component display name can not be empty");
}
List<ComponentDefinitionEntity> componentEntities = new ArrayList<>();
componentDefinitionUpdateRequests.forEach(componentDefinitionUpdateRequest -> {
ComponentDefinitionEntity componentDefinitionEntity = componentDefinitionPersistenceService.findComponent(dossierTemplateId, componentDefinitionUpdateRequest.getId());
@ -96,6 +118,7 @@ public class ComponentDefinitionService {
});
return componentEntities.stream()
.map(componentDefinitionEntity -> MagicConverter.convert(componentDefinitionEntity, ComponentDefinition.class))
.sorted(Comparator.comparing(ComponentDefinition::getRank))
.toList();
}
@ -104,8 +127,8 @@ public class ComponentDefinitionService {
@Transactional
public List<ComponentDefinitionEntity> deleteComponents(String dossierTemplateId, List<String> componentIds) {
OffsetDateTime now = OffsetDateTime.now();
return componentDefinitionPersistenceService.softDeleteComponents(dossierTemplateId, componentIds, now);
validateDossierTemplateExists(dossierTemplateId);
return componentDefinitionPersistenceService.softDeleteComponents(dossierTemplateId, componentIds, OffsetDateTime.now());
}
@ -113,6 +136,7 @@ public class ComponentDefinitionService {
@Transactional
public List<ComponentDefinition> restoreComponents(String dossierTemplateId, List<String> componentIds) {
validateDossierTemplateExists(dossierTemplateId);
List<ComponentDefinitionEntity> componentDefinitionEntities = componentDefinitionPersistenceService.restoreComponents(dossierTemplateId, componentIds);
int rank = componentDefinitionPersistenceService.countByDossierTemplateId(dossierTemplateId);
@ -122,20 +146,24 @@ public class ComponentDefinitionService {
}
return componentDefinitionEntities.stream()
.map(componentDefinitionEntity -> MagicConverter.convert(componentDefinitionEntity, ComponentDefinition.class))
.sorted(Comparator.comparing(ComponentDefinition::getRank))
.toList();
}
@PreAuthorize("hasAuthority('" + ADD_UPDATE_DICTIONARY_TYPE + "')")
@Transactional
public List<ComponentDefinition> reorderComponents(String dossierTemplateId, List<String> componentIds) {
validateDossierTemplateExists(dossierTemplateId);
List<ComponentDefinition> orderedComponents = new ArrayList<>();
List<ComponentDefinitionEntity> existingComponents = componentDefinitionPersistenceService.findComponentsByDossierTemplateIdExcludeSoftDeleted(dossierTemplateId);
Map<String, ComponentDefinitionEntity> componentMap = existingComponents.stream()
.collect(Collectors.toMap(ComponentDefinitionEntity::getId, component -> component));
List<ComponentDefinitionEntity> remainingComponents = new ArrayList<>(existingComponents);
int rank = 1;
for (String componentId : componentIds) {
ComponentDefinitionEntity component = componentMap.get(componentId);
@ -143,10 +171,28 @@ public class ComponentDefinitionService {
component.setRank(rank++);
componentDefinitionPersistenceService.update(component);
orderedComponents.add(MagicConverter.convert(component, ComponentDefinition.class));
remainingComponents.remove(component);
}
}
// Continue updating ranks for remaining components
for (ComponentDefinitionEntity component : remainingComponents) {
component.setRank(rank++);
componentDefinitionPersistenceService.update(component);
orderedComponents.add(MagicConverter.convert(component, ComponentDefinition.class));
}
orderedComponents.sort(Comparator.comparing(ComponentDefinition::getRank));
return orderedComponents;
}
private void validateDossierTemplateExists(String dossierTemplateId) {
if (!dossierTemplateRepository.existsByIdAndNotDeleted(dossierTemplateId)) {
throw new NotFoundException(String.format("DossierTemplate with Id %s not found.", dossierTemplateId));
}
}
}

View File

@ -2,7 +2,9 @@ package com.iqser.red.service.persistence.management.v1.processor.service;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
@ -15,6 +17,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotAl
import com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ComponentDefinitionPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService;
import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
@ -28,9 +31,11 @@ import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
import lombok.extern.slf4j.Slf4j;
@Service
@RequiredArgsConstructor
@Slf4j
public class ComponentLogService {
private final FileManagementStorageService fileManagementStorageService;
@ -38,11 +43,16 @@ public class ComponentLogService {
private final AuditPersistenceService auditPersistenceService;
private final ComponentDefinitionPersistenceService componentDefinitionPersistenceService;
private final UserService userService;
private final DossierRepository dossierRepository;
public ComponentLog getComponentLog(String dossierId, String fileId, boolean includeOverrides) {
List<ComponentDefinitionEntity> orderedEntities = componentDefinitionPersistenceService.findByDossierTemplateIdAndNotSoftDeleted(dossierId);
List<ComponentDefinitionEntity> orderedEntities = componentDefinitionPersistenceService.findByDossierTemplateIdAndNotSoftDeleted(dossierRepository.findDossierTemplateId(dossierId))
.stream()
.sorted(Comparator.comparing(ComponentDefinitionEntity::getRank))
.toList();
orderedEntities.forEach(o -> log.info("Name: {} Rank: {}", o.getTechnicalName(), o.getRank()));
List<String> orderedNames = orderedEntities.stream()
.map(ComponentDefinitionEntity::getTechnicalName)
.collect(Collectors.toList());
@ -81,17 +91,22 @@ public class ComponentLogService {
List<ComponentLogEntry> componentLogEntries = componentLog.getComponentLogEntries();
List<ComponentLogEntry> sortedLogEntries = new ArrayList<>();
List<ComponentLogEntry> nonOrderedLogEntries = new ArrayList<>();
Map<String, ComponentLogEntry> entryMap = new HashMap<>();
for (ComponentLogEntry entry : componentLogEntries) {
if (orderedNames.contains(entry.getName())) {
sortedLogEntries.add(entry);
} else {
nonOrderedLogEntries.add(entry);
}
entryMap.put(entry.getName().toLowerCase(Locale.getDefault()), entry);
}
List<ComponentLogEntry> sortedLogEntries = new ArrayList<>();
orderedNames.forEach(name -> {
ComponentLogEntry entry = entryMap.get(name);
if (entry != null) {
entryMap.remove(name);
sortedLogEntries.add(entry);
}
});
List<ComponentLogEntry> nonOrderedLogEntries = new ArrayList<>(entryMap.values());
nonOrderedLogEntries.sort(new ComponentOrderComparator(orderedNames));
sortedLogEntries.addAll(nonOrderedLogEntries);

View File

@ -159,9 +159,8 @@ public class DossierTemplateCloneService {
.description(componentDefinitionEntity.getDescription())
.technicalName(componentDefinitionEntity.getTechnicalName())
.displayName(componentDefinitionEntity.getDisplayName())
.dossierTemplateId(clonedDossierTemplateId)
.build();
componentDefinitionPersistenceService.insert(componentDefinitionAddRequest, componentDefinitionEntity.getRank());
componentDefinitionPersistenceService.insert(componentDefinitionAddRequest, componentDefinitionEntity.getRank(), clonedDossierTemplateId);
}
}

View File

@ -24,9 +24,9 @@ public class ComponentDefinitionPersistenceService {
private final ComponentDefinitionRepository componentDefinitionRepository;
public ComponentDefinitionEntity insert(ComponentDefinitionAddRequest component) {
public ComponentDefinitionEntity insert(ComponentDefinitionAddRequest component, String dossierTemplateId) {
return insert(component, countByDossierTemplateId(component.getDossierTemplateId()) + 1);
return insert(component, countByDossierTemplateId(dossierTemplateId) + 1, dossierTemplateId);
}
@ -35,13 +35,15 @@ public class ComponentDefinitionPersistenceService {
return componentDefinitionRepository.saveAndFlush(componentDefinition);
}
public ComponentDefinitionEntity insert(ComponentDefinitionAddRequest component, int rank) {
public ComponentDefinitionEntity insert(ComponentDefinitionAddRequest component, int rank, String dossierTemplateId) {
ComponentDefinitionEntity componentDefinitionEntity = new ComponentDefinitionEntity();
componentDefinitionEntity.setId(UUID.randomUUID().toString());
componentDefinitionEntity.setDossierTemplateId(component.getDossierTemplateId());
componentDefinitionEntity.setDossierTemplateId(dossierTemplateId);
componentDefinitionEntity.setTechnicalName(SnakeCaseUtils.toSnakeCase(component.getTechnicalName()));
componentDefinitionEntity.setDisplayName(component.getDisplayName());
componentDefinitionEntity.setDisplayName(component.getDisplayName().isEmpty() ? component.getTechnicalName() : component.getDisplayName());
componentDefinitionEntity.setDescription(component.getDescription());
componentDefinitionEntity.setRank(rank);
return componentDefinitionRepository.saveAndFlush(componentDefinitionEntity);

View File

@ -43,17 +43,20 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe
assertEquals(response.get(0).getDisplayName(), componentDefinitionAddRequest.getDisplayName());
assertEquals(response.get(0).getTechnicalName(), componentDefinitionAddRequest.getTechnicalName());
assertNull(response.get(0).getSoftDeleteTime());
var noDisplayNameComponent = ComponentDefinitionAddRequest.builder().displayName("").technicalName("component_2").description("Description").build();
var result1 = dossierTemplateExternalClient.createComponents(dossierTemplate.getId(), List.of(noDisplayNameComponent));
assertTrue(result1.get(0).getDisplayName().equals("component_2"));
var noTechnicalNameComponent = ComponentDefinitionAddRequest.builder().technicalName("").displayName("Component 1").description("Description").build();
var result = assertThrows(FeignException.class, () -> dossierTemplateExternalClient.createComponents(dossierTemplate.getId(), List.of(noTechnicalNameComponent)));
assertTrue(result.getMessage().contains("Technical name can not be empty for a component."));
}
private ComponentDefinitionAddRequest buildComponentDefinitionAddRequest(DossierTemplateModel dossierTemplate) {
return ComponentDefinitionAddRequest.builder()
.dossierTemplateId(dossierTemplate.getId())
.technicalName("component_1")
.displayName("Component 1")
.description("Description")
.build();
return ComponentDefinitionAddRequest.builder().technicalName("component_1").displayName("Component 1").description("Description").build();
}
@ -73,12 +76,7 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe
assertEquals(component.getTechnicalName(), componentDefinitionAddRequest.getTechnicalName());
assertNull(component.getSoftDeleteTime());
var componentDefinitionAddRequest2 = ComponentDefinitionAddRequest.builder()
.dossierTemplateId(dossierTemplate.getId())
.technicalName("component_2")
.displayName("Component 2")
.description("Description")
.build();
var componentDefinitionAddRequest2 = ComponentDefinitionAddRequest.builder().technicalName("component_2").displayName("Component 2").description("Description").build();
response = dossierTemplateExternalClient.createComponents(dossierTemplate.getId(), List.of(componentDefinitionAddRequest2));
assertEquals(response.size(), 1);
@ -93,6 +91,12 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe
components = dossierTemplateExternalClient.getComponents(dossierTemplate.getId(), false);
assertEquals(components.size(), 1);
var componentsError = assertThrows(FeignException.class, () -> dossierTemplateExternalClient.getComponents("123", false));
assertTrue(componentsError.getMessage().contains("DossierTemplate with Id 123 not found."));
var componentError = assertThrows(FeignException.class, () -> dossierTemplateExternalClient.getComponent("123", "321"));
assertTrue(componentError.getMessage().contains("DossierTemplate with Id 123 not found."));
}
@ -117,6 +121,9 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe
assertEquals(updatedComponents.get(0).getDisplayName(), componentDefinitionUpdateRequest.getDisplayName());
assertEquals(updatedComponents.get(0).getTechnicalName(), componentDefinitionAddRequest.getTechnicalName());
assertNull(updatedComponents.get(0).getSoftDeleteTime());
var unknownDossierError = assertThrows(FeignException.class, () -> dossierTemplateExternalClient.updateComponents("123", List.of(componentDefinitionUpdateRequest)));
assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found."));
}
@ -133,6 +140,9 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe
var softDeletedComponent = dossierTemplateExternalClient.getComponent(dossierTemplate.getId(), response.get(0).getId());
assertNotNull(softDeletedComponent.getSoftDeleteTime());
var unknownDossierError = assertThrows(FeignException.class, () -> dossierTemplateExternalClient.deleteComponents("123", List.of(response.get(0).getId())));
assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found."));
}
@ -140,24 +150,9 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe
public void testRestoreDeletedComponentDefinitions() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
var componentDefinitionAddRequest = ComponentDefinitionAddRequest.builder()
.dossierTemplateId(dossierTemplate.getId())
.technicalName("Component 1")
.displayName("Component 1")
.description("Description")
.build();
var componentDefinitionAddRequest2 = ComponentDefinitionAddRequest.builder()
.dossierTemplateId(dossierTemplate.getId())
.technicalName("Component 2")
.displayName("Component 2")
.description("Description")
.build();
var componentDefinitionAddRequest3 = ComponentDefinitionAddRequest.builder()
.dossierTemplateId(dossierTemplate.getId())
.technicalName("Component 3")
.displayName("Component 3")
.description("Description")
.build();
var componentDefinitionAddRequest = ComponentDefinitionAddRequest.builder().technicalName("Component 1").displayName("Component 1").description("Description").build();
var componentDefinitionAddRequest2 = ComponentDefinitionAddRequest.builder().technicalName("Component 2").displayName("Component 2").description("Description").build();
var componentDefinitionAddRequest3 = ComponentDefinitionAddRequest.builder().technicalName("Component 3").displayName("Component 3").description("Description").build();
var response = dossierTemplateExternalClient.createComponents(dossierTemplate.getId(),
List.of(componentDefinitionAddRequest, componentDefinitionAddRequest2, componentDefinitionAddRequest3));
@ -173,21 +168,9 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe
assertEquals(restoredComponents.get(0).getId(), response.get(0).getId());
assertEquals(restoredComponents.get(0).getRank(), 4);
assertNull(restoredComponents.get(0).getSoftDeleteTime());
}
@Test
public void createComponentDefinitionsWithDifferentDossierTemplateIds() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate("dossier1");
var dossierTemplate2 = dossierTemplateTesterAndProvider.provideTestTemplate("dossier2");
var componentDefinitionAddRequest = buildComponentDefinitionAddRequest(dossierTemplate);
var componentDefinitionAddRequest2 = buildComponentDefinitionAddRequest(dossierTemplate2);
var error = assertThrows(FeignException.class,
() -> dossierTemplateExternalClient.createComponents(dossierTemplate.getId(),
List.of(componentDefinitionAddRequest, componentDefinitionAddRequest2)));
assertTrue(error.getMessage().contains("All components must have the same dossierTemplateId."));
var unknownDossierError = assertThrows(FeignException.class, () -> dossierTemplateExternalClient.restoreComponents("123", List.of(response.get(0).getId())));
assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found."));
}
@ -195,12 +178,7 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe
public void testSnakeCaseTechnicalName() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate("dossier1");
var componentDefinitionAddRequest = ComponentDefinitionAddRequest.builder()
.dossierTemplateId(dossierTemplate.getId())
.technicalName("Component 1")
.displayName("Component 1")
.description("Description")
.build();
var componentDefinitionAddRequest = ComponentDefinitionAddRequest.builder().technicalName("Component 1").displayName("Component 1").description("Description").build();
var response = dossierTemplateExternalClient.createComponents(dossierTemplate.getId(), List.of(componentDefinitionAddRequest));
assertEquals(response.size(), 1);
@ -212,24 +190,9 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe
public void testGetAllComponentsForADossierTemplate() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate("dossier1");
var componentDefinitionAddRequest = ComponentDefinitionAddRequest.builder()
.dossierTemplateId(dossierTemplate.getId())
.technicalName("Component 1")
.displayName("Component 1")
.description("Description")
.build();
var componentDefinitionAddRequest2 = ComponentDefinitionAddRequest.builder()
.dossierTemplateId(dossierTemplate.getId())
.technicalName("Component 2")
.displayName("Component 2")
.description("Description")
.build();
var componentDefinitionAddRequest3 = ComponentDefinitionAddRequest.builder()
.dossierTemplateId(dossierTemplate.getId())
.technicalName("Component 3")
.displayName("Component 3")
.description("Description")
.build();
var componentDefinitionAddRequest = ComponentDefinitionAddRequest.builder().technicalName("Component 1").displayName("Component 1").description("Description").build();
var componentDefinitionAddRequest2 = ComponentDefinitionAddRequest.builder().technicalName("Component 2").displayName("Component 2").description("Description").build();
var componentDefinitionAddRequest3 = ComponentDefinitionAddRequest.builder().technicalName("Component 3").displayName("Component 3").description("Description").build();
var response = dossierTemplateExternalClient.createComponents(dossierTemplate.getId(),
List.of(componentDefinitionAddRequest, componentDefinitionAddRequest2, componentDefinitionAddRequest3));
@ -250,24 +213,9 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe
public void testReorderComponentDefinitions() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate("dossier1");
var componentDefinitionAddRequest = ComponentDefinitionAddRequest.builder()
.dossierTemplateId(dossierTemplate.getId())
.technicalName("Component 1")
.displayName("Component 1")
.description("Description")
.build();
var componentDefinitionAddRequest2 = ComponentDefinitionAddRequest.builder()
.dossierTemplateId(dossierTemplate.getId())
.technicalName("Component 2")
.displayName("Component 2")
.description("Description")
.build();
var componentDefinitionAddRequest3 = ComponentDefinitionAddRequest.builder()
.dossierTemplateId(dossierTemplate.getId())
.technicalName("Component 3")
.displayName("Component 3")
.description("Description")
.build();
var componentDefinitionAddRequest = ComponentDefinitionAddRequest.builder().technicalName("Component 1").displayName("Component 1").description("Description").build();
var componentDefinitionAddRequest2 = ComponentDefinitionAddRequest.builder().technicalName("Component 2").displayName("Component 2").description("Description").build();
var componentDefinitionAddRequest3 = ComponentDefinitionAddRequest.builder().technicalName("Component 3").displayName("Component 3").description("Description").build();
var response = dossierTemplateExternalClient.createComponents(dossierTemplate.getId(),
List.of(componentDefinitionAddRequest, componentDefinitionAddRequest2, componentDefinitionAddRequest3));
@ -284,6 +232,35 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe
assertEquals(newOrder.get(1).getRank(), 2);
assertEquals(newOrder.get(2).getId(), firstComponentId);
assertEquals(newOrder.get(2).getRank(), 3);
var unknownDossierError = assertThrows(FeignException.class, () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId)));
assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found."));
}
@Test
public void testReorderComponentDefinitionsWithShiftingRanks() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate("dossier1");
var componentDefinitionAddRequest = ComponentDefinitionAddRequest.builder().technicalName("Component 1").displayName("Component 1").description("Description").build();
var componentDefinitionAddRequest2 = ComponentDefinitionAddRequest.builder().technicalName("Component 2").displayName("Component 2").description("Description").build();
var componentDefinitionAddRequest3 = ComponentDefinitionAddRequest.builder().technicalName("Component 3").displayName("Component 3").description("Description").build();
var response = dossierTemplateExternalClient.createComponents(dossierTemplate.getId(),
List.of(componentDefinitionAddRequest, componentDefinitionAddRequest2, componentDefinitionAddRequest3));
assertEquals(response.size(), 3);
String firstComponentId = response.get(0).getId();
String secondComponentId = response.get(1).getId();
String thirdComponentId = response.get(2).getId();
var newOrder = dossierTemplateExternalClient.reorderComponents(dossierTemplate.getId(), List.of(secondComponentId));
assertEquals(newOrder.size(), 3);
assertEquals(newOrder.get(0).getId(), secondComponentId);
assertEquals(newOrder.get(0).getRank(), 1);
assertEquals(newOrder.get(1).getId(), firstComponentId);
assertEquals(newOrder.get(1).getRank(), 2);
assertEquals(newOrder.get(2).getId(), thirdComponentId);
assertEquals(newOrder.get(2).getRank(), 3);
}
}

View File

@ -14,10 +14,6 @@ import lombok.NonNull;
@Schema(description = "Object containing information about a component.")
public class ComponentDefinitionAddRequest {
@NonNull
@Schema(description = "The dossierTemplateId for this component.")
private String dossierTemplateId;
@NonNull
@Schema(description = "The technical name of the component in snake case. Must be unique within the same dossier template.")
private String technicalName;