RED-9749 - Fix various issues with component definitions #622
@ -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)
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user