From 92e242f6dd9b4c4b1b4bae7d619908e0c4c4de47 Mon Sep 17 00:00:00 2001 From: benrejebmoh Date: Thu, 11 Dec 2025 00:34:24 +0100 Subject: [PATCH 1/8] wip Signed-off-by: benrejebmoh --- pom.xml | 2 +- .../NetworkModificationServerException.java | 66 --------- .../RestResponseEntityExceptionHandler.java | 44 ------ .../dto/elasticsearch/EquipmentInfos.java | 7 +- .../server/entities/ModificationEntity.java | 8 +- .../LineAttachToVoltageLevelEntity.java | 6 +- .../EquipmentAttributeModificationEntity.java | 3 +- ...NetworkModificationServerRunException.java | 22 +++ .../NetworkModificationApplicator.java | 5 +- .../modifications/NetworkStoreListener.java | 5 +- .../NetworkModificationRepository.java | 92 ++++++------- .../server/service/FilterService.java | 10 +- .../server/service/LoadFlowService.java | 16 +-- .../service/NetworkModificationService.java | 70 +++------- .../server/ModificationControllerTest.java | 32 ++--- .../modifications/BalancesAdjustmentTest.java | 125 +----------------- .../BatteryCreationInBusBreakerTest.java | 4 +- .../BatteryCreationInNodeBreakerTest.java | 16 +-- .../BatteryModificationTest.java | 4 +- .../DeleteAttachingLineTest.java | 7 +- .../DeleteVoltageLevelOnLineTest.java | 7 +- .../EquipmentAttributeModificationTest.java | 8 +- .../modifications/EquipmentDeletionTest.java | 4 +- .../modifications/GenerationDispatchTest.java | 5 +- .../GeneratorCreationInBusBreakerTest.java | 7 +- .../GeneratorCreationInNodeBreakerTest.java | 16 +-- .../GeneratorModificationTest.java | 4 +- .../modifications/GeneratorScalingTest.java | 2 +- .../modifications/GroovyScriptTest.java | 6 +- .../server/modifications/LccCreationTest.java | 7 +- .../LineAttachToVoltageLevelTest.java | 10 +- .../LineCreationInBusBreakerTest.java | 4 +- .../LineCreationInNodeBreakerTest.java | 8 +- .../modifications/LineModificationTest.java | 4 +- .../LineSplitWithNewVoltageLevelTest.java | 4 +- .../LineSplitWithVoltageLevelTest.java | 11 +- .../LinesAttachToSplitLinesTest.java | 9 +- .../LoadCreationInNodeBreakerTest.java | 7 +- .../server/modifications/LoadScalingTest.java | 2 +- .../modifications/ModificationUtilsTest.java | 17 +-- .../MoveVoltageLevelFeederBaysTest.java | 9 +- ...usModificationEnergiseSideOneLineTest.java | 4 +- ...usModificationEnergiseSideTwoLineTest.java | 4 +- ...tingStatusModificationLockoutLineTest.java | 6 +- ...ntCompensatorCreationInBusBreakerTest.java | 4 +- ...tCompensatorCreationInNodeBreakerTest.java | 8 +- .../ShuntCompensatorModificationTest.java | 21 +-- ...arCompensatorCreationInBusBreakerTest.java | 7 +- ...rCompensatorCreationInNodeBreakerTest.java | 34 ++--- .../SubstationModificationTest.java | 2 +- ...ingsTransformerCreationBusBreakerTest.java | 4 +- ...gsTransformerCreationMixedBreakerTest.java | 3 +- ...ngsTransformerCreationNodeBreakerTest.java | 6 +- ...woWindingsTransformerModificationTest.java | 17 +-- .../VoltageLevelCreationTest.java | 18 ++- .../VoltageLevelModificationTest.java | 16 +-- .../server/modifications/VscCreationTest.java | 17 +-- .../modifications/VscModificationTest.java | 9 +- .../AbstractByFilterDeletionTest.java | 2 +- .../service/EquipmentInfosServiceTests.java | 11 +- .../service/ModificationRepositoryTest.java | 75 ++++++----- 61 files changed, 292 insertions(+), 671 deletions(-) delete mode 100644 src/main/java/org/gridsuite/modification/server/NetworkModificationServerException.java delete mode 100644 src/main/java/org/gridsuite/modification/server/RestResponseEntityExceptionHandler.java create mode 100644 src/main/java/org/gridsuite/modification/server/error/NetworkModificationServerRunException.java diff --git a/pom.xml b/pom.xml index 3c643eeae..13c1e2c86 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ **/migration/**/* gridsuite org.gridsuite:network-modification-server - 0.54.0 + 0.55.0-SNAPSHOT diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationServerException.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationServerException.java deleted file mode 100644 index 519575c84..000000000 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationServerException.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - Copyright (c) 2025, RTE (http://www.rte-france.com) - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ -package org.gridsuite.modification.server; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.powsybl.commons.PowsyblException; -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; -import org.gridsuite.modification.NetworkModificationException; -import org.springframework.http.HttpStatus; -import org.springframework.web.client.HttpStatusCodeException; - -import java.util.Objects; - -/** - * @author Slimane Amar - */ -@Slf4j -public class NetworkModificationServerException extends PowsyblException { - public enum Type { - DUPLICATION_ARGUMENT_INVALID(HttpStatus.BAD_REQUEST, "Invalid argument for duplication"); - - public final HttpStatus status; - private final String message; - - Type(HttpStatus status, String message) { - this.status = status; - this.message = message; - } - } - - @Getter - private final Type type; - - public NetworkModificationServerException(Type type) { - super(Objects.requireNonNull(type.name()) + ((type.message == null) ? "" : " : " + type.message)); - this.type = type; - } - - public static NetworkModificationException handleChangeError(HttpStatusCodeException httpException, NetworkModificationException.Type type) { - String responseBody = httpException.getResponseBodyAsString(); - if (responseBody.isEmpty()) { - return new NetworkModificationException(type, httpException.getStatusCode().toString()); - } - - String message = responseBody; - try { - JsonNode node = new ObjectMapper().readTree(responseBody).path("message"); - if (!node.isMissingNode()) { - message = node.asText(); - } - } catch (JsonProcessingException e) { - // responseBody by default - } - - log.error(message, httpException); - - return new NetworkModificationException(type, message); - } -} diff --git a/src/main/java/org/gridsuite/modification/server/RestResponseEntityExceptionHandler.java b/src/main/java/org/gridsuite/modification/server/RestResponseEntityExceptionHandler.java deleted file mode 100644 index d4b87abf9..000000000 --- a/src/main/java/org/gridsuite/modification/server/RestResponseEntityExceptionHandler.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Copyright (c) 2021, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ -package org.gridsuite.modification.server; - -import org.gridsuite.modification.NetworkModificationException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; - -/** - * @author Slimane Amar - */ -@ControllerAdvice -public class RestResponseEntityExceptionHandler { - - private static final Logger LOGGER = LoggerFactory.getLogger(RestResponseEntityExceptionHandler.class); - private static final String HANDLER_MESSAGE = "Caught in handler"; - - @ExceptionHandler(NetworkModificationException.class) - protected ResponseEntity handleException(NetworkModificationException exception) { - return handleException(exception.getType().status, exception); - } - - @ExceptionHandler(NetworkModificationServerException.class) - protected ResponseEntity handleException(NetworkModificationServerException exception) { - return handleException(exception.getType().status, exception); - } - - private ResponseEntity handleException(HttpStatus status, Exception exception) { - if (LOGGER.isErrorEnabled()) { - LOGGER.error(HANDLER_MESSAGE, exception); - } - return ResponseEntity - .status(status) - .body(exception.getMessage()); - } -} diff --git a/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/EquipmentInfos.java b/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/EquipmentInfos.java index 8f9ef5dd5..73ba5b1a8 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/EquipmentInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/EquipmentInfos.java @@ -9,9 +9,9 @@ import com.powsybl.iidm.network.*; import lombok.*; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.server.dto.SubstationInfos; import org.gridsuite.modification.server.dto.VoltageLevelInfos; +import org.gridsuite.modification.server.error.NetworkModificationServerRunException; import org.springframework.data.annotation.TypeAlias; import org.springframework.data.elasticsearch.annotations.*; import org.springframework.lang.NonNull; @@ -84,7 +84,7 @@ public static Set getVoltageLevels(@NonNull Identifiable identi ).collect(Collectors.toSet()); } - throw NetworkModificationException.createEquipmentTypeUnknown(identifiable.getClass().getSimpleName()); + throw new NetworkModificationServerRunException("The equipment type : " + identifiable.getClass().getSimpleName() + " is unknown"); } public static String getEquipmentTypeName(@NonNull Identifiable identifiable) { @@ -98,11 +98,10 @@ public static String getEquipmentTypeName(@NonNull Identifiable identifiable) /** * @param hvdcLine The hvdc line to get hvdc type name * @return The hvdc type name string - * @throws NetworkModificationException if converter station types don't match */ private static String getHvdcLineTypeName(HvdcLine hvdcLine) { if (hvdcLine.getConverterStation1().getHvdcType() != hvdcLine.getConverterStation2().getHvdcType()) { - throw NetworkModificationException.createHybridHvdcUnsupported(hvdcLine.getId()); + throw new NetworkModificationServerRunException(String.format("The hybrid Hvdc line %s is unsupported", hvdcLine.getId())); } return String.format("%s_%s", hvdcLine.getType().name(), hvdcLine.getConverterStation1().getHvdcType().name()); diff --git a/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java index a74df78d7..21d27de4f 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java @@ -11,18 +11,16 @@ import lombok.*; import org.gridsuite.modification.ModificationType; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.EquipmentAttributeModificationInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.entities.equipment.modification.attribute.EquipmentAttributeModificationEntity; +import org.gridsuite.modification.server.error.NetworkModificationServerRunException; import java.lang.reflect.Constructor; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.MISSING_MODIFICATION_DESCRIPTION; - /** * @author Slimane Amar */ @@ -82,7 +80,7 @@ public ModificationEntity(UUID id, String type) { protected ModificationEntity(ModificationInfos modificationInfos) { if (modificationInfos == null) { - throw new NetworkModificationException(MISSING_MODIFICATION_DESCRIPTION, "Missing network modification description"); + throw new NetworkModificationServerRunException("Missing network modification description"); } //We need to limit the precision to avoid database precision storage limit issue (postgres has a precision of 6 digits while h2 can go to 9) this.date = Instant.now().truncatedTo(ChronoUnit.MICROS); @@ -132,7 +130,7 @@ public static ModificationEntity fromDTO(ModificationInfos dto) { Constructor constructor = entityClass.getConstructor(dto.getClass()); return constructor.newInstance(dto); } catch (Exception e) { - throw new RuntimeException("Failed to map DTO to Entity", e); + throw new NetworkModificationServerRunException("Failed to map DTO to Entity", e); } } else { throw new IllegalArgumentException("No entity class registered for DTO class: " + dto.getClass()); diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineAttachToVoltageLevelEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineAttachToVoltageLevelEntity.java index b86c98667..9e96e02f4 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineAttachToVoltageLevelEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineAttachToVoltageLevelEntity.java @@ -9,7 +9,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.NonNull; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.LineAttachToVoltageLevelInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.entities.ModificationEntity; @@ -17,8 +16,7 @@ import org.gridsuite.modification.server.entities.equipment.creation.VoltageLevelCreationEntity; import jakarta.persistence.*; - -import static org.gridsuite.modification.NetworkModificationException.Type.LINE_ATTACH_DESCRIPTION_ERROR; +import org.gridsuite.modification.server.error.NetworkModificationServerRunException; /** * @author Nicolas NOIR @@ -98,7 +96,7 @@ private void assignAttributes(LineAttachToVoltageLevelInfos lineAttachToVoltageL existingVoltageLevelId = lineAttachToVoltageLevelInfos.getExistingVoltageLevelId(); bbsOrBusId = lineAttachToVoltageLevelInfos.getBbsOrBusId(); if (lineAttachToVoltageLevelInfos.getAttachmentLine() == null) { - throw new NetworkModificationException(LINE_ATTACH_DESCRIPTION_ERROR, "Missing required attachment line description"); + throw new NetworkModificationServerRunException("Missing required attachment line description"); } lineCreation = new LineCreationEntity(lineAttachToVoltageLevelInfos.getAttachmentLine()); newLine1Id = lineAttachToVoltageLevelInfos.getNewLine1Id(); diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/attribute/EquipmentAttributeModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/attribute/EquipmentAttributeModificationEntity.java index 8176f9be4..c32b501f8 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/attribute/EquipmentAttributeModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/attribute/EquipmentAttributeModificationEntity.java @@ -21,6 +21,7 @@ import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; import jakarta.persistence.MappedSuperclass; +import org.gridsuite.modification.server.error.NetworkModificationServerRunException; /** @@ -94,7 +95,7 @@ public static EquipmentAttributeModificationEntity createAttributeEntity(Equi Constructor> constructor = entityClass.getConstructor(EquipmentAttributeModificationInfos.class); return constructor.newInstance(dto); } catch (Exception e) { - throw new RuntimeException("Failed to map DTO to Entity", e); + throw new NetworkModificationServerRunException("Failed to map DTO to Entity", e); } } else { throw new IllegalArgumentException("No entity class registered for attribute value class: " + attributeValueClass); diff --git a/src/main/java/org/gridsuite/modification/server/error/NetworkModificationServerRunException.java b/src/main/java/org/gridsuite/modification/server/error/NetworkModificationServerRunException.java new file mode 100644 index 000000000..2201b4a3f --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/error/NetworkModificationServerRunException.java @@ -0,0 +1,22 @@ +/* + Copyright (c) 2025, RTE (http://www.rte-france.com) + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package org.gridsuite.modification.server.error; + +/** + * @author Mohamed Benrejeb + */ +public class NetworkModificationServerRunException extends RuntimeException { + + public NetworkModificationServerRunException(String message) { + super(message); + } + + public NetworkModificationServerRunException(String message, Throwable cause) { + super(message, cause); + } + +} diff --git a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java index ca281c97b..63fceec5c 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java @@ -19,6 +19,7 @@ import lombok.Getter; import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.dto.ModificationInfos; +import org.gridsuite.modification.error.NetworkModificationRunException; import org.gridsuite.modification.modifications.AbstractModification; import org.gridsuite.modification.server.dto.ModificationApplicationGroup; import org.gridsuite.modification.server.dto.NetworkInfos; @@ -26,6 +27,7 @@ import org.gridsuite.modification.server.dto.NetworkModificationResult.ApplicationStatus; import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosService; +import org.gridsuite.modification.server.error.NetworkModificationServerRunException; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.service.*; import org.slf4j.Logger; @@ -229,7 +231,8 @@ private void apply(AbstractModification modification, Network network, ReportNod } private void handleException(ReportNode subReportNode, Exception e) { - boolean isApplicationException = PowsyblException.class.isAssignableFrom(e.getClass()); + boolean isApplicationException = PowsyblException.class.isAssignableFrom(e.getClass()) || NetworkModificationRunException.class.isAssignableFrom(e.getClass()) + || NetworkModificationServerRunException.class.isAssignableFrom(e.getClass()); if (!isApplicationException && LOGGER.isErrorEnabled()) { LOGGER.error(e.toString(), e); } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java b/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java index b8a7288f4..88959ee99 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java @@ -10,13 +10,13 @@ import com.powsybl.iidm.network.*; import com.powsybl.network.store.client.NetworkStoreService; import lombok.Getter; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.dto.elasticsearch.EquipmentInfos; import org.gridsuite.modification.server.dto.elasticsearch.ModificationApplicationInfos; import org.gridsuite.modification.server.dto.elasticsearch.TombstonedEquipmentInfos; import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosService; +import org.gridsuite.modification.server.error.NetworkModificationServerRunException; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.impacts.CollectionElementImpact; import org.gridsuite.modification.server.impacts.SimpleElementImpact; @@ -25,7 +25,6 @@ import java.util.*; import java.util.stream.Stream; -import static org.gridsuite.modification.NetworkModificationException.Type.MODIFICATION_ERROR; import static org.gridsuite.modification.server.elasticsearch.EquipmentInfosService.getIndexedEquipmentTypes; import static org.gridsuite.modification.server.elasticsearch.EquipmentInfosService.getIndexedEquipmentTypesInModification; @@ -196,7 +195,7 @@ public List flushModificationApplications() { networkStoreService.flush(network); // At first flushImpactedEquipments(); } catch (Exception e) { - throw new NetworkModificationException(MODIFICATION_ERROR, e); + throw new NetworkModificationServerRunException(e.getMessage(), e); } return reduceNetworkImpacts(); diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index b7ce98d78..ca5ae4fd0 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -10,7 +10,6 @@ import lombok.NonNull; import org.apache.commons.collections4.CollectionUtils; import org.gridsuite.modification.ModificationType; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.dto.tabular.*; import org.gridsuite.modification.server.dto.ModificationMetadata; @@ -19,6 +18,7 @@ import org.gridsuite.modification.server.entities.equipment.modification.EquipmentModificationEntity; import org.gridsuite.modification.server.entities.tabular.TabularModificationsEntity; import org.gridsuite.modification.server.entities.tabular.TabularPropertyEntity; +import org.gridsuite.modification.server.error.NetworkModificationServerRunException; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @@ -30,7 +30,6 @@ import java.util.stream.Stream; import static org.apache.commons.collections4.SetUtils.emptyIfNull; -import static org.gridsuite.modification.NetworkModificationException.Type.*; import static org.gridsuite.modification.server.utils.DatabaseConstants.SQL_SUB_MODIFICATION_DELETION_BATCH_SIZE; import static org.gridsuite.modification.server.utils.DatabaseConstants.SQL_SUB_MODIFICATION_WITH_LIMITSET_DELETION_BATCH_SIZE; @@ -141,11 +140,10 @@ public UUID createNetworkCompositeModification(@NonNull List modificationU public void updateCompositeModification(@NonNull UUID compositeUuid, @NonNull List modificationUuids) { ModificationEntity modificationEntity = modificationRepository.findById(compositeUuid) - .orElseThrow(() -> new NetworkModificationException(MODIFICATION_NOT_FOUND, String.format(MODIFICATION_NOT_FOUND_MESSAGE, compositeUuid))); + .orElseThrow(() -> new NetworkModificationServerRunException(String.format(MODIFICATION_NOT_FOUND_MESSAGE, compositeUuid))); if (!(modificationEntity instanceof CompositeModificationEntity compositeEntity)) { - throw new NetworkModificationException(MODIFICATION_ERROR, - String.format("Modification (%s) is not a composite modification", compositeUuid)); + throw new NetworkModificationServerRunException(String.format("Modification (%s) is not a composite modification", compositeUuid)); } List copyEntities = modificationRepository.findAllByIdIn(modificationUuids).stream() @@ -221,7 +219,7 @@ private void insertModifications(List modificationsList, Lis modificationsList.size() : IntStream.range(0, modificationsList.size()) .filter(i -> referenceModificationUuid.equals(modificationsList.get(i).getId())) .findFirst() - .orElseThrow(() -> new NetworkModificationException(MOVE_MODIFICATION_ERROR)); + .orElseThrow(() -> new NetworkModificationServerRunException("Insert modification error")); modificationsList.addAll(insertionIndex, modificationsToAdd); for (int order = 0; order < modificationsList.size(); order++) { modificationsList.get(order).setModificationsOrder(order); @@ -282,14 +280,13 @@ public List getModifications(UUID groupUuid, boolean onlyMeta } public List getModifications(UUID groupUuid, boolean onlyMetadata, boolean errorOnGroupNotFound, boolean onlyStashed) { - try { - return onlyMetadata ? getModificationsMetadata(groupUuid, onlyStashed) : getModificationsInfos(List.of(groupUuid), onlyStashed); - } catch (NetworkModificationException e) { - if (e.getType() == MODIFICATION_GROUP_NOT_FOUND && !errorOnGroupNotFound) { - return List.of(); - } - throw e; + // TODO check this: e.getType() == MODIFICATION_GROUP_NOT_FOUND && !errorOnGroupNotFound) { + // return List.of(); + + if (!errorOnGroupNotFound) { + return List.of(); } + return onlyMetadata ? getModificationsMetadata(groupUuid, onlyStashed) : getModificationsInfos(List.of(groupUuid), onlyStashed); } public List getModificationsMetadata(UUID groupUuid, boolean onlyStashed) { @@ -436,26 +433,25 @@ public ModificationInfos getModificationInfo(UUID modificationUuid) { public ModificationEntity getModificationEntity(UUID modificationUuid) { return modificationRepository .findById(modificationUuid) - .orElseThrow(() -> new NetworkModificationException(MODIFICATION_NOT_FOUND, modificationUuid.toString())); + .orElseThrow(() -> new NetworkModificationServerRunException("Modification not found: " + modificationUuid.toString())); } @Transactional // To have the 2 delete in the same transaction (atomic) public void deleteModificationGroup(UUID groupUuid, boolean errorOnGroupNotFound) { - try { - ModificationGroupEntity groupEntity = getModificationGroup(groupUuid); - if (!groupEntity.getModifications().isEmpty()) { - //TODO: is there a way to avoid doing this setGroup(null) that triggers a useless update since the entity will be deleted right after - groupEntity.getModifications().forEach(modif -> modif.setGroup(null)); - List modifications = groupEntity.getModifications(); - deleteModifications(modifications.stream().filter(Objects::nonNull).toList()); - } - modificationGroupRepository.delete(groupEntity); - } catch (NetworkModificationException e) { - if (e.getType() == MODIFICATION_GROUP_NOT_FOUND && !errorOnGroupNotFound) { - return; - } - throw e; + // TODO check this: e.getType() == MODIFICATION_GROUP_NOT_FOUND && !errorOnGroupNotFound) { + // return; + if (!errorOnGroupNotFound) { + return; + } + ModificationGroupEntity groupEntity = getModificationGroup(groupUuid); + if (!groupEntity.getModifications().isEmpty()) { + //TODO: is there a way to avoid doing this setGroup(null) that triggers a useless update since the entity will be deleted right after + groupEntity.getModifications().forEach(modif -> modif.setGroup(null)); + List modifications = groupEntity.getModifications(); + deleteModifications(modifications.stream().filter(Objects::nonNull).toList()); } + modificationGroupRepository.delete(groupEntity); + } @Transactional // To have the find and delete in the same transaction (atomic) @@ -473,11 +469,11 @@ public int deleteModifications(UUID groupUuid, List uuids) { modifications = modificationRepository.findAllById(uuids); Optional optionalModificationWithGroup = modifications.stream().filter(m -> m.getGroup() != null).findFirst(); if (optionalModificationWithGroup.isPresent()) { - throw new NetworkModificationException(MODIFICATION_DELETION_ERROR, String.format("%s is owned by group %s", + throw new NetworkModificationServerRunException(String.format("Modification deletion error: %s is owned by group %s", optionalModificationWithGroup.get().getId().toString(), optionalModificationWithGroup.get().getGroup().getId())); } } else { - throw new NetworkModificationException(MODIFICATION_DELETION_ERROR, "need to specify the group or give a list of UUIDs"); + throw new NetworkModificationServerRunException("Modification deletion error: need to specify the group or give a list of UUIDs"); } int count = modifications.size(); deleteModifications(modifications); @@ -485,7 +481,7 @@ public int deleteModifications(UUID groupUuid, List uuids) { } private ModificationGroupEntity getModificationGroup(UUID groupUuid) { - return this.modificationGroupRepository.findById(groupUuid).orElseThrow(() -> new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, groupUuid.toString())); + return this.modificationGroupRepository.findById(groupUuid).orElseThrow(() -> new NetworkModificationServerRunException("Modification Group not found " + groupUuid)); } private ModificationGroupEntity getOrCreateModificationGroup(UUID groupUuid) { @@ -563,7 +559,7 @@ public void stashNetworkModifications(@NonNull List modificationUuids, int for (UUID modificationUuid : modificationUuids) { ModificationEntity modificationEntity = this.modificationRepository .findById(modificationUuid) - .orElseThrow(() -> new NetworkModificationException(MODIFICATION_NOT_FOUND, String.format(MODIFICATION_NOT_FOUND_MESSAGE, modificationUuid))); + .orElseThrow(() -> new NetworkModificationServerRunException(String.format(MODIFICATION_NOT_FOUND_MESSAGE, modificationUuid))); modificationEntity.setStashed(true); modificationEntity.setModificationsOrder(stashModificationOrder); modificationEntities.add(modificationEntity); @@ -592,7 +588,7 @@ public void restoreNetworkModifications(@NonNull List modificationUuids, i int modificationOrder = unstashedSize; List modifications = modificationRepository.findAllByIdInReverse(modificationUuids); if (modifications.size() != modificationUuids.size()) { - throw new NetworkModificationException(MODIFICATION_NOT_FOUND); + throw new NetworkModificationServerRunException("Modification not found"); } for (ModificationEntity modification : modifications) { modification.setStashed(false); @@ -606,7 +602,7 @@ public void updateNetworkModificationsActivation(@NonNull List modificatio for (UUID modificationUuid : modificationUuids) { ModificationEntity modificationEntity = this.modificationRepository .findById(modificationUuid) - .orElseThrow(() -> new NetworkModificationException(MODIFICATION_NOT_FOUND, String.format(MODIFICATION_NOT_FOUND_MESSAGE, modificationUuid))); + .orElseThrow(() -> new NetworkModificationServerRunException(String.format(MODIFICATION_NOT_FOUND_MESSAGE, modificationUuid))); modificationEntity.setActivated(activated); } } @@ -630,21 +626,19 @@ public void updateModification(@NonNull UUID modificationUuid, @NonNull Modifica @Transactional public void deleteStashedModificationInGroup(UUID groupUuid, boolean errorOnGroupNotFound) { - try { - ModificationGroupEntity groupEntity = getModificationGroup(groupUuid); - List modifications = getModificationEntityStream(groupUuid) - .filter(Objects::nonNull) - .filter(ModificationEntity::getStashed) - .toList(); - if (!modifications.isEmpty()) { - groupEntity.getModifications().removeAll(modifications); // No need to remove the group from the modification as we're going to delete it - deleteModifications(modifications); - } - } catch (NetworkModificationException e) { - if (e.getType() == MODIFICATION_GROUP_NOT_FOUND && !errorOnGroupNotFound) { - return; - } - throw e; + // TODO check this: if (e.getType() == MODIFICATION_GROUP_NOT_FOUND && !errorOnGroupNotFound) { + // return; + if (!errorOnGroupNotFound) { + return; + } + ModificationGroupEntity groupEntity = getModificationGroup(groupUuid); + List modifications = getModificationEntityStream(groupUuid) + .filter(Objects::nonNull) + .filter(ModificationEntity::getStashed) + .toList(); + if (!modifications.isEmpty()) { + groupEntity.getModifications().removeAll(modifications); // No need to remove the group from the modification as we're going to delete it + deleteModifications(modifications); } } diff --git a/src/main/java/org/gridsuite/modification/server/service/FilterService.java b/src/main/java/org/gridsuite/modification/server/service/FilterService.java index 9b3060a55..7cad7dbea 100644 --- a/src/main/java/org/gridsuite/modification/server/service/FilterService.java +++ b/src/main/java/org/gridsuite/modification/server/service/FilterService.java @@ -16,7 +16,6 @@ import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpMethod; import org.springframework.stereotype.Service; -import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; @@ -28,9 +27,6 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.gridsuite.modification.NetworkModificationException.Type.FILTERS_NOT_FOUND; -import static org.gridsuite.modification.server.NetworkModificationServerException.handleChangeError; - /** * @author bendaamerahm */ @@ -60,11 +56,7 @@ public List getFilters(List filtersUuids) { String path = UriComponentsBuilder.fromPath(DELIMITER + FILTER_SERVER_API_VERSION + "/filters/metadata" + ids) .buildAndExpand() .toUriString(); - try { - return restTemplate.exchange(filterServerBaseUri + path, HttpMethod.GET, null, new ParameterizedTypeReference>() { }).getBody(); - } catch (HttpStatusCodeException e) { - throw handleChangeError(e, FILTERS_NOT_FOUND); - } + return restTemplate.exchange(filterServerBaseUri + path, HttpMethod.GET, null, new ParameterizedTypeReference>() { }).getBody(); } public Stream exportFilters(List filtersUuids, Network network) { diff --git a/src/main/java/org/gridsuite/modification/server/service/LoadFlowService.java b/src/main/java/org/gridsuite/modification/server/service/LoadFlowService.java index 6c689f6c0..6ecb2dc5d 100644 --- a/src/main/java/org/gridsuite/modification/server/service/LoadFlowService.java +++ b/src/main/java/org/gridsuite/modification/server/service/LoadFlowService.java @@ -8,19 +8,14 @@ import lombok.extern.slf4j.Slf4j; import org.gridsuite.modification.ILoadFlowService; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.LoadFlowParametersInfos; import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; -import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import java.util.UUID; -import static org.gridsuite.modification.server.NetworkModificationServerException.handleChangeError; - /** * @author Achour BERRAHMA */ @@ -43,15 +38,6 @@ public LoadFlowService(@Value("${gridsuite.services.loadflow-server.base-uri:htt public LoadFlowParametersInfos getLoadFlowParametersInfos(UUID uuid) { String path = UriComponentsBuilder.fromPath(DELIMITER + LOADFLOW_SERVER_API_VERSION + PARAMETERS_URI) .buildAndExpand(uuid).toUriString(); - try { - return restTemplate.getForObject(loadFlowServerBaseUri + path, LoadFlowParametersInfos.class); - } catch (HttpStatusCodeException e) { - if (e.getStatusCode() == HttpStatus.NOT_FOUND) { - log.error("Load flow parameters with UUID {} not found", uuid); - return null; - } else { - throw handleChangeError(e, NetworkModificationException.Type.LOAD_FLOW_PARAMETERS_FETCH_ERROR); - } - } + return restTemplate.getForObject(loadFlowServerBaseUri + path, LoadFlowParametersInfos.class); } } diff --git a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java index ae369f3c8..58bf15993 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -10,7 +10,6 @@ import co.elastic.clients.elasticsearch._types.query_dsl.Query; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Streams; -import com.powsybl.commons.PowsyblException; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.VariantManagerConstants; import com.powsybl.network.store.client.NetworkStoreService; @@ -19,15 +18,14 @@ import org.apache.commons.lang3.StringUtils; import org.gridsuite.filter.AbstractFilter; import org.gridsuite.modification.ModificationType; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.GenerationDispatchInfos; import org.gridsuite.modification.dto.ModificationInfos; -import org.gridsuite.modification.server.NetworkModificationServerException; import org.gridsuite.modification.server.dto.*; import org.gridsuite.modification.server.dto.elasticsearch.ModificationApplicationInfos; import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosService; import org.gridsuite.modification.server.entities.ModificationEntity; +import org.gridsuite.modification.server.error.NetworkModificationServerRunException; import org.gridsuite.modification.server.modifications.NetworkModificationApplicator; import org.gridsuite.modification.server.repositories.ModificationRepository; import org.gridsuite.modification.server.repositories.NetworkModificationRepository; @@ -47,8 +45,6 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.gridsuite.modification.NetworkModificationException.Type.*; -import static org.gridsuite.modification.server.NetworkModificationServerException.Type.DUPLICATION_ARGUMENT_INVALID; import static org.gridsuite.modification.server.modifications.AsyncUtils.scheduleApplyModifications; /** @@ -124,7 +120,7 @@ public void verifyModifications(UUID groupUuid, Set modificationUuids) { .stream().map(ModificationInfos::getUuid) .collect(Collectors.toSet()) .containsAll(modificationUuids)) { - throw new NetworkModificationException(MODIFICATION_NOT_FOUND); + throw new NetworkModificationServerRunException("Modifications not found"); } } @@ -198,11 +194,8 @@ public void deleteIndexedModificationGroup(List groupUuids, UUID networkUu public NetworkInfos getNetworkInfos(UUID networkUuid, String variantId, PreloadingStrategy preloadingStrategy) { Network network; - try { - network = networkStoreService.getNetwork(networkUuid, preloadingStrategy); - } catch (PowsyblException e) { - throw new NetworkModificationException(NETWORK_NOT_FOUND, networkUuid.toString()); - } + network = networkStoreService.getNetwork(networkUuid, preloadingStrategy); + boolean isVariantPresent = true; if (variantId != null) { if (network.getVariantManager().getVariantIds().stream().anyMatch(id -> id.equals(variantId))) { @@ -274,19 +267,11 @@ public Network cloneNetworkVariant(UUID networkUuid, String destinationVariantId, PreloadingStrategy preloadingStrategy) { Network network; - try { - network = networkStoreService.getNetwork(networkUuid, preloadingStrategy); - network.addListener(new NetworkVariantsListener(network, networkUuid, equipmentInfosService)); - } catch (PowsyblException e) { - throw new NetworkModificationException(NETWORK_NOT_FOUND, networkUuid.toString()); - } + network = networkStoreService.getNetwork(networkUuid, preloadingStrategy); + network.addListener(new NetworkVariantsListener(network, networkUuid, equipmentInfosService)); String startingVariant = StringUtils.isBlank(originVariantId) ? VariantManagerConstants.INITIAL_VARIANT_ID : originVariantId; - try { - network.getVariantManager().cloneVariant(startingVariant, destinationVariantId, true); // cloning variant - network.getVariantManager().setWorkingVariant(destinationVariantId); // set current variant to destination variant - } catch (PowsyblException e) { - throw new NetworkModificationException(VARIANT_NOT_FOUND, startingVariant); - } + network.getVariantManager().cloneVariant(startingVariant, destinationVariantId, true); // cloning variant + network.getVariantManager().setWorkingVariant(destinationVariantId); // set current variant to destination variant return network; } @@ -296,14 +281,8 @@ public NetworkModificationResult buildVariant(@NonNull UUID networkUuid, @NonNul Streams.forEachPair(buildInfos.getModificationGroupUuids().stream(), buildInfos.getReportsInfos().stream(), (groupUuid, reportInfos) -> { Set modificationsToExclude = buildInfos.getModificationUuidsToExclude().get(groupUuid); - List modifications = List.of(); - try { - modifications = networkModificationRepository.getActiveModifications(groupUuid, modificationsToExclude); - } catch (NetworkModificationException e) { - if (e.getType() != MODIFICATION_GROUP_NOT_FOUND) { // May not exist - throw e; - } - } + List modifications = networkModificationRepository.getActiveModifications(groupUuid, modificationsToExclude); + modificationGroupsInfos.add(new ModificationApplicationGroup(groupUuid, modifications, reportInfos)); } @@ -331,7 +310,7 @@ public void stopBuildRequest(String receiver) { public void deleteNetworkModifications(UUID groupUuid, List modificationsUuids) { if (networkModificationRepository.deleteModifications(groupUuid, modificationsUuids) == 0) { - throw new NetworkModificationException(MODIFICATION_NOT_FOUND); + throw new NetworkModificationServerRunException("No modifications found"); } } @@ -347,22 +326,17 @@ public CompletableFuture moveModifications(@NonNull } public Map duplicateGroup(UUID sourceGroupUuid, UUID groupUuid) { - try { - List modificationToDuplicateInfos = networkModificationRepository.getUnstashedModificationsInfos(sourceGroupUuid); - List newModifications = networkModificationRepository.saveModificationInfos(groupUuid, modificationToDuplicateInfos); - - Map duplicateModificationMapping = new HashMap<>(); - for (int i = 0; i < modificationToDuplicateInfos.size(); i++) { - duplicateModificationMapping.put(modificationToDuplicateInfos.get(i).getUuid(), newModifications.get(i).getUuid()); - } - - return duplicateModificationMapping; - } catch (NetworkModificationException e) { - if (e.getType() == MODIFICATION_GROUP_NOT_FOUND) { // May not exist - return Map.of(); - } - throw e; + // TODO check this if (e.getType() == MODIFICATION_GROUP_NOT_FOUND) { // May not exist + // return Map.of(); + List modificationToDuplicateInfos = networkModificationRepository.getUnstashedModificationsInfos(sourceGroupUuid); + List newModifications = networkModificationRepository.saveModificationInfos(groupUuid, modificationToDuplicateInfos); + + Map duplicateModificationMapping = new HashMap<>(); + for (int i = 0; i < modificationToDuplicateInfos.size(); i++) { + duplicateModificationMapping.put(modificationToDuplicateInfos.get(i).getUuid(), newModifications.get(i).getUuid()); } + + return duplicateModificationMapping; } private CompletableFuture> applyModifications(UUID networkUuid, String variantId, ModificationApplicationGroup modificationGroupInfos) { @@ -383,7 +357,7 @@ private CompletableFuture> applyModification public CompletableFuture duplicateModifications(@NonNull UUID targetGroupUuid, UUID originGroupUuid, @NonNull List modificationsUuids, @NonNull List applicationContexts) { if (originGroupUuid != null && !modificationsUuids.isEmpty()) { // Duplicate modifications from a group or from a list only - throw new NetworkModificationServerException(DUPLICATION_ARGUMENT_INVALID); + throw new NetworkModificationServerRunException("Invalid argument for duplication"); } List duplicateModifications = networkModificationRepository.saveDuplicateModifications(targetGroupUuid, originGroupUuid, modificationsUuids); List ids = duplicateModifications.stream().map(ModificationInfos::getUuid).toList(); diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index fa2ed09f3..800a8c03e 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -21,7 +21,6 @@ import com.powsybl.network.store.iidm.impl.NetworkFactoryImpl; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.tuple.Pair; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.dto.LoadCreationInfos.LoadCreationInfosBuilder; import org.gridsuite.modification.server.dto.ModificationMetadata; @@ -32,6 +31,7 @@ import org.gridsuite.modification.server.elasticsearch.EquipmentInfosRepository; import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; import org.gridsuite.modification.server.elasticsearch.TombstonedEquipmentInfosRepository; +import org.gridsuite.modification.server.error.NetworkModificationServerRunException; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.impacts.SimpleElementImpact; import org.gridsuite.modification.server.impacts.TestImpactUtils; @@ -64,10 +64,8 @@ import java.util.stream.Collectors; import static org.gridsuite.modification.ModificationType.EQUIPMENT_ATTRIBUTE_MODIFICATION; -import static org.gridsuite.modification.NetworkModificationException.Type.*; import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.SIDE1; import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.SIDE2; -import static org.gridsuite.modification.server.NetworkModificationServerException.Type.DUPLICATION_ARGUMENT_INVALID; import static org.gridsuite.modification.server.elasticsearch.EquipmentInfosService.getIndexedEquipmentTypes; import static org.gridsuite.modification.server.impacts.TestImpactUtils.*; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; @@ -199,13 +197,6 @@ private String getJsonBody(List uuids, String variantId) throws JsonProces return TestUtils.getJsonBody(uuids, TEST_NETWORK_ID, variantId); } - @Test - void testModificationException() { - assertEquals(new NetworkModificationException(MODIFICATION_ERROR).getMessage(), MODIFICATION_ERROR.name()); - assertEquals(new NetworkModificationException(MODIFICATION_ERROR, "Error message").getMessage(), MODIFICATION_ERROR.name() + " : Error message"); - assertEquals(new NetworkModificationException(MODIFICATION_ERROR, new IllegalArgumentException("Error message")).getMessage(), MODIFICATION_ERROR.name() + " : Error message"); - } - @Test void testEquipmentIdNonNull() { String errorMessage = "equipmentId is marked non-null but is null"; @@ -222,15 +213,15 @@ void testNetworkNotFound() throws Exception { MvcResult mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(body).contentType(MediaType.APPLICATION_JSON), status().isNotFound()); - assertEquals(new NetworkModificationException(NETWORK_NOT_FOUND, NOT_FOUND_NETWORK_ID.toString()).getMessage(), mvcResult.getResponse().getContentAsString()); + assertEquals("(NETWORK_NOT_FOUND, NOT_FOUND_NETWORK_ID.toString()).getMessage()", mvcResult.getResponse().getContentAsString()); } @Test void assertThrowsUpdateModificationNotFound() { UUID modificationUuid = UUID.randomUUID(); ModificationInfos modificationInfos = LoadCreationInfos.builder().equipmentId("id").build(); - String errorMessage = assertThrows(NetworkModificationException.class, () -> networkModificationService.updateNetworkModification(modificationUuid, modificationInfos)).getMessage(); - assertEquals(new NetworkModificationException(MODIFICATION_NOT_FOUND, String.format("%s", modificationUuid)).getMessage(), errorMessage); + String errorMessage = assertThrows(RuntimeException.class, () -> networkModificationService.updateNetworkModification(modificationUuid, modificationInfos)).getMessage(); + assertEquals("Modification not found: " + modificationUuid, errorMessage); assertThrows(NullPointerException.class, () -> networkModificationService.updateNetworkModification(modificationUuid, null)); } @@ -283,7 +274,7 @@ void testModificationGroups() throws Exception { .andExpect(status().isOk()); mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=true", TEST_GROUP_ID)).andExpectAll(status().isNotFound(), - content().string(new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage())); + content().string(new NetworkModificationServerRunException("Modification group " + TEST_GROUP_ID + " not found").getMessage())); mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=true&errorOnGroupNotFound=false", TEST_GROUP_ID)).andExpectAll( status().isOk(), @@ -431,7 +422,7 @@ void testDeleteAllModification() throws Exception { void testDeleteModificationMissingParamError() throws Exception { mockMvc.perform(delete(URI_NETWORK_MODIF_BASE)) .andExpect(status().isInternalServerError()) - .andExpect(result -> assertInstanceOf(NetworkModificationException.class, result.getResolvedException())) + .andExpect(result -> assertInstanceOf(RuntimeException.class, result.getResolvedException())) .andExpect(result -> assertEquals("MODIFICATION_DELETION_ERROR : need to specify the group or give a list of UUIDs", result.getResolvedException().getMessage())); } @@ -578,7 +569,7 @@ void testCopyModification() throws Exception { .content(bodyJson) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isBadRequest()).andReturn(); - assertEquals(new NetworkModificationServerException(DUPLICATION_ARGUMENT_INVALID).getMessage(), mvcResult.getResponse().getContentAsString()); + assertEquals("DUPLICATION_ARGUMENT_INVALID", mvcResult.getResponse().getContentAsString()); } /** @@ -1391,8 +1382,8 @@ void shouldGetPosition() { assertEquals(0, result2); ModificationUtils modificationUtils = ModificationUtils.getInstance(); - String errorMessage = assertThrows(NetworkModificationException.class, () -> modificationUtils.getPosition("invalidBbsId", network, vl)).getMessage(); - assertEquals(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "invalidBbsId").getMessage(), errorMessage); + String errorMessage = assertThrows(RuntimeException.class, () -> modificationUtils.getPosition("invalidBbsId", network, vl)).getMessage(); + assertEquals("Busbar section invalidBbsId does not exist in network", errorMessage); } @Test @@ -1721,7 +1712,7 @@ void testDuplicateCompositeModification() throws Exception { assertEquals(1, groupModifications.size()); assertEquals(modificationUuidList.get(0), groupModifications.get(0).getUuid()); // duplicate has been deleted - assertEquals("MODIFICATION_NOT_FOUND : " + returnedNewId, assertThrows(NetworkModificationException.class, () + assertEquals("Modification not found: " + returnedNewId, assertThrows(RuntimeException.class, () -> modificationRepository.getModificationInfo(returnedNewId)).getMessage()); } @@ -1818,8 +1809,7 @@ void testStandaloneDeletionError() throws Exception { .queryParam("uuids", switchModificationId.toString())) .andExpectAll( status().is5xxServerError(), - content().string(new NetworkModificationException(MODIFICATION_DELETION_ERROR, - String.format("%s is owned by group %s", switchModificationId, TEST_GROUP_ID)).getMessage()) + content().string(new NetworkModificationServerRunException(String.format("%s is owned by group %s", switchModificationId, TEST_GROUP_ID)).getMessage()) ); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java index cb237f39d..12b9af23c 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java @@ -12,21 +12,17 @@ import com.powsybl.iidm.network.Network; import com.powsybl.loadflow.LoadFlowParameters; import org.gridsuite.modification.dto.*; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.server.dto.NetworkModificationsResult; +import org.gridsuite.modification.server.error.NetworkModificationServerRunException; import org.gridsuite.modification.server.service.LoadFlowService; -import org.gridsuite.modification.server.NetworkModificationServerException; import org.gridsuite.modification.server.utils.elasticsearch.DisableElasticsearch; -import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.ResultActions; -import org.springframework.web.client.HttpStatusCodeException; import java.util.List; import java.util.Map; @@ -70,9 +66,7 @@ void setupLoadFlowServiceMock() { // Mock for server error case when(loadFlowService.getLoadFlowParametersInfos(ERROR_LOADFLOW_PARAMETERS_UUID)) - .thenThrow(new NetworkModificationException( - NetworkModificationException.Type.LOAD_FLOW_PARAMETERS_FETCH_ERROR, - "Internal server error")); + .thenThrow(new NetworkModificationServerRunException("LOAD_FLOW_PARAMETERS_FETCH_ERROR : Internal server error")); } @Override @@ -172,125 +166,14 @@ void testGetLoadFlowParametersInfosNotFound() { */ @Test void testGetLoadFlowParametersInfosServerError() { - NetworkModificationException exception = assertThrows( - NetworkModificationException.class, + RuntimeException exception = assertThrows( + RuntimeException.class, () -> loadFlowService.getLoadFlowParametersInfos(ERROR_LOADFLOW_PARAMETERS_UUID) ); - assertEquals(NetworkModificationException.Type.LOAD_FLOW_PARAMETERS_FETCH_ERROR, exception.getType()); assertEquals("LOAD_FLOW_PARAMETERS_FETCH_ERROR : Internal server error", exception.getMessage()); } - /** - * Test NetworkModificationServerException.handleChangeError() method with empty response body - */ - @Test - void testHandleChangeErrorWithEmptyResponseBody() { - HttpStatusCodeException httpException = new HttpStatusCodeException(HttpStatus.INTERNAL_SERVER_ERROR) { - @NotNull - @Override - public String getResponseBodyAsString() { - return ""; - } - }; - - NetworkModificationException result = NetworkModificationServerException.handleChangeError( - httpException, - NetworkModificationException.Type.LOAD_FLOW_PARAMETERS_FETCH_ERROR - ); - - assertEquals(NetworkModificationException.Type.LOAD_FLOW_PARAMETERS_FETCH_ERROR, result.getType()); - assertEquals("LOAD_FLOW_PARAMETERS_FETCH_ERROR : 500 INTERNAL_SERVER_ERROR", result.getMessage()); - } - - /** - * Test NetworkModificationServerException.handleChangeError() method with JSON response body containing message - */ - @Test - void testHandleChangeErrorWithJsonResponseBody() { - HttpStatusCodeException httpException = new HttpStatusCodeException(HttpStatus.BAD_REQUEST) { - @NotNull - @Override - public String getResponseBodyAsString() { - return "{\"message\": \"Invalid parameters provided\", \"code\": 400}"; - } - }; - - NetworkModificationException result = NetworkModificationServerException.handleChangeError( - httpException, - NetworkModificationException.Type.LOAD_FLOW_PARAMETERS_FETCH_ERROR - ); - - assertEquals(NetworkModificationException.Type.LOAD_FLOW_PARAMETERS_FETCH_ERROR, result.getType()); - assertEquals("LOAD_FLOW_PARAMETERS_FETCH_ERROR : Invalid parameters provided", result.getMessage()); - } - - /** - * Test NetworkModificationServerException.handleChangeError() method with plain text response body - */ - @Test - void testHandleChangeErrorWithPlainTextResponseBody() { - HttpStatusCodeException httpException = new HttpStatusCodeException(HttpStatus.NOT_FOUND) { - @NotNull - @Override - public String getResponseBodyAsString() { - return "Resource not found"; - } - }; - - NetworkModificationException result = NetworkModificationServerException.handleChangeError( - httpException, - NetworkModificationException.Type.LOAD_FLOW_PARAMETERS_FETCH_ERROR - ); - - assertEquals(NetworkModificationException.Type.LOAD_FLOW_PARAMETERS_FETCH_ERROR, result.getType()); - assertEquals("LOAD_FLOW_PARAMETERS_FETCH_ERROR : Resource not found", result.getMessage()); - } - - /** - * Test NetworkModificationServerException.handleChangeError() method with invalid JSON response body - */ - @Test - void testHandleChangeErrorWithInvalidJsonResponseBody() { - HttpStatusCodeException httpException = new HttpStatusCodeException(HttpStatus.INTERNAL_SERVER_ERROR) { - @NotNull - @Override - public String getResponseBodyAsString() { - return "{invalid json structure"; - } - }; - - NetworkModificationException result = NetworkModificationServerException.handleChangeError( - httpException, - NetworkModificationException.Type.LOAD_FLOW_PARAMETERS_FETCH_ERROR - ); - - assertEquals(NetworkModificationException.Type.LOAD_FLOW_PARAMETERS_FETCH_ERROR, result.getType()); - assertEquals("LOAD_FLOW_PARAMETERS_FETCH_ERROR : {invalid json structure", result.getMessage()); - } - - /** - * Test NetworkModificationServerException.handleChangeError() method with JSON response body without message field - */ - @Test - void testHandleChangeErrorWithJsonResponseBodyWithoutMessage() { - HttpStatusCodeException httpException = new HttpStatusCodeException(HttpStatus.CONFLICT) { - @NotNull - @Override - public String getResponseBodyAsString() { - return "{\"error\": \"Conflict occurred\", \"timestamp\": \"2025-01-01T10:00:00Z\"}"; - } - }; - - NetworkModificationException result = NetworkModificationServerException.handleChangeError( - httpException, - NetworkModificationException.Type.LOAD_FLOW_PARAMETERS_FETCH_ERROR - ); - - assertEquals(NetworkModificationException.Type.LOAD_FLOW_PARAMETERS_FETCH_ERROR, result.getType()); - assertEquals("LOAD_FLOW_PARAMETERS_FETCH_ERROR : {\"error\": \"Conflict occurred\", \"timestamp\": \"2025-01-01T10:00:00Z\"}", result.getMessage()); - } - @Override protected ModificationInfos buildModificationUpdate() { return BalancesAdjustmentModificationInfos.builder() diff --git a/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInBusBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInBusBreakerTest.java index 8065b5e4d..cd7fbe472 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInBusBreakerTest.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.BatteryCreationInfos; import org.gridsuite.modification.dto.FreePropertyInfos; import org.gridsuite.modification.dto.ModificationInfos; @@ -24,7 +23,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.BUS_NOT_FOUND; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -116,7 +114,7 @@ void testCreateWithBusbarSectionErrors() throws Exception { String body = getJsonBody(batteryCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(BUS_NOT_FOUND, "notFoundBus").getMessage(), + assertLogMessage("Bus notFoundBus does not exist in network", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInNodeBreakerTest.java index fcb35eaa0..50aece287 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInNodeBreakerTest.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.BatteryCreationInfos; import org.gridsuite.modification.dto.FreePropertyInfos; import org.gridsuite.modification.dto.ModificationInfos; @@ -27,7 +26,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.*; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -131,7 +129,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, "notFoundVoltageLevelId").getMessage(), + assertLogMessage("Voltage level notFoundVoltageLevelId does not exist in network", ERROR_MESSAGE_KEY, reportService); // not found busbar section @@ -140,7 +138,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "notFoundBusbarSection").getMessage(), + assertLogMessage("Busbar section notFoundBusbarSection does not exist in network", ERROR_MESSAGE_KEY, reportService); // invalid min active power @@ -162,7 +160,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_BATTERY_ERROR, "Battery 'idBattery1' : minimum reactive power is not set").getMessage(), + assertLogMessage("Battery 'idBattery1' : minimum reactive power is not set", ERROR_MESSAGE_KEY, reportService); batteryCreationInfos = (BatteryCreationInfos) buildModification(); @@ -172,7 +170,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_BATTERY_ERROR, "Battery 'idBattery1' : maximum reactive power is not set").getMessage(), + assertLogMessage("Battery 'idBattery1' : maximum reactive power is not set", ERROR_MESSAGE_KEY, reportService); batteryCreationInfos = (BatteryCreationInfos) buildModification(); @@ -183,7 +181,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_BATTERY_ERROR, "Battery 'idBattery1' : maximum reactive power is expected to be greater than or equal to minimum reactive power").getMessage(), + assertLogMessage("Battery 'idBattery1' : maximum reactive power is expected to be greater than or equal to minimum reactive power", ERROR_MESSAGE_KEY, reportService); // invalid reactive capability curve limit @@ -193,7 +191,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_BATTERY_ERROR, "Battery 'idBattery1' : P is not set in a reactive capability curve limits point").getMessage(), + assertLogMessage("Battery 'idBattery1' : P is not set in a reactive capability curve limits point", ERROR_MESSAGE_KEY, reportService); // try to create an existing battery @@ -202,7 +200,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(BATTERY_ALREADY_EXISTS, "v3Battery").getMessage(), + assertLogMessage("Battery already exists: v3Battery", ERROR_MESSAGE_KEY, reportService); batteryCreationInfos.setEquipmentId("idBattery3"); batteryCreationInfos.setEquipmentName("nameBattery3"); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java index da04d9d2a..a090bdb33 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java @@ -310,7 +310,7 @@ void testActivePowerZeroOrBetweenMinAndMaxActivePower() throws Exception { .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); - assertLogMessage("MODIFY_BATTERY_ERROR : Battery '" + "v3Battery" + "' : Active power " + activePower + " is expected to be equal to 0 or within the range of minimum active power and maximum active power: [" + minActivePower + ", " + maxActivePower + "]", + assertLogMessage("Battery '" + "v3Battery" + "' : Active power " + activePower + " is expected to be equal to 0 or within the range of minimum active power and maximum active power: [" + minActivePower + ", " + maxActivePower + "]", ERROR_MESSAGE_KEY, reportService); } @@ -357,7 +357,7 @@ void testMinQGreaterThanMaxQ() throws Exception { .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); - assertLogMessage("MODIFY_BATTERY_ERROR : Battery '" + "v3Battery" + "' : maximum reactive power " + maxQ.get() + " is expected to be greater than or equal to minimum reactive power " + minQ.get(), + assertLogMessage("Battery '" + "v3Battery" + "' : maximum reactive power " + maxQ.get() + " is expected to be greater than or equal to minimum reactive power " + minQ.get(), ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/DeleteAttachingLineTest.java b/src/test/java/org/gridsuite/modification/server/modifications/DeleteAttachingLineTest.java index 78798365b..e19f67944 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/DeleteAttachingLineTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/DeleteAttachingLineTest.java @@ -8,7 +8,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.Network; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.DeleteAttachingLineInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.utils.NetworkWithTeePoint; @@ -21,8 +20,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.LINE_ALREADY_EXISTS; -import static org.gridsuite.modification.NetworkModificationException.Type.LINE_NOT_FOUND; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -96,7 +93,7 @@ void createWithInvalidLineIdTest() throws Exception { .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(LINE_NOT_FOUND, "ll").getMessage(), + assertLogMessage("Line not found: ll", ERROR_MESSAGE_KEY, reportService); } @@ -131,7 +128,7 @@ void createNewLineWithExistingIdTest() throws Exception { .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "l2").getMessage(), + assertLogMessage("Line already exist: l2", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/DeleteVoltageLevelOnLineTest.java b/src/test/java/org/gridsuite/modification/server/modifications/DeleteVoltageLevelOnLineTest.java index d5be334aa..2239a5de5 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/DeleteVoltageLevelOnLineTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/DeleteVoltageLevelOnLineTest.java @@ -8,7 +8,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.Network; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.DeleteVoltageLevelOnLineInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -21,8 +20,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.LINE_ALREADY_EXISTS; -import static org.gridsuite.modification.NetworkModificationException.Type.LINE_NOT_FOUND; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -98,7 +95,7 @@ void createWithInvalidLineIdTest() throws Exception { .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(LINE_NOT_FOUND, "ll").getMessage(), + assertLogMessage("Line not found: ll", ERROR_MESSAGE_KEY, reportService); } @@ -112,7 +109,7 @@ void createNewLineWithExistingIdTest() throws Exception { .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "l2").getMessage(), + assertLogMessage("Line already exists: l2", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModificationTest.java index 202d83903..32f16a18f 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModificationTest.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.IdentifiableType; import com.powsybl.iidm.network.Network; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.EquipmentAttributeModificationInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -24,7 +23,6 @@ import java.util.Set; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.*; import static org.gridsuite.modification.server.impacts.TestImpactUtils.testElementModificationImpact; import static org.gridsuite.modification.server.impacts.TestImpactUtils.testEmptyImpacts; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; @@ -104,7 +102,7 @@ private void switchModifications(String extraParams, String switchId1, String sw .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(EQUIPMENT_NOT_FOUND, switchNotFoundId).getMessage(), + assertLogMessage("Equipment not found: " + switchNotFoundId, ERROR_MESSAGE_KEY, reportService); // switch closing when already closed @@ -160,7 +158,7 @@ void testWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpectAll( status().isBadRequest(), - content().string(new NetworkModificationException(EQUIPMENT_ATTRIBUTE_NAME_ERROR, "For switch status, the attribute name is only 'open'").getMessage())); + content().string("For switch status, the attribute name is only 'open'")); // bad equipment attribute value switchStatusModificationInfos.setEquipmentAttributeName("open"); @@ -170,7 +168,7 @@ void testWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpectAll( status().isBadRequest(), - content().string(new NetworkModificationException(EQUIPMENT_ATTRIBUTE_VALUE_ERROR, "For switch status, the attribute values are only " + Set.of(true, false)).getMessage())); + content().string("For switch status, the attribute values are only " + Set.of(true, false))); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/EquipmentDeletionTest.java b/src/test/java/org/gridsuite/modification/server/modifications/EquipmentDeletionTest.java index 9eb84f965..130274ea7 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/EquipmentDeletionTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/EquipmentDeletionTest.java @@ -13,7 +13,6 @@ import com.powsybl.iidm.modification.topology.RemoveSubstationBuilder; import com.powsybl.iidm.network.IdentifiableType; import com.powsybl.iidm.network.Network; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.EquipmentDeletionInfos; import org.gridsuite.modification.dto.HvdcLccDeletionInfos; import org.gridsuite.modification.dto.ModificationInfos; @@ -34,7 +33,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.EQUIPMENT_NOT_FOUND; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -108,7 +106,7 @@ void testCreateWithErrors() throws Exception { String body = getJsonBody(equipmentDeletionInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(EQUIPMENT_NOT_FOUND, "Equipment with id=notFoundLoad not found or of bad type").getMessage(), + assertLogMessage("LOAD with id :notFoundLoad not found", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GenerationDispatchTest.java b/src/test/java/org/gridsuite/modification/server/modifications/GenerationDispatchTest.java index 20e64f771..0ca44ca36 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GenerationDispatchTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GenerationDispatchTest.java @@ -14,7 +14,6 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.modifications.GenerationDispatch; import org.gridsuite.modification.server.dto.NetworkModificationResult; @@ -585,11 +584,11 @@ void testGenerationDispatchErrorCheck() { GenerationDispatchInfos modification = GenerationDispatchInfos.builder().lossCoefficient(150.).defaultOutageRate(0.).build(); final GenerationDispatch generationDispatch1 = new GenerationDispatch(modification); - assertThrows(NetworkModificationException.class, () -> generationDispatch1.check(network), "GENERATION_DISPATCH_ERROR : The loss coefficient must be between 0 and 100"); + assertThrows(RuntimeException.class, () -> generationDispatch1.check(network), "GENERATION_DISPATCH_ERROR : The loss coefficient must be between 0 and 100"); modification = GenerationDispatchInfos.builder().lossCoefficient(20.).defaultOutageRate(140.).build(); final GenerationDispatch generationDispatch2 = new GenerationDispatch(modification); - assertThrows(NetworkModificationException.class, () -> generationDispatch2.check(network), "GENERATION_DISPATCH_ERROR : The default outage rate must be between 0 and 100"); + assertThrows(RuntimeException.class, () -> generationDispatch2.check(network), "GENERATION_DISPATCH_ERROR : The default outage rate must be between 0 and 100"); } @Test diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInBusBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInBusBreakerTest.java index 9761a89ab..ea1c6c2ee 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInBusBreakerTest.java @@ -10,7 +10,6 @@ import com.powsybl.iidm.network.EnergySource; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.FreePropertyInfos; import org.gridsuite.modification.dto.GeneratorCreationInfos; import org.gridsuite.modification.dto.ModificationInfos; @@ -25,8 +24,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.BUS_NOT_FOUND; -import static org.gridsuite.modification.NetworkModificationException.Type.EQUIPMENT_NOT_FOUND; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -142,7 +139,7 @@ void testCreateWithBusbarSectionErrors() throws Exception { String body = getJsonBody(generatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(BUS_NOT_FOUND, "notFoundBus").getMessage(), + assertLogMessage("Bus notFoundBus does not exist in network", ERROR_MESSAGE_KEY, reportService); } @@ -156,7 +153,7 @@ void testCreateWithRegulatedTerminalError() throws Exception { String generatorCreationInfosJson = getJsonBody(generatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(EQUIPMENT_NOT_FOUND, "Equipment with id=titi not found with type LINE").getMessage(), + assertLogMessage("Equipment with id=titi not found with type LINE", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInNodeBreakerTest.java index df315e5b8..188a984ae 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInNodeBreakerTest.java @@ -10,7 +10,6 @@ import com.powsybl.iidm.network.EnergySource; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.dto.NetworkModificationsResult; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -22,7 +21,6 @@ import java.util.*; -import static org.gridsuite.modification.NetworkModificationException.Type.*; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -152,7 +150,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, "notFoundVoltageLevelId").getMessage(), + assertLogMessage("Voltage level notFoundVoltageLevelId does not exist in network", ERROR_MESSAGE_KEY, reportService); // not found busbar section @@ -162,7 +160,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "notFoundBusbarSection").getMessage(), + assertLogMessage("Busbar section notFoundBusbarSection does not exist in network", ERROR_MESSAGE_KEY, reportService); // invalid min active power @@ -186,7 +184,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_GENERATOR_ERROR, "Generator 'idGenerator1' : minimum reactive power is not set").getMessage(), + assertLogMessage("Generator 'idGenerator1' : minimum reactive power is not set", ERROR_MESSAGE_KEY, reportService); generatorCreationInfos = (GeneratorCreationInfos) buildModification(); @@ -197,7 +195,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_GENERATOR_ERROR, "Generator 'idGenerator1' : maximum reactive power is not set").getMessage(), + assertLogMessage("Generator 'idGenerator1' : maximum reactive power is not set", ERROR_MESSAGE_KEY, reportService); generatorCreationInfos = (GeneratorCreationInfos) buildModification(); @@ -209,7 +207,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_GENERATOR_ERROR, "Generator 'idGenerator1' : maximum reactive power is expected to be greater than or equal to minimum reactive power").getMessage(), + assertLogMessage("Generator 'idGenerator1' : maximum reactive power is expected to be greater than or equal to minimum reactive power", ERROR_MESSAGE_KEY, reportService); // invalid reactive capability curve limit @@ -220,7 +218,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_GENERATOR_ERROR, "Generator 'idGenerator1' : P is not set in a reactive capability curve limits point").getMessage(), + assertLogMessage("Generator 'idGenerator1' : P is not set in a reactive capability curve limits point", ERROR_MESSAGE_KEY, reportService); // try to create an existing generator @@ -230,7 +228,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(GENERATOR_ALREADY_EXISTS, "v5generator").getMessage(), + assertLogMessage("Generator already exists: v5generator", ERROR_MESSAGE_KEY, reportService); // Test create generator on not yet existing variant VARIANT_NOT_EXISTING_ID : diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorModificationTest.java index 1162630fa..22b5b7f89 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorModificationTest.java @@ -426,7 +426,7 @@ void testMinQGreaterThanMaxQ() throws Exception { .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); - assertLogMessage("MODIFY_GENERATOR_ERROR : Generator '" + "idGenerator" + "' : maximum reactive power " + maxQ.get() + " is expected to be greater than or equal to minimum reactive power " + minQ.get(), + assertLogMessage("Generator '" + "idGenerator" + "' : maximum reactive power " + maxQ.get() + " is expected to be greater than or equal to minimum reactive power " + minQ.get(), ERROR_MESSAGE_KEY, reportService); } @@ -449,7 +449,7 @@ void testActivePowerZeroOrBetweenMinAndMaxActivePower() throws Exception { .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); - assertLogMessage("MODIFY_GENERATOR_ERROR : Generator '" + "idGenerator" + "' : Active power " + activePower + " is expected to be equal to 0 or within the range of minimum active power and maximum active power: [" + minActivePower + ", " + maxActivePower + "]", + assertLogMessage("Generator '" + "idGenerator" + "' : Active power " + activePower + " is expected to be equal to 0 or within the range of minimum active power and maximum active power: [" + minActivePower + ", " + maxActivePower + "]", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorScalingTest.java b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorScalingTest.java index fd95fd84a..129d82841 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorScalingTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorScalingTest.java @@ -231,7 +231,7 @@ void testFilterWithWrongIds() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(generatorScalingInfo.getErrorType().name() + ": There is no valid equipment ID among the provided filter(s)", + assertLogMessage("There is no valid equipment ID among the provided filter(s)", "network.modification.invalidFilters", reportService); wireMockUtils.verifyGetRequest(subWrongId, PATH, handleQueryParams(FILTER_WRONG_ID_1), false); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GroovyScriptTest.java b/src/test/java/org/gridsuite/modification/server/modifications/GroovyScriptTest.java index aadb2ec11..0048d5068 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GroovyScriptTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GroovyScriptTest.java @@ -7,7 +7,6 @@ package org.gridsuite.modification.server.modifications; import com.powsybl.iidm.network.Network; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.GroovyScriptInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -20,7 +19,6 @@ import java.util.Set; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.GROOVY_SCRIPT_EMPTY; import static org.gridsuite.modification.server.impacts.TestImpactUtils.testElementModificationImpact; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; @@ -136,14 +134,14 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(getJsonBody(groovyScriptInfos, null)).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(GROOVY_SCRIPT_EMPTY).getMessage(), + assertLogMessage("Groovy script empty", ERROR_MESSAGE_KEY, reportService); groovyScriptInfos.setScript(" "); // apply blank groovy script mockMvc.perform(post(getNetworkModificationUri()).content(getJsonBody(groovyScriptInfos, null)).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(GROOVY_SCRIPT_EMPTY).getMessage(), + assertLogMessage("Groovy script empty", ERROR_MESSAGE_KEY, reportService); groovyScriptInfos.setScript("network.getGenerator('there is no generator').targetP=12\n"); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LccCreationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LccCreationTest.java index 980d8bc58..35d7fb37b 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LccCreationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LccCreationTest.java @@ -11,7 +11,6 @@ import com.powsybl.iidm.network.LccConverterStation; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.FreePropertyInfos; import org.gridsuite.modification.dto.LccConverterStationCreationInfos; import org.gridsuite.modification.dto.LccCreationInfos; @@ -24,8 +23,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.HVDC_LINE_ALREADY_EXISTS; -import static org.gridsuite.modification.NetworkModificationException.Type.VOLTAGE_LEVEL_NOT_FOUND; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -161,7 +158,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(lccCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, "notFoundVoltageLevelId").getMessage(), + assertLogMessage("Voltage level notFoundVoltageLevelId does not exist in network", ERROR_MESSAGE_KEY, reportService); // try to create an existing lcc @@ -170,7 +167,7 @@ void testCreateWithErrors() throws Exception { lccCreationInfosJson = getJsonBody(lccCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(lccCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(HVDC_LINE_ALREADY_EXISTS, "hvdcLine").getMessage(), + assertLogMessage("HVDC line already exists: hvdcLine", ERROR_MESSAGE_KEY, reportService); } } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineAttachToVoltageLevelTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineAttachToVoltageLevelTest.java index 62034ae8b..183eff81d 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineAttachToVoltageLevelTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineAttachToVoltageLevelTest.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.SwitchKind; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; @@ -21,7 +20,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.*; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -133,7 +131,7 @@ private void tryToCreateLineWithExistingId(LineAttachToVoltageLevelInfos tryWith .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, existingLineId).getMessage(), + assertLogMessage("Line already exists: " + existingLineId, ERROR_MESSAGE_KEY, reportService); } @@ -144,7 +142,7 @@ void testCreateWithErrors() throws Exception { String lineAttachToAbsentLineJson = getJsonBody(lineAttachToAbsentLine, null); mockMvc.perform(post(getNetworkModificationUri()).content(lineAttachToAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(LINE_NOT_FOUND, "absent_line_id").getMessage(), + assertLogMessage("Line not found: absent_line_id", ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 1); @@ -154,7 +152,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(lineMissingLineJson).contentType(MediaType.APPLICATION_JSON)) .andExpectAll( status().is4xxClientError(), - content().string(new NetworkModificationException(LINE_ATTACH_DESCRIPTION_ERROR, "Missing required attachment line description").getMessage()) + content().string("Missing required attachment line description") ); testNetworkModificationsCount(getGroupId(), 1); } @@ -179,7 +177,7 @@ void testCreateWithExistingEquipments() throws Exception { String tryWithExistingLineJson = getJsonBody(tryWithAttachmentPointId, null); mockMvc.perform(post(getNetworkModificationUri()).content(tryWithExistingLineJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_ALREADY_EXISTS, "v5").getMessage(), + assertLogMessage("Voltage level already exists: v5", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInBusBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInBusBreakerTest.java index 0e37a1e35..22d7c0a57 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInBusBreakerTest.java @@ -8,7 +8,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.Network; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; @@ -20,7 +19,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.BUS_NOT_FOUND; import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.*; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; @@ -42,7 +40,7 @@ void testCreateWithErrors() throws Exception { String lineCreationInfosJson = getJsonBody(lineCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(lineCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(BUS_NOT_FOUND, "notFoundBus").getMessage(), + assertLogMessage("Bus notFoundBus does not exist in network", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java index 176720cb1..d7b1367e1 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java @@ -11,7 +11,6 @@ import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.OperationalLimitsGroup; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.dto.NetworkModificationsResult; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -23,7 +22,6 @@ import java.util.*; -import static org.gridsuite.modification.NetworkModificationException.Type.*; import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.*; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; @@ -76,7 +74,7 @@ void testCreateWithErrors() throws Exception { lineCreationInfosJson = getJsonBody(lineCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(lineCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, "notFoundVoltageLevelId1").getMessage(), + assertLogMessage("Voltage level notFoundVoltageLevelId1 does not exist in network", ERROR_MESSAGE_KEY, reportService); lineCreationInfos.setVoltageLevelId1("v1"); @@ -84,7 +82,7 @@ void testCreateWithErrors() throws Exception { lineCreationInfosJson = getJsonBody(lineCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(lineCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "notFoundBusbarSection1").getMessage(), + assertLogMessage("Busbar section notFoundBusbarSection1 does not exist in network", ERROR_MESSAGE_KEY, reportService); lineCreationInfos.setVoltageLevelId1("v1"); @@ -107,7 +105,7 @@ void testCreateWithErrors() throws Exception { lineCreationInfosJson = getJsonBody(lineCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(lineCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "line2").getMessage(), + assertLogMessage(":line already exists: line2", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java index beee0de27..f48e0303c 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java @@ -17,7 +17,6 @@ import com.powsybl.iidm.network.extensions.Measurements; import org.apache.commons.collections4.CollectionUtils; import org.assertj.core.api.Assertions; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.dto.NetworkModificationsResult; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; @@ -36,7 +35,6 @@ import java.util.Optional; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.LINE_NOT_FOUND; import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.SIDE1; import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.SIDE2; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; @@ -249,7 +247,7 @@ void testCreateWithErrors() throws Exception { .content(lineModificationInfosJson) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(LINE_NOT_FOUND, "Line 'lineNotFound' : does not exist in network").getMessage(), + assertLogMessage("Line 'lineNotFound' : does not exist in network", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineSplitWithNewVoltageLevelTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineSplitWithNewVoltageLevelTest.java index 1e26e3f46..04af42da6 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineSplitWithNewVoltageLevelTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineSplitWithNewVoltageLevelTest.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.SwitchKind; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.CouplingDeviceInfos; import org.gridsuite.modification.dto.LineSplitWithVoltageLevelInfos; import org.gridsuite.modification.dto.ModificationInfos; @@ -23,7 +22,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.LINE_NOT_FOUND; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -40,7 +38,7 @@ void testCreateWithErrors() throws Exception { String lineSplitAbsentLineJson = getJsonBody(lineSplitAbsentLine, null); mockMvc.perform(post(getNetworkModificationUri()).content(lineSplitAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(LINE_NOT_FOUND, "absent_line_id").getMessage(), + assertLogMessage("Line not found: absent_line_id", ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 1); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineSplitWithVoltageLevelTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineSplitWithVoltageLevelTest.java index 900fd7eab..d165d9427 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineSplitWithVoltageLevelTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineSplitWithVoltageLevelTest.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.SwitchKind; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.CouplingDeviceInfos; import org.gridsuite.modification.dto.LineSplitWithVoltageLevelInfos; import org.gridsuite.modification.dto.ModificationInfos; @@ -23,8 +22,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.BUSBAR_SECTION_NOT_FOUND; -import static org.gridsuite.modification.NetworkModificationException.Type.LINE_ALREADY_EXISTS; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -110,7 +107,7 @@ void testCreateWithExistingLines() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(tryWithNewLine1IdJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "line1").getMessage(), + assertLogMessage("Line already exists: line1", ERROR_MESSAGE_KEY, reportService); // same test with "newLine2Id" @@ -120,7 +117,7 @@ void testCreateWithExistingLines() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(tryWithNewLine2IdJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "line1").getMessage(), + assertLogMessage("Line already exists: line1", ERROR_MESSAGE_KEY, reportService); } @@ -133,7 +130,7 @@ void testCreateWithWrongBusBar() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(tryWithBadIdJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "999A").getMessage(), + assertLogMessage("Busbar section 999A does not exist in network", ERROR_MESSAGE_KEY, reportService); // try with a switch, not a busbar @@ -143,7 +140,7 @@ void testCreateWithWrongBusBar() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(tryWithSwitchIdJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "v1d1").getMessage(), + assertLogMessage("Busbar section v1d1 does not exist in network", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LinesAttachToSplitLinesTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LinesAttachToSplitLinesTest.java index 8add2a65b..4c4629260 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LinesAttachToSplitLinesTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LinesAttachToSplitLinesTest.java @@ -8,7 +8,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.Network; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.LinesAttachToSplitLinesInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.utils.NetworkWithTeePoint; @@ -19,8 +18,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.LINE_ALREADY_EXISTS; -import static org.gridsuite.modification.NetworkModificationException.Type.LINE_NOT_FOUND; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -103,7 +100,7 @@ void testCreateWithErrors() throws Exception { String lineAttachToAbsentLineJson = getJsonBody(linesAttachToSplitLinesInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(lineAttachToAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(LINE_NOT_FOUND, "absent_line_id").getMessage(), + assertLogMessage("Line not found: absent_line_id", ERROR_MESSAGE_KEY, reportService); // try to create an already existing line linesAttachToSplitLinesInfos = (LinesAttachToSplitLinesInfos) buildModification(); @@ -111,7 +108,7 @@ void testCreateWithErrors() throws Exception { lineAttachToAbsentLineJson = getJsonBody(linesAttachToSplitLinesInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(lineAttachToAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "l1").getMessage(), + assertLogMessage("Line already exists: l1", ERROR_MESSAGE_KEY, reportService); // same test on 'replacingLine2Id' linesAttachToSplitLinesInfos = (LinesAttachToSplitLinesInfos) buildModification(); @@ -119,7 +116,7 @@ void testCreateWithErrors() throws Exception { lineAttachToAbsentLineJson = getJsonBody(linesAttachToSplitLinesInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(lineAttachToAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "l1").getMessage(), + assertLogMessage("Line already exists: l1", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInNodeBreakerTest.java index b177acd50..a20a27514 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInNodeBreakerTest.java @@ -10,7 +10,6 @@ import com.powsybl.iidm.network.LoadType; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.FreePropertyInfos; import org.gridsuite.modification.dto.LoadCreationInfos; import org.gridsuite.modification.dto.ModificationInfos; @@ -26,8 +25,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.BUSBAR_SECTION_NOT_FOUND; -import static org.gridsuite.modification.NetworkModificationException.Type.VOLTAGE_LEVEL_NOT_FOUND; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -68,7 +65,7 @@ void testCreateWithErrors() throws Exception { loadCreationInfosJson = getJsonBody(loadCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(loadCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, "notFoundVoltageLevelId").getMessage(), + assertLogMessage("Voltage level notFoundVoltageLevelId does not exist in network", ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 3); @@ -78,7 +75,7 @@ void testCreateWithErrors() throws Exception { loadCreationInfosJson = getJsonBody(loadCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(loadCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "notFoundBusbarSection").getMessage(), + assertLogMessage("Busbar section notFoundBusbarSection does not exist in network", ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 4); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LoadScalingTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LoadScalingTest.java index c9b1b362d..423cfa241 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LoadScalingTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LoadScalingTest.java @@ -229,7 +229,7 @@ void testFilterWithWrongIds() throws Exception { .content(body) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(loadScalingInfo.getErrorType().name() + ": There is no valid equipment ID among the provided filter(s)", + assertLogMessage("There is no valid equipment ID among the provided filter(s)", "network.modification.invalidFilters", reportService); wireMockUtils.verifyGetRequest(stubWithWrongId, PATH, handleQueryParams(FILTER_WRONG_ID_1), false); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/ModificationUtilsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/ModificationUtilsTest.java index 9e2fb2722..69e4dd6ef 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/ModificationUtilsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/ModificationUtilsTest.java @@ -7,7 +7,6 @@ package org.gridsuite.modification.server.modifications; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.ReactiveCapabilityCurvePointsInfos; import org.gridsuite.modification.utils.ModificationUtils; import org.junit.jupiter.api.Test; @@ -16,7 +15,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchRuntimeException; -import static org.gridsuite.modification.NetworkModificationException.Type.MODIFY_GENERATOR_ERROR; /** * @author David SARTORI @@ -29,48 +27,39 @@ void testCheckMaxQGreaterThanMinQ() { var point1 = ReactiveCapabilityCurvePointsInfos.builder().minQ(10.0).maxQ(20.0).build(); ModificationUtils.getInstance().checkMaxQGreaterThanMinQ( Collections.singletonList(point1), - MODIFY_GENERATOR_ERROR, "old KO, new OK: No exception should be thrown"); var point2 = ReactiveCapabilityCurvePointsInfos.builder().minQ(20.0).maxQ(10.0).build(); - var exception = (NetworkModificationException) catchRuntimeException(() -> ModificationUtils.getInstance().checkMaxQGreaterThanMinQ( + var exception = catchRuntimeException(() -> ModificationUtils.getInstance().checkMaxQGreaterThanMinQ( Collections.singletonList(point2), - MODIFY_GENERATOR_ERROR, "old OK, new KO: ") ); - assertThat(exception.getType()).isEqualTo(MODIFY_GENERATOR_ERROR); assertThat(exception) .hasMessageEndingWith("old OK, new KO: maximum reactive power 10.0 is expected to be greater than or equal to minimum reactive power 20.0"); var point3 = ReactiveCapabilityCurvePointsInfos.builder().minQ(20.0).maxQ(10.0).build(); - exception = (NetworkModificationException) catchRuntimeException(() -> ModificationUtils.getInstance().checkMaxQGreaterThanMinQ( + exception = catchRuntimeException(() -> ModificationUtils.getInstance().checkMaxQGreaterThanMinQ( Collections.singletonList(point3), - MODIFY_GENERATOR_ERROR, "old null, new KO: ") ); - assertThat(exception.getType()).isEqualTo(MODIFY_GENERATOR_ERROR); assertThat(exception) .hasMessageEndingWith("old null, new KO: maximum reactive power 10.0 is expected to be greater than or equal to minimum reactive power 20.0"); var point4 = ReactiveCapabilityCurvePointsInfos.builder().minQ(10.0).maxQ(20.0).build(); ModificationUtils.getInstance().checkMaxQGreaterThanMinQ( Collections.singletonList(point4), - MODIFY_GENERATOR_ERROR, "old null, new OK: No exception should be thrown"); var point5 = ReactiveCapabilityCurvePointsInfos.builder().minQ(10.0).maxQ(20.0).build(); ModificationUtils.getInstance().checkMaxQGreaterThanMinQ( Collections.singletonList(point5), - MODIFY_GENERATOR_ERROR, "old OK, new null: No exception should be thrown"); var point6 = ReactiveCapabilityCurvePointsInfos.builder().minQ(20.0).maxQ(10.0).build(); - exception = (NetworkModificationException) catchRuntimeException(() -> ModificationUtils.getInstance().checkMaxQGreaterThanMinQ( + exception = catchRuntimeException(() -> ModificationUtils.getInstance().checkMaxQGreaterThanMinQ( Collections.singletonList(point6), - MODIFY_GENERATOR_ERROR, "old KO, new null: ") ); - assertThat(exception.getType()).isEqualTo(MODIFY_GENERATOR_ERROR); assertThat(exception) .hasMessageEndingWith("old KO, new null: maximum reactive power 10.0 is expected to be greater than or equal to minimum reactive power 20.0"); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/MoveVoltageLevelFeederBaysTest.java b/src/test/java/org/gridsuite/modification/server/modifications/MoveVoltageLevelFeederBaysTest.java index a5f7f9671..6f2b49058 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/MoveVoltageLevelFeederBaysTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/MoveVoltageLevelFeederBaysTest.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.MoveFeederBayInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.dto.MoveVoltageLevelFeederBaysInfos; @@ -182,8 +181,8 @@ void testGetTerminal() { .build(); MoveVoltageLevelFeederBays moveVoltageLevelFeederBays = (MoveVoltageLevelFeederBays) moveVoltageLevelFeederBaysInfos.toModification(); assertEquals("MOVE_VOLTAGE_LEVEL_FEEDER_BAYS", moveVoltageLevelFeederBays.getName()); - String message = assertThrows(NetworkModificationException.class, () -> moveVoltageLevelFeederBays.getTerminal(network, connectablePositionModification)).getMessage(); - assertEquals("MOVE_VOLTAGE_LEVEL_FEEDER_BAYS_ERROR : MoveVoltageLevelFeederBays is not implemented for class com.powsybl.network.store.iidm.impl.ThreeWindingsTransformerImpl", message); + String message = assertThrows(RuntimeException.class, () -> moveVoltageLevelFeederBays.getTerminal(network, connectablePositionModification)).getMessage(); + assertEquals("MoveVoltageLevelFeederBays is not implemented for class com.powsybl.network.store.iidm.impl.ThreeWindingsTransformerImpl", message); // busbar not found on a branch MoveFeederBayInfos connectablePositionModification2 = MoveFeederBayInfos.builder() .equipmentId("line1") @@ -193,8 +192,8 @@ void testGetTerminal() { .connectionPosition(4) .connectionDirection(ConnectablePosition.Direction.TOP) .build(); - message = assertThrows(NetworkModificationException.class, () -> moveVoltageLevelFeederBays.getTerminal(network, connectablePositionModification2)).getMessage(); - assertEquals("MOVE_VOLTAGE_LEVEL_FEEDER_BAYS_ERROR : Invalid connection side: THREE for branch line1", message); + message = assertThrows(RuntimeException.class, () -> moveVoltageLevelFeederBays.getTerminal(network, connectablePositionModification2)).getMessage(); + assertEquals("Invalid connection side: THREE for branch line1", message); // injection with no error MoveFeederBayInfos connectablePositionModification3 = MoveFeederBayInfos.builder() .equipmentId("v3Battery") diff --git a/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationEnergiseSideOneLineTest.java b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationEnergiseSideOneLineTest.java index 71389c165..6beb7a19f 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationEnergiseSideOneLineTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationEnergiseSideOneLineTest.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.Line; import com.powsybl.iidm.network.Network; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.dto.OperatingStatusModificationInfos; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -20,7 +19,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.OPERATING_STATUS_MODIFICATION_ERROR; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -98,7 +96,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(OPERATING_STATUS_MODIFICATION_ERROR, "Unable to energise equipment end").getMessage(), + assertLogMessage("Unable to energise equipment end", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationEnergiseSideTwoLineTest.java b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationEnergiseSideTwoLineTest.java index 20ca92b44..010c1f911 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationEnergiseSideTwoLineTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationEnergiseSideTwoLineTest.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.Line; import com.powsybl.iidm.network.Network; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.dto.OperatingStatusModificationInfos; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -20,7 +19,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.OPERATING_STATUS_MODIFICATION_ERROR; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -97,7 +95,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(OPERATING_STATUS_MODIFICATION_ERROR, "Unable to energise equipment end").getMessage(), + assertLogMessage("Unable to energise equipment end", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationLockoutLineTest.java b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationLockoutLineTest.java index 5cf00ff40..dc9e78039 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationLockoutLineTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationLockoutLineTest.java @@ -13,7 +13,6 @@ import com.powsybl.iidm.network.extensions.OperatingStatus; import com.powsybl.network.store.iidm.impl.NetworkFactoryImpl; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.dto.OperatingStatusModificationInfos; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -28,7 +27,6 @@ import static com.powsybl.iidm.network.extensions.OperatingStatus.Status.FORCED_OUTAGE; import static com.powsybl.iidm.network.extensions.OperatingStatus.Status.PLANNED_OUTAGE; -import static org.gridsuite.modification.NetworkModificationException.Type.*; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.NetworkUtil.createSwitch; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; @@ -169,7 +167,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); assertNull(getNetwork().getLine("notFound")); - assertLogMessage(new NetworkModificationException(EQUIPMENT_NOT_FOUND, "notFound").getMessage(), + assertLogMessage("Equipment not found: notFound", ERROR_MESSAGE_KEY, reportService); // modification action empty @@ -179,7 +177,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) .andExpectAll( status().isBadRequest(), - content().string(new NetworkModificationException(OPERATING_ACTION_TYPE_EMPTY).getMessage()) + content().string("OPERATING_ACTION_TYPE_EMPTY") ); // modification action not existing // note: should never happen in real diff --git a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorCreationInBusBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorCreationInBusBreakerTest.java index b8f192b3a..587716dd9 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorCreationInBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorCreationInBusBreakerTest.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.FreePropertyInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.dto.ShuntCompensatorCreationInfos; @@ -24,7 +23,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.BUS_NOT_FOUND; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -44,7 +42,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(shuntJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(BUS_NOT_FOUND, "notFoundBus").getMessage(), + assertLogMessage("Bus notFoundBus does not exist in network", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorCreationInNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorCreationInNodeBreakerTest.java index 437e92e0b..fe92d7c40 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorCreationInNodeBreakerTest.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.FreePropertyInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.dto.ShuntCompensatorCreationInfos; @@ -25,7 +24,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.*; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.gridsuite.modification.server.utils.assertions.Assertions.assertThat; @@ -99,7 +97,7 @@ void testCreateWithError() throws Exception { String modificationToCreateJson = getJsonBody(modificationToCreate, null); mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(SHUNT_COMPENSATOR_ALREADY_EXISTS, "v5shunt").getMessage(), + assertLogMessage("Shunt compensator already exists: v5shunt", ERROR_MESSAGE_KEY, reportService); } @@ -111,7 +109,7 @@ void testCreateWithMaximumSectionCountError() throws Exception { String modificationToCreateJson = getJsonBody(modificationToCreate, null); mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_SHUNT_COMPENSATOR_ERROR, "Maximum section count should be greater or equal to 1").getMessage(), + assertLogMessage("Maximum section count should be greater or equal to 1", ERROR_MESSAGE_KEY, reportService); } @@ -124,7 +122,7 @@ void testCreateWithSectionError() throws Exception { String modificationToCreateJson = getJsonBody(modificationToCreate, null); mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_SHUNT_COMPENSATOR_ERROR, "Section count should be between 0 and Maximum section count (2), actual : 3").getMessage(), + assertLogMessage("Section count should be between 0 and Maximum section count (2), actual : 3", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorModificationTest.java index 7143d97e1..3231e65f1 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorModificationTest.java @@ -11,7 +11,6 @@ import com.powsybl.iidm.network.ShuntCompensatorLinearModel; import com.powsybl.iidm.network.VoltageLevel; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Test; @@ -22,8 +21,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.MODIFY_SHUNT_COMPENSATOR_ERROR; -import static org.gridsuite.modification.NetworkModificationException.Type.SHUNT_COMPENSATOR_NOT_FOUND; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.NetworkUtil.createShuntCompensator; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; @@ -56,8 +53,7 @@ void testEquipmentWithWrongId() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(SHUNT_COMPENSATOR_NOT_FOUND, - "Shunt compensator wrong id does not exist in network").getMessage(), + assertLogMessage("Shunt compensator wrong id does not exist in network", ERROR_MESSAGE_KEY, reportService); } @@ -74,8 +70,7 @@ void testWrongMaximumSectionCount() throws Exception { .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, - String.format("Maximum section count should be greater or equal to 1")).getMessage(), + assertLogMessage("Unable to modify shunt compensator: Maximum section count should be greater or equal to 1", ERROR_MESSAGE_KEY, reportService); } @@ -92,8 +87,7 @@ void testWrongSectionCount() throws Exception { .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, - String.format("Section count should be between 0 and Maximum section count (1), actual : 3")).getMessage(), + assertLogMessage("Unable to modify shunt compensator: Section count should be between 0 and Maximum section count (1), actual : 3", ERROR_MESSAGE_KEY, reportService); } @@ -116,8 +110,7 @@ void testWrongSectionCountChangeSectionCount() throws Exception { .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, - String.format("Section count should be between 0 and Maximum section count (1), actual : 3")).getMessage(), + assertLogMessage("Unable to modify shunt compensator: Section count should be between 0 and Maximum section count (1), actual : 3", ERROR_MESSAGE_KEY, reportService); } @@ -140,8 +133,7 @@ void testWrongSectionCountChangeMaximumSectionCount() throws Exception { .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, - "Section count should be between 0 and Maximum section count (1), actual : -1").getMessage(), + assertLogMessage("Unable to modify shunt compensator: Section count should be between 0 and Maximum section count (1), actual : -1", ERROR_MESSAGE_KEY, reportService); } @@ -158,8 +150,7 @@ void testNegativeQmaxAtNominalV() throws Exception { .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, - "Qmax at nominal voltage should be greater or equal to 0").getMessage(), + assertLogMessage("Unable to modify shunt compensator: Qmax at nominal voltage should be greater or equal to 0", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInBusBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInBusBreakerTest.java index cf0d21e85..30777352e 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInBusBreakerTest.java @@ -10,7 +10,6 @@ import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.StaticVarCompensator; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.FreePropertyInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.dto.StaticVarCompensatorCreationInfos; @@ -24,8 +23,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.BUS_NOT_FOUND; -import static org.gridsuite.modification.NetworkModificationException.Type.EQUIPMENT_NOT_FOUND; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -113,7 +110,7 @@ void testCreateWithBusBarSectionErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(BUS_NOT_FOUND, "notFoundBus").getMessage(), + assertLogMessage("Bus notFoundBus does not exist in network", ERROR_MESSAGE_KEY, reportService); } @@ -128,7 +125,7 @@ void testCreateWithRegulatedTerminalError() throws Exception { String staticVarCompensatorInfosJson = getJsonBody(staticVarCompensatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(staticVarCompensatorInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(EQUIPMENT_NOT_FOUND, "Equipment with id=test not found with type STATIC_VAR_COMPENSATOR").getMessage(), + assertLogMessage("Equipment with id=test not found with type STATIC_VAR_COMPENSATOR", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInNodeBreakerTest.java index 2d3de2f87..4f1b1866d 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInNodeBreakerTest.java @@ -10,7 +10,6 @@ import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.StaticVarCompensator; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.dto.NetworkModificationsResult; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -25,7 +24,6 @@ import java.util.UUID; import static com.powsybl.iidm.network.StaticVarCompensator.RegulationMode.VOLTAGE; -import static org.gridsuite.modification.NetworkModificationException.Type.*; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -126,7 +124,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(STATIC_VAR_COMPENSATOR_ALREADY_EXISTS, "v5Compensator").getMessage(), + assertLogMessage("static var compensator already exists: v5Compensator", ERROR_MESSAGE_KEY, reportService); // not found voltage level @@ -135,7 +133,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, "notFoundVoltageLevelId").getMessage(), + assertLogMessage("Voltage level notFoundVoltageLevelId does not exist in network", ERROR_MESSAGE_KEY, reportService); // not found busbar section @@ -144,7 +142,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "notFoundBusbarSection").getMessage(), + assertLogMessage("Busbar section notFoundBusbarSection does not exist in network", ERROR_MESSAGE_KEY, reportService); // invalid min susceptance @@ -156,7 +154,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : StaticVarCompensator 'idStaticVarCompensator2' : minimum susceptance is not set", + assertLogMessage("StaticVarCompensator 'idStaticVarCompensator2' : minimum susceptance is not set", ERROR_MESSAGE_KEY, reportService); compensatorCreationInfos.setMinSusceptance(200.0); compensatorCreationInfos.setMaxSusceptance(null); @@ -165,8 +163,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + - "StaticVarCompensator 'idStaticVarCompensator2' : maximum susceptance is not set", + assertLogMessage("StaticVarCompensator 'idStaticVarCompensator2' : maximum susceptance is not set", ERROR_MESSAGE_KEY, reportService); compensatorCreationInfos.setMaxSusceptance(100.0); @@ -176,8 +173,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + - "StaticVarCompensator 'idStaticVarCompensator2' : maximum susceptance is expected to be greater than or equal to minimum susceptance", + assertLogMessage("StaticVarCompensator 'idStaticVarCompensator2' : maximum susceptance is expected to be greater than or equal to minimum susceptance", ERROR_MESSAGE_KEY, reportService); compensatorCreationInfos.setMaxSusceptance(null); compensatorCreationInfos.setMinSusceptance(null); @@ -186,8 +182,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + - "StaticVarCompensator 'idStaticVarCompensator2' : maximum Q at nominal voltage is expected to be greater than or equal to minimum Q", + assertLogMessage("StaticVarCompensator 'idStaticVarCompensator2' : maximum Q at nominal voltage is expected to be greater than or equal to minimum Q", ERROR_MESSAGE_KEY, reportService); compensatorCreationInfos.setMaxQAtNominalV(200.0); compensatorCreationInfos.setMinQAtNominalV(100.0); @@ -196,8 +191,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + - "StaticVarCompensator 'idStaticVarCompensator2' : Reactive power setpoint is not set", + assertLogMessage("StaticVarCompensator 'idStaticVarCompensator2' : Reactive power setpoint is not set", ERROR_MESSAGE_KEY, reportService); compensatorCreationInfos.setRegulationMode(StaticVarCompensator.RegulationMode.VOLTAGE); @@ -205,8 +199,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + - "StaticVarCompensator 'idStaticVarCompensator2' : Voltage setpoint is not set", + assertLogMessage("StaticVarCompensator 'idStaticVarCompensator2' : Voltage setpoint is not set", ERROR_MESSAGE_KEY, reportService); compensatorCreationInfos.setEquipmentId("idStaticVarCompensator3"); compensatorCreationInfos.setEquipmentName("nameStaticVarCompensator3"); @@ -279,8 +272,7 @@ void testCreateWithStandbyAutomatonErrors() throws Exception { compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + - "StaticVarCompensator 'idStaticVarCompensator2' : q0 must be within the range of minimum Q and maximum Q", + assertLogMessage("StaticVarCompensator 'idStaticVarCompensator2' : q0 must be within the range of minimum Q and maximum Q", ERROR_MESSAGE_KEY, reportService); compensatorCreationInfos.setMinQAtNominalV(null); compensatorCreationInfos.setMaxQAtNominalV(null); @@ -291,8 +283,7 @@ void testCreateWithStandbyAutomatonErrors() throws Exception { compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + - "StaticVarCompensator 'idStaticVarCompensator2' : b0 must be within the range of minimum susceptance and maximum susceptance", + assertLogMessage("StaticVarCompensator 'idStaticVarCompensator2' : b0 must be within the range of minimum susceptance and maximum susceptance", ERROR_MESSAGE_KEY, reportService); compensatorCreationInfos.setRegulating(false); compensatorCreationInfos.setB0(250.0); @@ -302,8 +293,7 @@ void testCreateWithStandbyAutomatonErrors() throws Exception { compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + - "StaticVarCompensator 'idStaticVarCompensator2' : Standby is only supported in Voltage Regulation mode", + assertLogMessage("StaticVarCompensator 'idStaticVarCompensator2' : Standby is only supported in Voltage Regulation mode", ERROR_MESSAGE_KEY, reportService); compensatorCreationInfos.setRegulationMode(VOLTAGE); compensatorCreationInfos.setB0(null); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/SubstationModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/SubstationModificationTest.java index 6f35b171c..3eebbfa81 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/SubstationModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/SubstationModificationTest.java @@ -99,7 +99,7 @@ void testCreateWithErrors() throws Exception { String infosJson = getJsonBody(infos, null); mockMvc.perform(post(getNetworkModificationUri()).content(infosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage("SUBSTATION_NOT_FOUND : Substation unknown does not exist in network", ERROR_MESSAGE_KEY, reportService); + assertLogMessage("Substation unknown does not exist in network", ERROR_MESSAGE_KEY, reportService); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java index a71225796..0c7baa5c1 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java @@ -10,7 +10,6 @@ import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.PhaseTapChanger; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; @@ -25,7 +24,6 @@ import java.util.Set; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.BUS_NOT_FOUND; import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.*; import static org.gridsuite.modification.server.impacts.TestImpactUtils.testBranchCreationImpacts; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; @@ -295,7 +293,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(BUS_NOT_FOUND, "notFoundBus").getMessage(), + assertLogMessage("Bus notFoundBus does not exist in network", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationMixedBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationMixedBreakerTest.java index 2865af5f1..95368b20e 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationMixedBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationMixedBreakerTest.java @@ -10,7 +10,6 @@ import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.PhaseTapChanger; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; @@ -304,7 +303,7 @@ void testCreateWithErrors() throws Exception { twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(NetworkModificationException.Type.BUSBAR_SECTION_NOT_FOUND, "notFoundBus").getMessage(), + assertLogMessage("Busbar section notFoundBus does not exist in network", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java index 2cf0ad991..adcdac7cb 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java @@ -12,7 +12,6 @@ import com.powsybl.iidm.network.PhaseTapChanger; import com.powsybl.iidm.network.TwoWindingsTransformer; import com.powsybl.iidm.network.extensions.ConnectablePosition; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.dto.NetworkModificationsResult; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -27,7 +26,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.TWO_WINDINGS_TRANSFORMER_ALREADY_EXISTS; import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.*; import static org.gridsuite.modification.server.impacts.TestImpactUtils.testBranchCreationImpacts; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; @@ -534,7 +532,7 @@ void testCreateWithErrors() throws Exception { twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(NetworkModificationException.Type.BUSBAR_SECTION_NOT_FOUND, "notFoundBus").getMessage(), + assertLogMessage("Busbar section notFoundBus does not exist in network", ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 2); @@ -560,7 +558,7 @@ void testCreateWithErrors() throws Exception { twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(TWO_WINDINGS_TRANSFORMER_ALREADY_EXISTS, "trf1").getMessage(), + assertLogMessage("Two winding transformer already exists: trf1", ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 4); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java index c74701b65..1d83e6f57 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java @@ -11,7 +11,6 @@ import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.extensions.ConnectablePosition; import com.powsybl.iidm.network.extensions.TwoWindingsTransformerToBeEstimated; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.dto.NetworkModificationResult; import org.gridsuite.modification.server.dto.NetworkModificationsResult; @@ -24,8 +23,6 @@ import java.util.*; -import static org.gridsuite.modification.NetworkModificationException.Type.MODIFY_TWO_WINDINGS_TRANSFORMER_ERROR; -import static org.gridsuite.modification.NetworkModificationException.Type.TWO_WINDINGS_TRANSFORMER_NOT_FOUND; import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.SIDE1; import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.SIDE2; import static org.gridsuite.modification.modifications.TwoWindingsTransformerModification.processPhaseTapRegulation; @@ -318,7 +315,7 @@ void testCreateWithErrors() throws Exception { .content(modificationInfosJson) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(TWO_WINDINGS_TRANSFORMER_NOT_FOUND, "Two windings transformer '2wt_not_existing' : it does not exist in the network").getMessage(), + assertLogMessage("Two windings transformer '2wt_not_existing' : does not exist in the network", ERROR_MESSAGE_KEY, reportService); } @@ -716,7 +713,7 @@ void testPhaseTapChangerRegulationModification2() throws Exception { // modification 1 assert runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToModifyJson1).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertLogMessage(new NetworkModificationException(MODIFY_TWO_WINDINGS_TRANSFORMER_ERROR, "Regulation value is missing when modifying, phase tap changer can not regulate").getMessage(), + assertLogMessage("Two winding transformer modification error: Regulation value is missing when modifying, phase tap changer can not regulate", ERROR_MESSAGE_KEY, reportService); } @@ -766,7 +763,7 @@ private void changeConnectionState(TwoWindingsTransformer existingEquipment, Two // change not applied assertThat(terminal.isConnected()).isNotEqualTo(expectedState); assertEquals(NetworkModificationResult.ApplicationStatus.WITH_ERRORS, extractApplicationStatus(networkModificationsResult).getFirst()); - assertLogMessage("BRANCH_MODIFICATION_ERROR : " + errorMessage, ERROR_MESSAGE_KEY, reportService); + assertLogMessage(errorMessage, ERROR_MESSAGE_KEY, reportService); } else { // connection state has changed as expected assertThat(terminal.isConnected()).isEqualTo(expectedState); @@ -832,14 +829,14 @@ void testProcessPhaseTapChangerCreation() { preparePhaseTapChangerAdder(adder); AttributeModification regulationValueModification = new AttributeModification<>(10.0, OperationType.SET); AttributeModification regulatingModification = new AttributeModification<>(true, OperationType.SET); - String message = assertThrows(NetworkModificationException.class, () -> processPhaseTapRegulation(null, adder, false, + String message = assertThrows(RuntimeException.class, () -> processPhaseTapRegulation(null, adder, false, null, regulationValueModification, null, regulatingModification, regulationReports)).getMessage(); - assertEquals("CREATE_TWO_WINDINGS_TRANSFORMER_ERROR : Regulation mode is missing when creating tap phase changer with regulation enabled", message); + assertEquals("Two winding transformer creation error: Regulation mode is missing when creating tap phase changer with regulation enabled", message); AttributeModification regulationModeModification = new AttributeModification<>(PhaseTapChanger.RegulationMode.CURRENT_LIMITER, OperationType.SET); - String message2 = assertThrows(NetworkModificationException.class, () -> processPhaseTapRegulation(null, adder, false, + String message2 = assertThrows(RuntimeException.class, () -> processPhaseTapRegulation(null, adder, false, regulationModeModification, null, null, regulatingModification, regulationReports)).getMessage(); - assertEquals("CREATE_TWO_WINDINGS_TRANSFORMER_ERROR : Regulation value is missing when creating tap phase changer with regulation enabled", message2); + assertEquals("Two winding transformer creation error: Regulation value is missing when creating tap phase changer with regulation enabled", message2); processPhaseTapRegulation(null, adder, false, new AttributeModification<>(PhaseTapChanger.RegulationMode.CURRENT_LIMITER, OperationType.SET), null, null, null, regulationReports); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelCreationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelCreationTest.java index 7fe831cd4..c44c49626 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelCreationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelCreationTest.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.SwitchKind; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.CouplingDeviceInfos; import org.gridsuite.modification.dto.FreePropertyInfos; import org.gridsuite.modification.dto.ModificationInfos; @@ -26,7 +25,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.*; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -105,7 +103,7 @@ void testCreateWithErrors() throws Exception { String vliJson = getJsonBody(vli, null); mockMvc.perform(post(getNetworkModificationUri()).content(vliJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(SUBSTATION_NOT_FOUND, "absent_station").getMessage(), + assertLogMessage("Substation absent_station does not exist in network", ERROR_MESSAGE_KEY, reportService); vli = (VoltageLevelCreationInfos) buildModification(); @@ -115,7 +113,7 @@ void testCreateWithErrors() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_VOLTAGE_LEVEL_ERROR, "Coupling between same bus bar section is not allowed").getMessage(), + assertLogMessage("Coupling between same bus bar section is not allowed", ERROR_MESSAGE_KEY, reportService); vli = (VoltageLevelCreationInfos) buildModification(); @@ -124,7 +122,7 @@ void testCreateWithErrors() throws Exception { vliJsonObject = getJsonBody(vli, null); mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_VOLTAGE_LEVEL_ERROR, "IpMax is required").getMessage(), + assertLogMessage("IpMax is required", ERROR_MESSAGE_KEY, reportService); vli = (VoltageLevelCreationInfos) buildModificationUpdate(); @@ -141,7 +139,7 @@ void testCreateWithErrors() throws Exception { vliJsonObject = getJsonBody(vli, null); mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_ALREADY_EXISTS, "v1").getMessage(), + assertLogMessage("Voltage level v1 already exists", ERROR_MESSAGE_KEY, reportService); } @@ -206,22 +204,22 @@ private void testIccWithError(Double ipMin, Double ipMax, String reportError) th .andExpect(status().isOk()); // VL could not have been created assertNull(getNetwork().getVoltageLevel("vl_ko")); - assertLogMessage(new NetworkModificationException(CREATE_VOLTAGE_LEVEL_ERROR, reportError).getMessage(), ERROR_MESSAGE_KEY, reportService); + assertLogMessage(reportError, ERROR_MESSAGE_KEY, reportService); } @Test void testIpMinGreaterThanIpMax() throws Exception { - testIccWithError(15.1, 15.0, "IpMin cannot be greater than IpMax"); + testIccWithError(15.1, 15.0, "Voltage level creation error: IpMin cannot be greater than IpMax"); } @Test void testIpMinNegative() throws Exception { - testIccWithError(-25.0, 15.0, "IpMin must be positive"); + testIccWithError(-25.0, 15.0, "Voltage level creation error: IpMin must be positive"); } @Test void testIpMaxNegative() throws Exception { - testIccWithError(25.0, -15.0, "IpMax must be positive"); + testIccWithError(25.0, -15.0, "Voltage level creation error: IpMax must be positive"); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelModificationTest.java index 85f0f5653..ad6b197ec 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelModificationTest.java @@ -11,7 +11,6 @@ import com.powsybl.iidm.network.VoltageLevel; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuitAdder; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; @@ -23,7 +22,6 @@ import java.util.Map; import java.util.UUID; -import static org.gridsuite.modification.NetworkModificationException.Type.MODIFY_VOLTAGE_LEVEL_ERROR; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -153,37 +151,37 @@ private void testIpMinIpMaxNotChanged(Double ipMin, Double ipMax, String reportE assertNotNull(identifiableShortCircuit1); assertEquals(beforeUpdateIpMin, identifiableShortCircuit1.getIpMin(), 0); assertEquals(beforeUpdateIpMax, identifiableShortCircuit1.getIpMax(), 0); - assertLogMessage(new NetworkModificationException(MODIFY_VOLTAGE_LEVEL_ERROR, reportError).getMessage(), ERROR_MESSAGE_KEY, reportService); + assertLogMessage(reportError, ERROR_MESSAGE_KEY, reportService); } @Test void testIpMinGreaterThanIpMax() throws Exception { // check only modification inputs - testIpMinIpMaxNotChanged(30.0, 29.0, "IpMin cannot be greater than IpMax"); + testIpMinIpMaxNotChanged(30.0, 29.0, "Voltage level modification error: IpMin cannot be greater than IpMax"); } @Test void testIpMinNegative() throws Exception { // check only modification inputs - testIpMinIpMaxNotChanged(-30.0, 0.0, "IpMin must be positive"); + testIpMinIpMaxNotChanged(-30.0, 0.0, "Voltage level modification error: IpMin must be positive"); } @Test void testIpMaxNegative() throws Exception { // check only modification inputs - testIpMinIpMaxNotChanged(0.0, -12.0, "IpMax must be positive"); + testIpMinIpMaxNotChanged(0.0, -12.0, "Voltage level modification error: IpMax must be positive"); } @Test void testIpMinGreaterThanEquipmentIpMax() throws Exception { // check ipMin modification input against equipement ipMax real value (25.0) - testIpMinIpMaxNotChanged(30.0, null, "IpMin cannot be greater than IpMax"); + testIpMinIpMaxNotChanged(30.0, null, "Voltage level modification error: IpMin cannot be greater than IpMax"); } @Test void testEquipmentIpMinGreaterThanIpMax() throws Exception { // check ipMax modification input against equipement ipMin real value (15.0) - testIpMinIpMaxNotChanged(null, 14.9, "IpMin cannot be greater than IpMax"); + testIpMinIpMaxNotChanged(null, 14.9, "Voltage level modification error: IpMin cannot be greater than IpMax"); } @Test @@ -218,7 +216,7 @@ void testSetIpMinOnEquipmentWithoutExtension() throws Exception { VoltageLevel voltageLevelUpdated = getNetwork().getVoltageLevel(vlWithNoIcc); assertNotNull(voltageLevelUpdated); assertNull(voltageLevelUpdated.getExtension(IdentifiableShortCircuit.class)); - assertLogMessage(new NetworkModificationException(MODIFY_VOLTAGE_LEVEL_ERROR, "IpMax is required").getMessage(), ERROR_MESSAGE_KEY, reportService); + assertLogMessage("Voltage level modification error: IpMax is required", ERROR_MESSAGE_KEY, reportService); } @Test diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VscCreationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VscCreationTest.java index d58048b0d..4f3a5418d 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VscCreationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VscCreationTest.java @@ -11,7 +11,6 @@ import com.powsybl.iidm.network.extensions.ConnectablePosition; import com.powsybl.iidm.network.extensions.HvdcAngleDroopActivePowerControl; import com.powsybl.iidm.network.extensions.HvdcOperatorActivePowerRange; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Test; @@ -23,7 +22,6 @@ import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; -import static org.gridsuite.modification.NetworkModificationException.Type.*; import static org.gridsuite.modification.modifications.VscModification.ACTIVE_POWER_CONTROL_DROOP_P0_REQUIRED_ERROR_MSG; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; @@ -231,7 +229,7 @@ void testCreateWithErrors() throws Exception { vscCreationInfosJson = getJsonBody(vscCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, "notFoundVoltageLevelId").getMessage(), + assertLogMessage("Voltage level notFoundVoltageLevelId does not exist in network", ERROR_MESSAGE_KEY, reportService); // invalid min max reactive limit @@ -245,7 +243,7 @@ void testCreateWithErrors() throws Exception { vscCreationInfosJson = getJsonBody(vscCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_VSC_ERROR, "Vsc 'vsc1' : minimum reactive power is not set").getMessage(), + assertLogMessage("Vsc 'vsc1' : minimum reactive power is not set", ERROR_MESSAGE_KEY, reportService); vscCreationInfos = (VscCreationInfos) buildModification(); @@ -258,7 +256,7 @@ void testCreateWithErrors() throws Exception { vscCreationInfosJson = getJsonBody(vscCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_VSC_ERROR, "Vsc 'vsc1' : maximum reactive power is not set").getMessage(), + assertLogMessage("Vsc 'vsc1' : maximum reactive power is not set", ERROR_MESSAGE_KEY, reportService); vscCreationInfos = (VscCreationInfos) buildModification(); @@ -272,7 +270,7 @@ void testCreateWithErrors() throws Exception { vscCreationInfosJson = getJsonBody(vscCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_VSC_ERROR, "Vsc 'vsc1' : maximum reactive power is expected to be greater than or equal to minimum reactive power").getMessage(), + assertLogMessage("Vsc 'vsc1' : maximum reactive power is expected to be greater than or equal to minimum reactive power", ERROR_MESSAGE_KEY, reportService); // invalid reactive capability curve limit @@ -285,7 +283,7 @@ void testCreateWithErrors() throws Exception { vscCreationInfosJson = getJsonBody(vscCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(CREATE_VSC_ERROR, "Vsc 'vsc1' : P is not set in a reactive capability curve limits point").getMessage(), + assertLogMessage("Vsc 'vsc1' : P is not set in a reactive capability curve limits point", ERROR_MESSAGE_KEY, reportService); // try to create an existing vsc @@ -294,7 +292,7 @@ void testCreateWithErrors() throws Exception { vscCreationInfosJson = getJsonBody(vscCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(HVDC_LINE_ALREADY_EXISTS, "hvdcLine").getMessage(), + assertLogMessage("HVDC line already exists: hvdcLine", ERROR_MESSAGE_KEY, reportService); } @@ -372,8 +370,7 @@ private void checkDroopWithAbsentInfos(VscCreationInfos vscCreationInfos) throws .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); - assertLogMessage(new NetworkModificationException(WRONG_HVDC_ANGLE_DROOP_ACTIVE_POWER_CONTROL, - ACTIVE_POWER_CONTROL_DROOP_P0_REQUIRED_ERROR_MSG).getMessage(), + assertLogMessage(ACTIVE_POWER_CONTROL_DROOP_P0_REQUIRED_ERROR_MSG, ERROR_MESSAGE_KEY, reportService); } } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VscModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VscModificationTest.java index 8ff2ee58b..643775521 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VscModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VscModificationTest.java @@ -14,7 +14,6 @@ import com.powsybl.iidm.network.extensions.HvdcAngleDroopActivePowerControl; import com.powsybl.iidm.network.extensions.HvdcOperatorActivePowerRange; import com.powsybl.iidm.network.extensions.HvdcOperatorActivePowerRangeAdder; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.modifications.VscModification; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -26,7 +25,6 @@ import java.util.stream.IntStream; import static org.assertj.core.api.Assertions.assertThat; -import static org.gridsuite.modification.NetworkModificationException.Type.WRONG_HVDC_ANGLE_DROOP_ACTIVE_POWER_CONTROL; import static org.gridsuite.modification.modifications.VscModification.ACTIVE_POWER_CONTROL_DROOP_P0_REQUIRED_ERROR_MSG; import static org.junit.jupiter.api.Assertions.*; /** @@ -273,11 +271,10 @@ private VscModificationInfos buildModificationWithDroopAbsentInfos(boolean isPre private static void checkDroopWithAbsentInfos(VscModificationInfos modificationInfos, Network networkWithoutExt) { VscModification vscModification = new VscModification(modificationInfos); - String message = assertThrows(NetworkModificationException.class, + String message = assertThrows(RuntimeException.class, () -> vscModification.check(networkWithoutExt)) .getMessage(); - assertThat(message).isEqualTo(WRONG_HVDC_ANGLE_DROOP_ACTIVE_POWER_CONTROL.name() + " : " - + ACTIVE_POWER_CONTROL_DROOP_P0_REQUIRED_ERROR_MSG); + assertEquals(ACTIVE_POWER_CONTROL_DROOP_P0_REQUIRED_ERROR_MSG, message); } @Test @@ -358,7 +355,7 @@ void testDtoContainRequiredData() { var networkuuid = UUID.randomUUID(); Network networkWitoutExt = NetworkCreation.createWithVSC(networkuuid, true); VscModification vscModification = new VscModification(modificationInfos); - assertThrows(NetworkModificationException.class, () -> vscModification.check(networkWitoutExt)); + assertThrows(RuntimeException.class, () -> vscModification.check(networkWitoutExt)); } @Test diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilterdeletion/AbstractByFilterDeletionTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilterdeletion/AbstractByFilterDeletionTest.java index 4995538c9..224513739 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilterdeletion/AbstractByFilterDeletionTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilterdeletion/AbstractByFilterDeletionTest.java @@ -133,7 +133,7 @@ void testCreateAllFiltersWrong() throws Exception { .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); - assertLogMessage(byFilterDeletionInfos.getErrorType().name() + ": There is no valid equipment ID among the provided filter(s)", + assertLogMessage("There is no valid equipment ID among the provided filter(s)", "network.modification.invalidFilters", reportService); wireMockUtils.verifyGetRequest(stubId, PATH, handleQueryParams(filters.stream().map(AbstractFilter::getId).collect(Collectors.toList())), false); } diff --git a/src/test/java/org/gridsuite/modification/server/service/EquipmentInfosServiceTests.java b/src/test/java/org/gridsuite/modification/server/service/EquipmentInfosServiceTests.java index e9ed0f7fd..2e8b6ec73 100644 --- a/src/test/java/org/gridsuite/modification/server/service/EquipmentInfosServiceTests.java +++ b/src/test/java/org/gridsuite/modification/server/service/EquipmentInfosServiceTests.java @@ -9,7 +9,6 @@ import com.powsybl.iidm.network.*; import com.powsybl.network.store.iidm.impl.NetworkFactoryImpl; import com.powsybl.network.store.iidm.impl.NetworkImpl; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.server.dto.SubstationInfos; import org.gridsuite.modification.server.dto.VoltageLevelInfos; import org.gridsuite.modification.server.dto.elasticsearch.EquipmentInfos; @@ -256,13 +255,13 @@ void testSubstations() { void testBadType() { Identifiable network = new NetworkFactoryImpl().createNetwork("test", "test"); - String errorMessage = assertThrows(NetworkModificationException.class, () -> EquipmentInfos.getVoltageLevelsInfos(network)).getMessage(); + String errorMessage = assertThrows(RuntimeException.class, () -> EquipmentInfos.getVoltageLevelsInfos(network)).getMessage(); assertTrue(errorMessage.contains(String.format("The equipment type : %s is unknown", NetworkImpl.class.getSimpleName()))); - errorMessage = assertThrows(NetworkModificationException.class, () -> EquipmentInfos.getSubstationsInfos(network)).getMessage(); + errorMessage = assertThrows(RuntimeException.class, () -> EquipmentInfos.getSubstationsInfos(network)).getMessage(); assertTrue(errorMessage.contains(String.format("The equipment type : %s is unknown", NetworkImpl.class.getSimpleName()))); - errorMessage = assertThrows(NetworkModificationException.class, () -> EquipmentInfos.getSubstationsInfos(network)).getMessage(); + errorMessage = assertThrows(RuntimeException.class, () -> EquipmentInfos.getSubstationsInfos(network)).getMessage(); assertTrue(errorMessage.contains(String.format("The equipment type : %s is unknown", NetworkImpl.class.getSimpleName()))); } @@ -270,8 +269,8 @@ void testBadType() { void testUnsupportedHybridHvdc() { Network network = NetworkCreation.create(NETWORK_UUID, true); HvdcLine hvdcLine = network.getHvdcLine("hvdcLine"); - String errorMessage = assertThrows(NetworkModificationException.class, () -> EquipmentInfos.getEquipmentTypeName(hvdcLine)).getMessage(); - assertEquals(NetworkModificationException.createHybridHvdcUnsupported(hvdcLine.getId()).getMessage(), errorMessage); + String errorMessage = assertThrows(RuntimeException.class, () -> EquipmentInfos.getEquipmentTypeName(hvdcLine)).getMessage(); + assertEquals("The hybrid Hvdc line hvdcLine is unsupported", errorMessage); } @Test diff --git a/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java b/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java index 747fa11eb..a9208f0fa 100644 --- a/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java @@ -10,7 +10,6 @@ import com.powsybl.iidm.network.extensions.ConnectablePosition; import com.vladmihalcea.sql.SQLStatementCountValidator; import org.gridsuite.modification.ModificationType; -import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.dto.tabular.TabularModificationInfos; import org.gridsuite.modification.server.entities.ModificationEntity; @@ -34,7 +33,6 @@ import java.util.stream.Collectors; import static com.powsybl.iidm.network.StaticVarCompensator.RegulationMode.VOLTAGE; -import static org.gridsuite.modification.NetworkModificationException.Type.*; import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.*; import static org.gridsuite.modification.dto.VoltageRegulationType.DISTANT; import static org.gridsuite.modification.server.utils.TestUtils.assertRequestsCount; @@ -127,8 +125,8 @@ private VoltageInitModificationInfos getVoltageInitModification(UUID modificatio @Test void test() { assertEquals(List.of(), this.networkModificationRepository.getModificationGroupsUuids()); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); assertEquals(0, networkModificationRepository.getModifications(TEST_GROUP_ID, true, false).size()); var nullModifEntity = ModificationEntity.fromDTO(EquipmentAttributeModificationInfos.builder().equipmentId("id0").equipmentAttributeName("attribute").equipmentAttributeValue(null).equipmentType(IdentifiableType.VOLTAGE_LEVEL).build()); @@ -169,8 +167,8 @@ void test() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertEquals(0, modificationRepository.findAll().size()); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @Test @@ -210,8 +208,8 @@ void testGetModificationQueryCount() { assertRequestsCount(1, 0, 0, 0); // Non-existent modification uuid - assertThrows(NetworkModificationException.class, () -> getEquipmentAttributeModification(TEST_GROUP_ID), - new NetworkModificationException(MODIFICATION_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> getEquipmentAttributeModification(TEST_GROUP_ID)); + assertEquals("Modification not found: 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @Test @@ -229,8 +227,9 @@ void testDeleteModificationQueryCount() { assertRequestsCount(5, 0, 1, 3); // Non-existent group modification uuid - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); + } @Test @@ -267,8 +266,8 @@ void testLoadCreation() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(5, 0, 1, 3); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @Test @@ -348,8 +347,8 @@ void testGeneratorCreation() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(5, 0, 1, 4); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @Test @@ -398,8 +397,8 @@ void testShuntCompensatorCreation() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(5, 0, 1, 3); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @Test @@ -478,8 +477,8 @@ void testLineCreation() { // https://github.com/jdbc-observations/datasource-proxy/issues/123 assertRequestsCount(10, 0, 1); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @Test @@ -663,8 +662,8 @@ void testMoveModificationsBetweenMoreThanTwoGroups() { SQLStatementCountValidator.reset(); List modificationsToMoveUuid2 = List.of(groovyScriptEntity2.getId()); UUID referenceNodeUuid = groovyScriptEntity2.getId(); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.moveModifications(TEST_GROUP_ID_2, TEST_GROUP_ID, modificationsToMoveUuid2, referenceNodeUuid), - new NetworkModificationException(MOVE_MODIFICATION_ERROR).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.moveModifications(TEST_GROUP_ID_2, TEST_GROUP_ID, modificationsToMoveUuid2, referenceNodeUuid)); + assertEquals("Insert modification error", exception.getMessage()); assertRequestsCount(5, 0, 0, 0); var modification1 = networkModificationRepository.getModifications(TEST_GROUP_ID, true, true); @@ -717,8 +716,8 @@ void testGroovyScript() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(4, 0, 1, 3); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @Test @@ -770,8 +769,8 @@ void testSubstationCreation() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(5, 0, 1, 4); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @Test @@ -806,8 +805,8 @@ void testVoltageLevelCreation() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(2, 0, 0, 1); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } private static VoltageLevelCreationInfos makeAVoltageLevelInfos() { @@ -911,8 +910,8 @@ void testLineSplitWithVoltageLevel() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(2, 0, 0, 1); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @Test @@ -973,8 +972,8 @@ void testLineAttachToVoltageLevel() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(2, 0, 0, 1); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @Test @@ -1023,8 +1022,8 @@ void testLinesAttachToSplitLines() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(2, 0, 0, 1); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @Test @@ -1091,8 +1090,8 @@ void testDeleteAttachingLine() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(2, 0, 0, 1); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @Test @@ -1133,8 +1132,8 @@ void testDeleteVoltageLevelOnLine() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(2, 0, 0, 1); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } private static void testModificationEmbedded(IAttributeModificationEmbeddable modification, T val) { @@ -1392,8 +1391,8 @@ void testStaticVarCompensatorCreation() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(5, 0, 1, 3); - assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true), - new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); + assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @Test From f5f9ca7049dd61b6bd6dedeba2dbf8f20dce9869 Mon Sep 17 00:00:00 2001 From: benrejebmoh Date: Thu, 11 Dec 2025 17:46:52 +0100 Subject: [PATCH 2/8] refactoring of error handling Signed-off-by: benrejebmoh --- .../server/entities/ModificationEntity.java | 2 +- ...orkModificationGroupNotFoundException.java | 18 + .../NetworkModificationRepository.java | 174 +++--- .../service/NetworkModificationService.java | 23 +- .../server/ModificationControllerTest.java | 579 ++++++++++-------- .../server/ServerNameProvider.java | 28 + .../AbstractNetworkModificationTest.java | 3 + .../EquipmentAttributeModificationTest.java | 43 +- .../LineAttachToVoltageLevelTest.java | 11 +- .../LineCreationInNodeBreakerTest.java | 2 +- ...tingStatusModificationLockoutLineTest.java | 69 ++- .../VoltageLevelCreationTest.java | 6 +- .../VoltageLevelModificationTest.java | 12 +- .../AbstractModificationByAssignmentTest.java | 2 +- src/test/resources/application-default.yml | 4 + 15 files changed, 544 insertions(+), 432 deletions(-) create mode 100644 src/main/java/org/gridsuite/modification/server/error/NetworkModificationGroupNotFoundException.java create mode 100644 src/test/java/org/gridsuite/modification/server/ServerNameProvider.java diff --git a/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java index 21d27de4f..0cdffe3fd 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java @@ -130,7 +130,7 @@ public static ModificationEntity fromDTO(ModificationInfos dto) { Constructor constructor = entityClass.getConstructor(dto.getClass()); return constructor.newInstance(dto); } catch (Exception e) { - throw new NetworkModificationServerRunException("Failed to map DTO to Entity", e); + throw new NetworkModificationServerRunException("Failed to map DTO to Entity: " + e.getCause().getMessage(), e); } } else { throw new IllegalArgumentException("No entity class registered for DTO class: " + dto.getClass()); diff --git a/src/main/java/org/gridsuite/modification/server/error/NetworkModificationGroupNotFoundException.java b/src/main/java/org/gridsuite/modification/server/error/NetworkModificationGroupNotFoundException.java new file mode 100644 index 000000000..6f34f6294 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/error/NetworkModificationGroupNotFoundException.java @@ -0,0 +1,18 @@ +/* + Copyright (c) 2025, RTE (http://www.rte-france.com) + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package org.gridsuite.modification.server.error; + +/** + * @author Mohamed Benrejeb + */ +public class NetworkModificationGroupNotFoundException extends RuntimeException { + + public NetworkModificationGroupNotFoundException(String message) { + super(message); + } + +} diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index ca5ae4fd0..18d60833a 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -18,6 +18,7 @@ import org.gridsuite.modification.server.entities.equipment.modification.EquipmentModificationEntity; import org.gridsuite.modification.server.entities.tabular.TabularModificationsEntity; import org.gridsuite.modification.server.entities.tabular.TabularPropertyEntity; +import org.gridsuite.modification.server.error.NetworkModificationGroupNotFoundException; import org.gridsuite.modification.server.error.NetworkModificationServerRunException; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @@ -121,7 +122,7 @@ public List saveModificationInfos(UUID groupUuid, List saveModificationInfosNonTransactional(UUID groupUuid, - List modifications) { + List modifications) { List entities = modifications.stream().map(ModificationEntity::fromDTO).toList(); return saveModificationsNonTransactional(groupUuid, entities); @@ -131,25 +132,25 @@ public UUID createNetworkCompositeModification(@NonNull List modificationU CompositeModificationInfos compositeInfos = CompositeModificationInfos.builder().modifications(List.of()).build(); CompositeModificationEntity compositeEntity = (CompositeModificationEntity) ModificationEntity.fromDTO(compositeInfos); List copyEntities = modificationRepository.findAllByIdIn(modificationUuids).stream() - .map(this::toModificationsInfosOptimizedForTabular) - .map(ModificationEntity::fromDTO) - .toList(); + .map(this::toModificationsInfosOptimizedForTabular) + .map(ModificationEntity::fromDTO) + .toList(); compositeEntity.setModifications(copyEntities); return modificationRepository.save(compositeEntity).getId(); } public void updateCompositeModification(@NonNull UUID compositeUuid, @NonNull List modificationUuids) { ModificationEntity modificationEntity = modificationRepository.findById(compositeUuid) - .orElseThrow(() -> new NetworkModificationServerRunException(String.format(MODIFICATION_NOT_FOUND_MESSAGE, compositeUuid))); + .orElseThrow(() -> new NetworkModificationServerRunException(String.format(MODIFICATION_NOT_FOUND_MESSAGE, compositeUuid))); if (!(modificationEntity instanceof CompositeModificationEntity compositeEntity)) { throw new NetworkModificationServerRunException(String.format("Modification (%s) is not a composite modification", compositeUuid)); } List copyEntities = modificationRepository.findAllByIdIn(modificationUuids).stream() - .map(this::toModificationsInfosOptimizedForTabular) - .map(ModificationEntity::fromDTO) - .toList(); + .map(this::toModificationsInfosOptimizedForTabular) + .map(ModificationEntity::fromDTO) + .toList(); compositeEntity.getModifications().clear(); compositeEntity.getModifications().addAll(copyEntities); modificationRepository.save(compositeEntity); @@ -216,10 +217,10 @@ private List moveModificationsNonTransactional(UUID destinat private void insertModifications(List modificationsList, List modificationsToAdd, UUID referenceModificationUuid) { // If referenceModificationUuid == null we will append at the end of list, otherwise we will insert before referenceModification int insertionIndex = referenceModificationUuid == null ? - modificationsList.size() : IntStream.range(0, modificationsList.size()) - .filter(i -> referenceModificationUuid.equals(modificationsList.get(i).getId())) - .findFirst() - .orElseThrow(() -> new NetworkModificationServerRunException("Insert modification error")); + modificationsList.size() : IntStream.range(0, modificationsList.size()) + .filter(i -> referenceModificationUuid.equals(modificationsList.get(i).getId())) + .findFirst() + .orElseThrow(() -> new NetworkModificationServerRunException("Insert modification error")); modificationsList.addAll(insertionIndex, modificationsToAdd); for (int order = 0; order < modificationsList.size(); order++) { modificationsList.get(order).setModificationsOrder(order); @@ -249,8 +250,8 @@ private List removeModifications(List mo public List getModificationGroupsUuids() { return this.modificationGroupRepository.findAll().stream() - .map(ModificationGroupEntity::getId) - .collect(Collectors.toList()); + .map(ModificationGroupEntity::getId) + .collect(Collectors.toList()); } @Transactional @@ -259,9 +260,9 @@ public Map duplicateCompositeModifications(List sourceModifica // findAllById does not keep sourceModificationUuids order, but // sourceEntities, copyEntities, newEntities have the same order. List copyEntities = sourceEntities.stream() - .map(this::toModificationsInfosOptimizedForTabular) - .map(ModificationEntity::fromDTO) - .toList(); + .map(this::toModificationsInfosOptimizedForTabular) + .map(ModificationEntity::fromDTO) + .toList(); List newEntities = modificationRepository.saveAll(copyEntities); // Iterate through sourceEntities and newEntities collections simultaneously to map sourceId -> newId @@ -280,13 +281,15 @@ public List getModifications(UUID groupUuid, boolean onlyMeta } public List getModifications(UUID groupUuid, boolean onlyMetadata, boolean errorOnGroupNotFound, boolean onlyStashed) { - // TODO check this: e.getType() == MODIFICATION_GROUP_NOT_FOUND && !errorOnGroupNotFound) { - // return List.of(); - - if (!errorOnGroupNotFound) { - return List.of(); + try { + return onlyMetadata ? getModificationsMetadata(groupUuid, onlyStashed) : getModificationsInfos(List.of(groupUuid), onlyStashed); + } catch (NetworkModificationGroupNotFoundException e) { + if (!errorOnGroupNotFound) { + return List.of(); + } else { + throw e; + } } - return onlyMetadata ? getModificationsMetadata(groupUuid, onlyStashed) : getModificationsInfos(List.of(groupUuid), onlyStashed); } public List getModificationsMetadata(UUID groupUuid, boolean onlyStashed) { @@ -308,14 +311,14 @@ public List getModificationsMetadata(UUID groupUuid, boolean private List reorderModifications(List modifications, List subModificationsOrderedUuids) { Map modificationsMap = modifications.stream() - .collect(Collectors.toMap( - ModificationEntity::getId, - Function.identity() - )); + .collect(Collectors.toMap( + ModificationEntity::getId, + Function.identity() + )); return subModificationsOrderedUuids - .stream() - .map(modificationsMap::get) - .toList(); + .stream() + .map(modificationsMap::get) + .toList(); } private List loadTabularModificationSubEntities(List subModificationsUuids, ModificationType modificationType) { @@ -394,16 +397,16 @@ private TabularBaseInfos loadTabularModification(TabularModificationsEntity tabu default -> TabularModificationInfos.builder(); }; return builder.uuid(tabularEntity.getId()) - .date(tabularEntity.getDate()) - .stashed(tabularEntity.getStashed()) - .activated(tabularEntity.getActivated()) - .modificationType(tabularEntity.getModificationType()) - .modifications(orderedModifications.stream().map(ModificationEntity::toModificationInfos).toList()) - .properties(CollectionUtils.isEmpty(tabularEntity.getProperties()) ? null : tabularEntity.getProperties().stream() - .map(TabularPropertyEntity::toInfos) - .toList()) - .csvFilename(tabularEntity.getCsvFilename()) - .build(); + .date(tabularEntity.getDate()) + .stashed(tabularEntity.getStashed()) + .activated(tabularEntity.getActivated()) + .modificationType(tabularEntity.getModificationType()) + .modifications(orderedModifications.stream().map(ModificationEntity::toModificationInfos).toList()) + .properties(CollectionUtils.isEmpty(tabularEntity.getProperties()) ? null : tabularEntity.getProperties().stream() + .map(TabularPropertyEntity::toInfos) + .toList()) + .csvFilename(tabularEntity.getCsvFilename()) + .build(); } public ModificationInfos toModificationsInfosOptimizedForTabular(ModificationEntity modificationEntity) { @@ -421,8 +424,8 @@ public List getActiveModifications(UUID groupUuid, Set private List getModificationsInfos(List groupUuids, boolean onlyStashed) { return groupUuids.stream().flatMap(this::getModificationEntityStream) - .filter(m -> !onlyStashed || m.getStashed() == onlyStashed) - .map(this::toModificationsInfosOptimizedForTabular).toList(); + .filter(m -> !onlyStashed || m.getStashed() == onlyStashed) + .map(this::toModificationsInfosOptimizedForTabular).toList(); } @Transactional(readOnly = true) @@ -438,20 +441,20 @@ public ModificationEntity getModificationEntity(UUID modificationUuid) { @Transactional // To have the 2 delete in the same transaction (atomic) public void deleteModificationGroup(UUID groupUuid, boolean errorOnGroupNotFound) { - // TODO check this: e.getType() == MODIFICATION_GROUP_NOT_FOUND && !errorOnGroupNotFound) { - // return; - if (!errorOnGroupNotFound) { - return; - } - ModificationGroupEntity groupEntity = getModificationGroup(groupUuid); - if (!groupEntity.getModifications().isEmpty()) { - //TODO: is there a way to avoid doing this setGroup(null) that triggers a useless update since the entity will be deleted right after - groupEntity.getModifications().forEach(modif -> modif.setGroup(null)); - List modifications = groupEntity.getModifications(); - deleteModifications(modifications.stream().filter(Objects::nonNull).toList()); + try { + ModificationGroupEntity groupEntity = getModificationGroup(groupUuid); + if (!groupEntity.getModifications().isEmpty()) { + //TODO: is there a way to avoid doing this setGroup(null) that triggers a useless update since the entity will be deleted right after + groupEntity.getModifications().forEach(modif -> modif.setGroup(null)); + List modifications = groupEntity.getModifications(); + deleteModifications(modifications.stream().filter(Objects::nonNull).toList()); + } + modificationGroupRepository.delete(groupEntity); + } catch (NetworkModificationGroupNotFoundException e) { + if (errorOnGroupNotFound) { + throw e; + } } - modificationGroupRepository.delete(groupEntity); - } @Transactional // To have the find and delete in the same transaction (atomic) @@ -481,7 +484,7 @@ public int deleteModifications(UUID groupUuid, List uuids) { } private ModificationGroupEntity getModificationGroup(UUID groupUuid) { - return this.modificationGroupRepository.findById(groupUuid).orElseThrow(() -> new NetworkModificationServerRunException("Modification Group not found " + groupUuid)); + return this.modificationGroupRepository.findById(groupUuid).orElseThrow(() -> new NetworkModificationGroupNotFoundException("Modification Group not found " + groupUuid)); } private ModificationGroupEntity getOrCreateModificationGroup(UUID groupUuid) { @@ -516,12 +519,12 @@ private List getModificationsInfosNonTransactional(List public List getBasicNetworkModificationsFromComposite(@NonNull UUID uuid) { List networkModificationsUuids = modificationRepository.findModificationIdsByCompositeModificationId(uuid); Map entitiesById = modificationRepository.findBaseDataByIdIn(networkModificationsUuids).stream() - .collect(Collectors.toMap(ModificationEntity::getId, Function.identity())); + .collect(Collectors.toMap(ModificationEntity::getId, Function.identity())); return networkModificationsUuids.stream() - .map(entitiesById::get) - .filter(Objects::nonNull) - .map(this::toModificationsInfosOptimizedForTabular) - .toList(); + .map(entitiesById::get) + .filter(Objects::nonNull) + .map(this::toModificationsInfosOptimizedForTabular) + .toList(); } @Transactional(readOnly = true) @@ -532,13 +535,13 @@ public List getCompositeModificationsInfos(@NonNull List getCompositeModificationsInfosNonTransactional(@NonNull List uuids) { List entities = new ArrayList<>(); uuids.forEach(uuid -> { - List foundEntities = modificationRepository.findModificationIdsByCompositeModificationId(uuid); - List orderedModifications = foundEntities + List foundEntities = modificationRepository.findModificationIdsByCompositeModificationId(uuid); + List orderedModifications = foundEntities .stream() .map(this::getModificationInfo) .toList(); - entities.addAll(orderedModifications); - } + entities.addAll(orderedModifications); + } ); return entities; } @@ -558,8 +561,8 @@ public void stashNetworkModifications(@NonNull List modificationUuids, int List modificationEntities = new ArrayList<>(); for (UUID modificationUuid : modificationUuids) { ModificationEntity modificationEntity = this.modificationRepository - .findById(modificationUuid) - .orElseThrow(() -> new NetworkModificationServerRunException(String.format(MODIFICATION_NOT_FOUND_MESSAGE, modificationUuid))); + .findById(modificationUuid) + .orElseThrow(() -> new NetworkModificationServerRunException(String.format(MODIFICATION_NOT_FOUND_MESSAGE, modificationUuid))); modificationEntity.setStashed(true); modificationEntity.setModificationsOrder(stashModificationOrder); modificationEntities.add(modificationEntity); @@ -614,8 +617,8 @@ public void updateModification(@NonNull UUID modificationUuid, @NonNull Modifica // Before updating/adding with new sub-modifications, we delete and clear existing sub-modifications manually // to avoid JPA to make a huge query to find them (no need to read them, they are going to be replaced). if (modificationInfos.getType() == ModificationType.TABULAR_CREATION - || modificationInfos.getType() == ModificationType.TABULAR_MODIFICATION - || modificationInfos.getType() == ModificationType.LIMIT_SETS_TABULAR_MODIFICATION) { + || modificationInfos.getType() == ModificationType.TABULAR_MODIFICATION + || modificationInfos.getType() == ModificationType.LIMIT_SETS_TABULAR_MODIFICATION) { TabularModificationsEntity tabularEntity = (TabularModificationsEntity) entity; deleteTabularModificationSubModifications(tabularEntity); tabularEntity.update(modificationInfos); @@ -626,19 +629,20 @@ public void updateModification(@NonNull UUID modificationUuid, @NonNull Modifica @Transactional public void deleteStashedModificationInGroup(UUID groupUuid, boolean errorOnGroupNotFound) { - // TODO check this: if (e.getType() == MODIFICATION_GROUP_NOT_FOUND && !errorOnGroupNotFound) { - // return; - if (!errorOnGroupNotFound) { - return; - } - ModificationGroupEntity groupEntity = getModificationGroup(groupUuid); - List modifications = getModificationEntityStream(groupUuid) - .filter(Objects::nonNull) - .filter(ModificationEntity::getStashed) - .toList(); - if (!modifications.isEmpty()) { - groupEntity.getModifications().removeAll(modifications); // No need to remove the group from the modification as we're going to delete it - deleteModifications(modifications); + try { + ModificationGroupEntity groupEntity = getModificationGroup(groupUuid); + List modifications = getModificationEntityStream(groupUuid) + .filter(Objects::nonNull) + .filter(ModificationEntity::getStashed) + .toList(); + if (!modifications.isEmpty()) { + groupEntity.getModifications().removeAll(modifications); // No need to remove the group from the modification as we're going to delete it + deleteModifications(modifications); + } + } catch (NetworkModificationGroupNotFoundException e) { + if (errorOnGroupNotFound) { + throw e; + } } } @@ -648,9 +652,9 @@ public List getModificationsMetadata(List uuids) { return modificationRepository.findMetadataIn(uuids) .stream() .map(entity -> ModificationMetadata.builder() - .id(entity.getId()) - .type(ModificationType.valueOf(entity.getType())) - .build()) + .id(entity.getId()) + .type(ModificationType.valueOf(entity.getType())) + .build()) .toList(); } diff --git a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java index 58bf15993..cc0e0a896 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -25,6 +25,7 @@ import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosService; import org.gridsuite.modification.server.entities.ModificationEntity; +import org.gridsuite.modification.server.error.NetworkModificationGroupNotFoundException; import org.gridsuite.modification.server.error.NetworkModificationServerRunException; import org.gridsuite.modification.server.modifications.NetworkModificationApplicator; import org.gridsuite.modification.server.repositories.ModificationRepository; @@ -326,17 +327,19 @@ public CompletableFuture moveModifications(@NonNull } public Map duplicateGroup(UUID sourceGroupUuid, UUID groupUuid) { - // TODO check this if (e.getType() == MODIFICATION_GROUP_NOT_FOUND) { // May not exist - // return Map.of(); - List modificationToDuplicateInfos = networkModificationRepository.getUnstashedModificationsInfos(sourceGroupUuid); - List newModifications = networkModificationRepository.saveModificationInfos(groupUuid, modificationToDuplicateInfos); - - Map duplicateModificationMapping = new HashMap<>(); - for (int i = 0; i < modificationToDuplicateInfos.size(); i++) { - duplicateModificationMapping.put(modificationToDuplicateInfos.get(i).getUuid(), newModifications.get(i).getUuid()); - } + try { + List modificationToDuplicateInfos = networkModificationRepository.getUnstashedModificationsInfos(sourceGroupUuid); + List newModifications = networkModificationRepository.saveModificationInfos(groupUuid, modificationToDuplicateInfos); + + Map duplicateModificationMapping = new HashMap<>(); + for (int i = 0; i < modificationToDuplicateInfos.size(); i++) { + duplicateModificationMapping.put(modificationToDuplicateInfos.get(i).getUuid(), newModifications.get(i).getUuid()); + } - return duplicateModificationMapping; + return duplicateModificationMapping; + } catch (NetworkModificationGroupNotFoundException e) { + return Map.of(); + } } private CompletableFuture> applyModifications(UUID networkUuid, String variantId, ModificationApplicationGroup modificationGroupInfos) { diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index 800a8c03e..6581d20fa 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -19,6 +19,7 @@ import com.powsybl.network.store.client.NetworkStoreService; import com.powsybl.network.store.client.PreloadingStrategy; import com.powsybl.network.store.iidm.impl.NetworkFactoryImpl; +import com.powsybl.ws.commons.error.BaseExceptionHandler; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.tuple.Pair; import org.gridsuite.modification.dto.*; @@ -31,7 +32,6 @@ import org.gridsuite.modification.server.elasticsearch.EquipmentInfosRepository; import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; import org.gridsuite.modification.server.elasticsearch.TombstonedEquipmentInfosRepository; -import org.gridsuite.modification.server.error.NetworkModificationServerRunException; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.impacts.SimpleElementImpact; import org.gridsuite.modification.server.impacts.TestImpactUtils; @@ -51,6 +51,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; import org.springframework.http.MediaType; import org.springframework.mock.web.MockMultipartFile; import org.springframework.test.context.bean.override.mockito.MockitoBean; @@ -74,8 +75,7 @@ import static org.gridsuite.modification.server.utils.assertions.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -86,6 +86,7 @@ */ @AutoConfigureMockMvc @SpringBootTest +@Import(BaseExceptionHandler.class) @Tag("IntegrationTest") class ModificationControllerTest { @@ -156,7 +157,7 @@ void setUp() { networkWithTeePoint = NetworkWithTeePoint.create(TEST_NETWORK_WITH_TEE_POINT_ID); when(networkStoreService.getNetwork(eq(TEST_NETWORK_WITH_TEE_POINT_ID), nullable(PreloadingStrategy.class))).then((Answer) invocation -> networkWithTeePoint); - when(networkStoreService.getNetwork(eq(NOT_FOUND_NETWORK_ID), nullable(PreloadingStrategy.class))).thenThrow(new PowsyblException()); + when(networkStoreService.getNetwork(eq(NOT_FOUND_NETWORK_ID), nullable(PreloadingStrategy.class))).thenThrow(new PowsyblException("network-not-found-root-cause")); when(networkStoreService.getNetwork(eq(TEST_NETWORK_WITH_FLUSH_ERROR_ID), nullable(PreloadingStrategy.class))).then((Answer) invocation -> NetworkCreation.create(TEST_NETWORK_WITH_FLUSH_ERROR_ID, true)); networkBusBreaker = NetworkCreation.createBusBreaker(TEST_NETWORK_BUS_BREAKER_ID); @@ -164,7 +165,7 @@ void setUp() { when(networkStoreService.getNetwork(eq(TEST_NETWORK_MIXED_TOPOLOGY_ID), nullable(PreloadingStrategy.class))).then((Answer) invocation -> NetworkCreation.createMixedTopology(TEST_NETWORK_MIXED_TOPOLOGY_ID)); - doThrow(new PowsyblException()).when(networkStoreService).flush(argThat(n -> TEST_NETWORK_WITH_FLUSH_ERROR_ID.toString().equals(n.getId()))); + doThrow(new PowsyblException("flush-error-root-cause")).when(networkStoreService).flush(argThat(n -> TEST_NETWORK_WITH_FLUSH_ERROR_ID.toString().equals(n.getId()))); // clean DB modificationRepository.deleteAll(); @@ -183,7 +184,8 @@ private boolean existTombstonedEquipmentInfos(String equipmentId, UUID networkUu } private void assertApplicationStatusOK(MvcResult mvcResult) throws Exception { - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().get(0).isPresent()); assertNotEquals(NetworkModificationResult.ApplicationStatus.WITH_ERRORS, networkModificationsResult.modificationResults().get(0).get().getApplicationStatus()); @@ -212,8 +214,8 @@ void testNetworkNotFound() throws Exception { String body = getJsonBody(LoadCreationInfos.builder().equipmentId("id").build(), NOT_FOUND_NETWORK_ID, NetworkCreation.VARIANT_ID); MvcResult mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(body).contentType(MediaType.APPLICATION_JSON), - status().isNotFound()); - assertEquals("(NETWORK_NOT_FOUND, NOT_FOUND_NETWORK_ID.toString()).getMessage()", mvcResult.getResponse().getContentAsString()); + status().isInternalServerError()); + assertTrue(mvcResult.getResponse().getContentAsString().contains("\"detail\":\"network-not-found-root-cause\"")); } @Test @@ -231,57 +233,67 @@ void testModificationGroups() throws Exception { String resultAsString; EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() - .equipmentType(IdentifiableType.SWITCH) - .equipmentAttributeName("open") - .equipmentAttributeValue(true) - .equipmentId("v1b1") - .build(); + .equipmentType(IdentifiableType.SWITCH) + .equipmentAttributeName("open") + .equipmentAttributeValue(true) + .equipmentId("v1b1") + .build(); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); // no groups mvcResult = mockMvc.perform(get("/v1/groups")).andExpectAll(status().isOk(), content().contentType(MediaType.APPLICATION_JSON)).andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List bsicListResult = mapper.readValue(resultAsString, new TypeReference<>() { }); + List bsicListResult = mapper.readValue(resultAsString, new TypeReference<>() { + }); assertEquals(bsicListResult, List.of()); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); - // switch opening to create the default group + // switch opening to create the default group mvcResult = mockMvc.perform(get("/v1/groups")).andExpectAll( - status().isOk(), - content().contentType(MediaType.APPLICATION_JSON)) - .andReturn(); + status().isOk(), + content().contentType(MediaType.APPLICATION_JSON)) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List bsicListResultUUID = mapper.readValue(resultAsString, new TypeReference<>() { }); + List bsicListResultUUID = mapper.readValue(resultAsString, new TypeReference<>() { + }); assertEquals(bsicListResultUUID, List.of(TEST_GROUP_ID)); mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications", TEST_GROUP_ID)).andExpectAll( - status().isOk(), - content().contentType(MediaType.APPLICATION_JSON)) - .andReturn(); + status().isOk(), + content().contentType(MediaType.APPLICATION_JSON)) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List bsicListResulModifInfos = mapper.readValue(resultAsString, new TypeReference<>() { }); + List bsicListResulModifInfos = mapper.readValue(resultAsString, new TypeReference<>() { + }); assertEquals(1, bsicListResulModifInfos.size()); mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=true", TEST_GROUP_ID)) - .andExpectAll(status().isOk(), content().contentType(MediaType.APPLICATION_JSON)) - .andReturn(); + .andExpectAll(status().isOk(), content().contentType(MediaType.APPLICATION_JSON)) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List bsicListResultInfos = mapper.readValue(resultAsString, new TypeReference<>() { }); + List bsicListResultInfos = mapper.readValue(resultAsString, new TypeReference<>() { + }); assertEquals(1, bsicListResultInfos.size()); // delete the default modification group of a network mockMvc.perform(delete("/v1/groups/{groupUuid}", TEST_GROUP_ID)) - .andExpect(status().isOk()); + .andExpect(status().isOk()); - mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=true", TEST_GROUP_ID)).andExpectAll(status().isNotFound(), - content().string(new NetworkModificationServerRunException("Modification group " + TEST_GROUP_ID + " not found").getMessage())); + mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=true", TEST_GROUP_ID)) + .andExpect(status().isInternalServerError()) + .andExpect(result -> { + Throwable ex = result.getResolvedException(); + assertNotNull(ex); + assertEquals(String.format("Modification Group not found " + TEST_GROUP_ID), ex.getMessage()); + }); mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=true&errorOnGroupNotFound=false", TEST_GROUP_ID)).andExpectAll( - status().isOk(), - content().contentType(MediaType.APPLICATION_JSON)) - .andReturn(); + status().isOk(), + content().contentType(MediaType.APPLICATION_JSON)) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List bsicListModificationInfos = mapper.readValue(resultAsString, new TypeReference<>() { }); + List bsicListModificationInfos = mapper.readValue(resultAsString, new TypeReference<>() { + }); assertEquals(bsicListModificationInfos, List.of()); } @@ -289,12 +301,12 @@ void testModificationGroups() throws Exception { void testRestoreNetworkModifications() throws Exception { MvcResult mvcResult; EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() - .equipmentType(IdentifiableType.SWITCH) - .equipmentAttributeName("open") - .equipmentAttributeValue(true) - .equipmentId("v1b1") - .stashed(true) - .build(); + .equipmentType(IdentifiableType.SWITCH) + .equipmentAttributeName("open") + .equipmentAttributeValue(true) + .equipmentId("v1b1") + .stashed(true) + .build(); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -305,10 +317,10 @@ void testRestoreNetworkModifications() throws Exception { String uuidString = modifications.get(0).getUuid().toString(); mockMvc.perform(put(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString) - .queryParam("stashed", "false")) - .andExpect(status().isOk()); + .queryParam("groupUuid", TEST_GROUP_ID.toString()) + .queryParam("uuids", uuidString) + .queryParam("stashed", "false")) + .andExpect(status().isOk()); assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, true, true, true).size()); } @@ -316,12 +328,12 @@ void testRestoreNetworkModifications() throws Exception { void testStashNetworkModifications() throws Exception { MvcResult mvcResult; EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() - .equipmentType(IdentifiableType.SWITCH) - .equipmentAttributeName("open") - .equipmentAttributeValue(true) - .equipmentId("v1b1") - .stashed(true) - .build(); + .equipmentType(IdentifiableType.SWITCH) + .equipmentAttributeName("open") + .equipmentAttributeValue(true) + .equipmentId("v1b1") + .stashed(true) + .build(); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -331,10 +343,10 @@ void testStashNetworkModifications() throws Exception { assertEquals(1, modifications.size()); String uuidString = modifications.get(0).getUuid().toString(); mockMvc.perform(put(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString) - .queryParam("stashed", "true")) - .andExpect(status().isOk()); + .queryParam("groupUuid", TEST_GROUP_ID.toString()) + .queryParam("uuids", uuidString) + .queryParam("stashed", "true")) + .andExpect(status().isOk()); assertEquals(true, modificationRepository.getModificationInfo(UUID.fromString(uuidString)).getStashed()); } @@ -371,11 +383,11 @@ void testDisableNetworkModifications() throws Exception { void testDeleteModification() throws Exception { MvcResult mvcResult; EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() - .equipmentType(IdentifiableType.SWITCH) - .equipmentAttributeName("open") - .equipmentAttributeValue(true) - .equipmentId("v1b1") - .build(); + .equipmentType(IdentifiableType.SWITCH) + .equipmentAttributeName("open") + .equipmentAttributeValue(true) + .equipmentId("v1b1") + .build(); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -385,24 +397,24 @@ void testDeleteModification() throws Exception { assertEquals(1, modifications.size()); String uuidString = modifications.get(0).getUuid().toString(); mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", UUID.randomUUID().toString()) - .queryParam("uuids", uuidString)) - .andExpect(status().isNotFound()); + .queryParam("groupUuid", UUID.randomUUID().toString()) + .queryParam("uuids", uuidString)) + .andExpect(status().isInternalServerError()); mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString)) - .andExpect(status().isOk()); + .queryParam("groupUuid", TEST_GROUP_ID.toString()) + .queryParam("uuids", uuidString)) + .andExpect(status().isOk()); assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); /* non existing modification */ mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString)) - .andExpect(status().isNotFound()); + .queryParam("groupUuid", TEST_GROUP_ID.toString()) + .queryParam("uuids", uuidString)) + .andExpect(status().isInternalServerError()); mockMvc.perform(delete("/v1/groups/" + TEST_GROUP_ID)).andExpect(status().isOk()); - mockMvc.perform(delete("/v1/groups/" + TEST_GROUP_ID)).andExpect(status().isNotFound()); + mockMvc.perform(delete("/v1/groups/" + TEST_GROUP_ID)).andExpect(status().isInternalServerError()); mockMvc.perform(delete("/v1/groups/" + TEST_GROUP_ID).queryParam("errorOnGroupNotFound", "false")).andExpect(status().isOk()); } @@ -413,36 +425,35 @@ void testDeleteAllModification() throws Exception { assertEquals(3, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", TEST_GROUP_ID.toString())) - .andExpect(status().isOk()); + .queryParam("groupUuid", TEST_GROUP_ID.toString())) + .andExpect(status().isOk()); assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); } @Test void testDeleteModificationMissingParamError() throws Exception { mockMvc.perform(delete(URI_NETWORK_MODIF_BASE)) - .andExpect(status().isInternalServerError()) - .andExpect(result -> assertInstanceOf(RuntimeException.class, result.getResolvedException())) - .andExpect(result -> assertEquals("MODIFICATION_DELETION_ERROR : need to specify the group or give a list of UUIDs", result.getResolvedException().getMessage())); + .andExpect(status().isInternalServerError()) + .andExpect(result -> assertInstanceOf(RuntimeException.class, result.getResolvedException())) + .andExpect(result -> assertEquals("Modification deletion error: need to specify the group or give a list of UUIDs", result.getResolvedException().getMessage())); } @Test void testNetworkModificationsWithErrorOnNetworkFlush() throws Exception { - GroovyScriptInfos groovyScriptInfos = GroovyScriptInfos.builder() - .script("network.getGenerator('idGenerator').targetP=10\nnetwork.getGenerator('idGenerator').targetP=20\n") - .build(); + .script("network.getGenerator('idGenerator').targetP=10\nnetwork.getGenerator('idGenerator').targetP=20\n") + .build(); String groovyScriptInfosJson = getJsonBody(groovyScriptInfos, TEST_NETWORK_WITH_FLUSH_ERROR_ID, NetworkCreation.VARIANT_ID); - runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON), status().is5xxServerError()); - + MvcResult mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON), status().isInternalServerError()); + assertTrue(mvcResult.getResponse().getContentAsString().contains("\"detail\":\"flush-error-root-cause\"")); assertEquals(1, modificationRepository.getModifications(TEST_GROUP_ID, true, false).size()); } @Test void testMultipleModificationsWithError() throws Exception { GroovyScriptInfos groovyScriptInfos = GroovyScriptInfos.builder() - .script("network.getGenerator('idGenerator').targetP=10\nnetwork.getGenerator('idGenerator').targetP=20\n") - .build(); + .script("network.getGenerator('idGenerator').targetP=10\nnetwork.getGenerator('idGenerator').targetP=20\n") + .build(); String groovyScriptInfosJson = getJsonBody(groovyScriptInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); // apply groovy script without error MvcResult mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); @@ -453,11 +464,11 @@ void testMultipleModificationsWithError() throws Exception { groovyScriptInfos.setScript("network.getGenerator('there is no generator').targetP=30\nnetwork.getGenerator('idGenerator').targetP=40\n"); groovyScriptInfosJson = getJsonBody(groovyScriptInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + .andExpect(status().isOk()); assertNotNull(network.getGenerator("idGenerator")); assertEquals(20, network.getGenerator("idGenerator").getTargetP(), 0.1); assertLogMessage("Technical error: java.lang.NullPointerException: Cannot set property 'targetP' on null object", - ERROR_MESSAGE_KEY, reportService); + ERROR_MESSAGE_KEY, reportService); assertEquals(2, modificationRepository.getModifications(TEST_GROUP_ID, true, true).size()); } @@ -465,10 +476,10 @@ void testMultipleModificationsWithError() throws Exception { private List createSomeSwitchModifications(UUID groupId, int number) throws Exception { List openStates = List.of(true, false); EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() - .equipmentType(IdentifiableType.SWITCH) - .equipmentAttributeName("open") - .equipmentId("v1b1") - .build(); + .equipmentType(IdentifiableType.SWITCH) + .equipmentAttributeName("open") + .equipmentId("v1b1") + .build(); MvcResult mvcResult; for (int i = 0; i < number; i++) { switchStatusModificationInfos.setEquipmentAttributeValue(openStates.get(i % 2)); @@ -483,9 +494,9 @@ private List createSomeSwitchModifications(UUID groupId, int private ModificationInfos createDeletionModification(UUID groupId, IdentifiableType equipmentType, String equipmentName) throws Exception { EquipmentDeletionInfos equipmentDeletionInfos = EquipmentDeletionInfos.builder() - .equipmentType(equipmentType) - .equipmentId(equipmentName) - .build(); + .equipmentType(equipmentType) + .equipmentId(equipmentName) + .build(); String bodyJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); MvcResult mvcResult = runRequestAsync(mockMvc, post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + groupId).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -525,7 +536,7 @@ void testCopyModification() throws Exception { put("/v1/groups/" + TEST_GROUP_ID + "?action=XXXXXXX") .content(bodyJson) .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isBadRequest()); + .andExpect(status().isInternalServerError()); // create 1 modification in another group UUID otherGroupId = UUID.randomUUID(); @@ -564,12 +575,16 @@ void testCopyModification() throws Exception { // Duplicate modifications from a group and from a list : illegal operation bodyJson = getJsonBody(duplicateModificationUuidList, NetworkCreation.VARIANT_ID); - mvcResult = mockMvc.perform( + mockMvc.perform( put("/v1/groups/" + otherGroupId + "?action=COPY" + "&originGroupUuid=" + TEST_GROUP_ID) .content(bodyJson) .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isBadRequest()).andReturn(); - assertEquals("DUPLICATION_ARGUMENT_INVALID", mvcResult.getResponse().getContentAsString()); + .andExpect(status().isInternalServerError()) + .andExpect(result -> { + Throwable ex = result.getResolvedException(); + assertNotNull(ex); + assertEquals("Invalid argument for duplication", ex.getMessage()); + }).andReturn(); } /** @@ -608,7 +623,7 @@ void testCopyModificationOld() throws Exception { put(wrongUrl) .content(bodyJson) .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isBadRequest()); + .andExpect(status().isInternalServerError()); // create 1 modification in another group UUID otherGroupId = UUID.randomUUID(); @@ -658,8 +673,8 @@ void testCopyModificationWithUnexistingId() throws Exception { String bodyJson = getJsonBody(duplicateModificationUuidList, NetworkCreation.VARIANT_ID); String url = "/v1/groups/" + TEST_GROUP_ID + "?action=COPY" + "&before=" + modificationUuidList.get(0); mockMvc.perform(put(url).content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); var newModificationList = modificationRepository.getModifications(TEST_GROUP_ID, true, true); List newModificationUuidList = newModificationList.stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); @@ -720,18 +735,18 @@ void createGeneratorWithStartup() throws Exception { void testMoveModificationInSameGroup() throws Exception { // create 2 modifications in a single group List modificationUuidList = createSomeSwitchModifications(TEST_GROUP_ID, 2). - stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); + stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); // swap modifications: move [1] before [0] List movingModificationUuidList = List.of(modificationUuidList.get(1)); String bodyJson = getJsonBody(movingModificationUuidList, NetworkCreation.VARIANT_ID); String url = "/v1/groups/" + TEST_GROUP_ID + "?action=MOVE" + "&before=" + modificationUuidList.get(0); mockMvc.perform(put(url).content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); var newModificationUuidList = modificationRepository.getModifications(TEST_GROUP_ID, true, true). - stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); + stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); assertNotNull(newModificationUuidList); Collections.reverse(newModificationUuidList); // swap => reverse order is expected assertEquals(modificationUuidList, newModificationUuidList); @@ -753,7 +768,8 @@ void testNetworkCompositeModification() throws Exception { ModificationInfos compositeModificationInfos = CompositeModificationInfos.builder() .modifications(modificationList) .build(); - UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); assertThat(modificationRepository.getModificationInfo(compositeModificationUuid)).recursivelyEquals(compositeModificationInfos); // get the modification infos (metadata only) @@ -762,7 +778,8 @@ void testNetworkCompositeModification() throws Exception { // get the composite modification (metadata only) mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid + "/network-modifications")) .andExpect(status().isOk()).andReturn(); - List compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + List compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); assertEquals(modificationsNumber, compositeModificationContent.size()); for (int i = 0; i < modificationUuids.size(); i++) { assertEquals(modificationInfosList.get(i).getMessageValues(), compositeModificationContent.get(i).getMessageValues()); @@ -777,7 +794,8 @@ void testNetworkCompositeModification() throws Exception { // get the composite modification (complete data) mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid + "/network-modifications?onlyMetadata=false")) .andExpect(status().isOk()).andReturn(); - compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); assertEquals("open", ((EquipmentAttributeModificationInfos) compositeModificationContent.get(0)).getEquipmentAttributeName()); assertEquals(Boolean.TRUE, ((EquipmentAttributeModificationInfos) compositeModificationContent.get(0)).getEquipmentAttributeValue()); assertEquals(IdentifiableType.SWITCH, ((EquipmentAttributeModificationInfos) compositeModificationContent.get(0)).getEquipmentType()); @@ -811,19 +829,21 @@ void testNetworkCompositeModificationOld() throws Exception { List modificationUuids = modificationList.stream().map(ModificationInfos::getUuid).toList(); MvcResult mvcResult; mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) - .content(mapper.writeValueAsString(modificationUuids)).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + .content(mapper.writeValueAsString(modificationUuids)).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn(); ModificationInfos compositeModificationInfos = CompositeModificationInfos.builder() - .modifications(modificationList) - .build(); - UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + .modifications(modificationList) + .build(); + UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); assertThat(modificationRepository.getModificationInfo(compositeModificationUuid)).recursivelyEquals(compositeModificationInfos); assertEquals(modificationsNumber, modificationRepository.getModifications(TEST_GROUP_ID, true, true).size()); // get the composite modification (metadata only) mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid + "/network-modifications")) - .andExpect(status().isOk()).andReturn(); - List compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + .andExpect(status().isOk()).andReturn(); + List compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); assertEquals(modificationsNumber, compositeModificationContent.size()); assertNotNull(compositeModificationContent.get(0).getMessageType()); assertNotNull(compositeModificationContent.get(0).getMessageValues()); @@ -835,7 +855,8 @@ void testNetworkCompositeModificationOld() throws Exception { // get the composite modification (complete data) mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid + "/network-modifications?onlyMetadata=false")) .andExpect(status().isOk()).andReturn(); - compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); assertEquals("open", ((EquipmentAttributeModificationInfos) compositeModificationContent.get(0)).getEquipmentAttributeName()); assertEquals(Boolean.TRUE, ((EquipmentAttributeModificationInfos) compositeModificationContent.get(0)).getEquipmentAttributeValue()); assertEquals(IdentifiableType.SWITCH, ((EquipmentAttributeModificationInfos) compositeModificationContent.get(0)).getEquipmentType()); @@ -862,9 +883,9 @@ void testMoveModificationBetweenTwoGroups() throws Exception { // create 4 modifications in destination group (3 switch updates + 1 load deletion in s3) List destinationModificationUuidList = ListUtils.union( - createSomeSwitchModifications(TEST_GROUP_ID, 3).stream().map(ModificationInfos::getUuid).toList(), - List.of(createDeletionModification(TEST_GROUP_ID, IdentifiableType.LOAD, "v5load").getUuid()) - ); + createSomeSwitchModifications(TEST_GROUP_ID, 3).stream().map(ModificationInfos::getUuid).toList(), + List.of(createDeletionModification(TEST_GROUP_ID, IdentifiableType.LOAD, "v5load").getUuid()) + ); // create 1 modification in origin group (1 load deletion in s1) UUID originSingleModification = createDeletionModification(TEST_GROUP2_ID, IdentifiableType.LOAD, "v1load").getUuid(); @@ -875,7 +896,8 @@ void testMoveModificationBetweenTwoGroups() throws Exception { MvcResult mvcResult = runRequestAsync(mockMvc, put(url).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); // incremental build: deletion impacts expected, all related to the moved load deletion (dealing with "s1" substation) - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().get(0).isPresent()); networkModificationsResult.modificationResults().get(0).get().getNetworkImpacts().forEach(i -> { @@ -887,7 +909,7 @@ void testMoveModificationBetweenTwoGroups() throws Exception { // check destination var newDestinationModificationUuidList = modificationRepository.getModifications(TEST_GROUP_ID, true, true). - stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); + stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); assertNotNull(newDestinationModificationUuidList); // Expect: existing list + the moved one List expectedDestinationModificationUuidList = ListUtils.union(destinationModificationUuidList, movingModificationUuidList); @@ -895,7 +917,7 @@ void testMoveModificationBetweenTwoGroups() throws Exception { // check origin var newOriginModificationUuidList = modificationRepository.getModifications(TEST_GROUP2_ID, true, true). - stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); + stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); assertNotNull(newOriginModificationUuidList); // Expect: empty assertEquals(List.of(), newOriginModificationUuidList); @@ -905,7 +927,7 @@ void testMoveModificationBetweenTwoGroups() throws Exception { void testMoveModificationWithUnexistingId() throws Exception { // create 2 modifications List modificationUuidList = createSomeSwitchModifications(TEST_GROUP_ID, 2). - stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); + stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); // try to move an unexisting modification before [0]: no error, no change List movingModificationUuidList = List.of(UUID.randomUUID()); @@ -913,11 +935,11 @@ void testMoveModificationWithUnexistingId() throws Exception { String url = "/v1/groups/" + TEST_GROUP_ID + "?action=MOVE" + "&originGroupUuid=" + TEST_GROUP_ID + "&before=" + modificationUuidList.get(0); mockMvc.perform(put(url).content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); var newModificationUuidList = modificationRepository.getModifications(TEST_GROUP_ID, true, true). - stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); + stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); assertNotNull(newModificationUuidList); // nothing has changed in modification group assertEquals(modificationUuidList, newModificationUuidList); @@ -938,25 +960,25 @@ void testDuplicateModificationGroup() throws Exception { CurrentLimitsInfos c2 = new CurrentLimitsInfos(); c2.setPermanentLimit(200.0); LineCreationInfos lineCreationInfos = LineCreationInfos.builder() - .equipmentId("idLine1") - .equipmentName("nameLine1") - .r(100.0) - .x(100.0) - .g1(10.0) - .b1(10.0) - .g2(20.0) - .b2(20.0) - .voltageLevelId1("v1") - .busOrBusbarSectionId1("bus1") - .voltageLevelId2("v2") - .busOrBusbarSectionId2("bus2") - .operationalLimitsGroups( - List.of( - OperationalLimitsGroupInfos.builder().id("olg1").currentLimits(c1).applicability(SIDE1).build(), - OperationalLimitsGroupInfos.builder().id("olg1").currentLimits(c2).applicability(SIDE2).build() - ) + .equipmentId("idLine1") + .equipmentName("nameLine1") + .r(100.0) + .x(100.0) + .g1(10.0) + .b1(10.0) + .g2(20.0) + .b2(20.0) + .voltageLevelId1("v1") + .busOrBusbarSectionId1("bus1") + .voltageLevelId2("v2") + .busOrBusbarSectionId2("bus2") + .operationalLimitsGroups( + List.of( + OperationalLimitsGroupInfos.builder().id("olg1").currentLimits(c1).applicability(SIDE1).build(), + OperationalLimitsGroupInfos.builder().id("olg1").currentLimits(c2).applicability(SIDE2).build() ) - .build(); + ) + .build(); bodyJson = getJsonBody(lineCreationInfos, TEST_NETWORK_BUS_BREAKER_ID, null); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); @@ -968,14 +990,14 @@ void testDuplicateModificationGroup() throws Exception { //create a lineAttached LineCreationInfos attachmentLine = LineCreationInfos.builder() - .equipmentId("attachmentLine") - .r(50.6) - .x(25.3) - .build(); + .equipmentId("attachmentLine") + .r(50.6) + .x(25.3) + .build(); LineAttachToVoltageLevelInfos lineAttachToVL = new LineAttachToVoltageLevelInfos("line3", - 10.0, "AttPointId", "attPointName", null, null, "v4", - "1.A", attachmentLine, "nl1", "NewLine1", "nl2", "NewLine2"); + 10.0, "AttPointId", "attPointName", null, null, "v4", + "1.A", attachmentLine, "nl1", "NewLine1", "nl2", "NewLine2"); String bodyJson2 = getJsonBody(lineAttachToVL, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -984,7 +1006,7 @@ void testDuplicateModificationGroup() throws Exception { //create a lineSplit LineSplitWithVoltageLevelInfos lineSplitWoVL = new LineSplitWithVoltageLevelInfos("line1", 10.0, null, "v4", "1.A", - "nl11", "NewLine11", "nl12", "NewLine12"); + "nl11", "NewLine11", "nl12", "NewLine12"); bodyJson2 = getJsonBody(lineSplitWoVL, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -1002,13 +1024,13 @@ void testDuplicateModificationGroup() throws Exception { String uuidString = modifications.get(0).getUuid().toString(); mockMvc.perform(put(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString) - .queryParam("stashed", "true")) - .andExpect(status().isOk()); + .queryParam("groupUuid", TEST_GROUP_ID.toString()) + .queryParam("uuids", uuidString) + .queryParam("stashed", "true")) + .andExpect(status().isOk()); List stashedModifications = modificationRepository.getModificationsMetadata(TEST_GROUP_ID, true); List modificationAfterStash = modificationRepository.getModificationsMetadata(TEST_GROUP_ID, false) - .stream().filter(modificationInfos -> !modificationInfos.getStashed()).toList(); + .stream().filter(modificationInfos -> !modificationInfos.getStashed()).toList(); assertEquals(1, stashedModifications.size()); assertEquals(4, modificationAfterStash.size()); @@ -1037,7 +1059,7 @@ void replaceTeePointByVoltageLevelOnLineDuplicateModificationGroupTest() throws UUID newGroupUuid = UUID.randomUUID(); String copyGroupUriString = "/v1/groups?groupUuid=" + newGroupUuid + "&duplicateFrom=" + TEST_GROUP_ID + "&reportUuid=" + UUID.randomUUID(); mockMvc.perform(post(copyGroupUriString)) - .andExpect(status().isOk()); + .andExpect(status().isOk()); testNetworkModificationsCount(newGroupUuid, 1); } @@ -1046,16 +1068,16 @@ void replaceTeePointByVoltageLevelOnLineDuplicateModificationGroupTest() throws void testGroupDuplication() throws Exception { // create new load in voltage level with node/breaker topology (in voltage level "v2" and busbar section "1B") LoadCreationInfos loadCreationInfos = LoadCreationInfos.builder() - .equipmentId("idLoad1") - .equipmentName("nameLoad1") - .voltageLevelId("v2") - .busOrBusbarSectionId("1B") - .loadType(LoadType.AUXILIARY) - .p0(100.0) - .q0(60.0) - .connectionDirection(ConnectablePosition.Direction.BOTTOM) - .connectionName("bottom") - .build(); + .equipmentId("idLoad1") + .equipmentName("nameLoad1") + .voltageLevelId("v2") + .busOrBusbarSectionId("1B") + .loadType(LoadType.AUXILIARY) + .p0(100.0) + .q0(60.0) + .connectionDirection(ConnectablePosition.Direction.BOTTOM) + .connectionName("bottom") + .build(); String loadCreationInfosJson = getJsonBody(loadCreationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); MvcResult mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(loadCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -1081,9 +1103,9 @@ void testTombstonedEquipmentInfos() throws Exception { assertTrue(tombstonedEquipmentInfosRepository.findAllByNetworkUuidAndVariantId(TEST_NETWORK_ID_2, VariantManagerConstants.INITIAL_VARIANT_ID).isEmpty()); EquipmentDeletionInfos equipmentDeletionInfos = EquipmentDeletionInfos.builder() - .equipmentType(IdentifiableType.LOAD) - .equipmentId("v1load") - .build(); + .equipmentType(IdentifiableType.LOAD) + .equipmentId("v1load") + .build(); String equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); // delete load @@ -1099,7 +1121,8 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentId("v3load"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VARIANT_NOT_EXISTING_ID); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - Optional networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + Optional networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); assertTrue(networkModificationsResult.isPresent()); assertFalse(networkModificationsResult.get().modificationResults().isEmpty()); assertEquals(1, networkModificationsResult.get().modificationResults().size()); @@ -1361,7 +1384,8 @@ private void testNetworkModificationsCount(UUID groupUuid, int actualSize) throw mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=true", groupUuid).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List modificationsTestGroupId = mapper.readValue(resultAsString, new TypeReference<>() { }); + List modificationsTestGroupId = mapper.readValue(resultAsString, new TypeReference<>() { + }); assertEquals(actualSize, modificationsTestGroupId.size()); } @@ -1413,11 +1437,12 @@ void testGetLineTypesCatalog() throws Exception { // Check if the catalog is empty mvcResult = mockMvc - .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List emptyLineTypes = mapper.readValue(resultAsString, new TypeReference<>() { }); + List emptyLineTypes = mapper.readValue(resultAsString, new TypeReference<>() { + }); assertEquals(0, emptyLineTypes.size()); // Create the catalog with some line types @@ -1427,12 +1452,13 @@ void testGetLineTypesCatalog() throws Exception { // Check if the catalog is complete avoiding the duplicate entry mvcResult = mockMvc - .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) - .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List lineTypes = mapper.readValue(resultAsString, new TypeReference<>() { }); + List lineTypes = mapper.readValue(resultAsString, new TypeReference<>() { + }); assertEquals(10, lineTypes.size()); // Check if catalog is completely updated @@ -1441,24 +1467,26 @@ void testGetLineTypesCatalog() throws Exception { .andExpect(status().isOk()); mvcResult = mockMvc - .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) - .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List lineTypes2 = mapper.readValue(resultAsString, new TypeReference<>() { }); + List lineTypes2 = mapper.readValue(resultAsString, new TypeReference<>() { + }); assertEquals(2, lineTypes2.size()); mockMvc.perform(delete(URI_LINE_CATALOG)) - .andExpect(status().isOk()); + .andExpect(status().isOk()); // Check if the catalog is empty mvcResult = mockMvc - .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - emptyLineTypes = mapper.readValue(resultAsString, new TypeReference<>() { }); + emptyLineTypes = mapper.readValue(resultAsString, new TypeReference<>() { + }); assertEquals(0, emptyLineTypes.size()); } @@ -1473,7 +1501,8 @@ void testGetLineTypeWithLimitsCatalog() throws Exception { .andExpect(status().isOk()) .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List emptyLineTypes = mapper.readValue(resultAsString, new TypeReference<>() { }); + List emptyLineTypes = mapper.readValue(resultAsString, new TypeReference<>() { + }); assertEquals(0, emptyLineTypes.size()); // Create the catalog with some line types @@ -1486,7 +1515,8 @@ void testGetLineTypeWithLimitsCatalog() throws Exception { .andExpect(status().isOk()) .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List lineTypes = mapper.readValue(resultAsString, new TypeReference<>() { }); + List lineTypes = mapper.readValue(resultAsString, new TypeReference<>() { + }); assertEquals(2, lineTypes.size()); // getting the whole catalog does not load the limits assertNull(lineTypes.get(0).getLimitsForLineType()); @@ -1496,7 +1526,8 @@ void testGetLineTypeWithLimitsCatalog() throws Exception { .andExpect(status().isOk()) .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - LineTypeInfos selectedLineType = mapper.readValue(resultAsString, new TypeReference<>() { }); + LineTypeInfos selectedLineType = mapper.readValue(resultAsString, new TypeReference<>() { + }); assertEquals(2, selectedLineType.getLimitsForLineType().size()); assertEquals("LimitSet1", selectedLineType.getLimitsForLineType().getFirst().getLimitSetName()); assertEquals(10.0, selectedLineType.getLimitsForLineType().getFirst().getPermanentLimit()); @@ -1519,11 +1550,11 @@ void testPostLineTypeWithLimitsCatalogError() throws Exception { .file(createMockMultipartFile(NOT_EXISTING_JSON_FILE)); mockMvc.perform(mockMultipartHttpServletRequestBuilder) - .andExpect(result -> { - assertNotNull(result.getResolvedException()); - assertEquals("java.io.EOFException", - result.getResolvedException().getMessage()); - }); + .andExpect(result -> { + assertNotNull(result.getResolvedException()); + assertEquals("java.io.EOFException", + result.getResolvedException().getMessage()); + }); } @Test @@ -1612,9 +1643,10 @@ void testCreateVoltageInitModification() throws Exception { // Get the modifications MvcResult mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=false", groupUuid)).andExpectAll( status().isOk(), content().contentType(MediaType.APPLICATION_JSON)) - .andReturn(); + .andReturn(); - List modificationsInfos2 = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + List modificationsInfos2 = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); assertEquals(1, modificationsInfos2.size()); assertThat(modificationsInfos2.get(0)).recursivelyEquals(modificationsInfos1); } @@ -1623,12 +1655,12 @@ void testCreateVoltageInitModification() throws Exception { void testDeleteStashedNetworkModifications() throws Exception { MvcResult mvcResult; EquipmentAttributeModificationInfos loadModificationInfos = EquipmentAttributeModificationInfos.builder() - .equipmentType(IdentifiableType.LOAD) - .equipmentAttributeName("open") - .equipmentAttributeValue(true) - .equipmentAttributeName("v1load") - .equipmentId("v1load") - .build(); + .equipmentType(IdentifiableType.LOAD) + .equipmentAttributeName("open") + .equipmentAttributeValue(true) + .equipmentAttributeName("v1load") + .equipmentId("v1load") + .build(); String loadModificationInfosJson = getJsonBody(loadModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(loadModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -1637,10 +1669,10 @@ void testDeleteStashedNetworkModifications() throws Exception { assertEquals(1, modifications.size()); String uuidString = modifications.get(0).getUuid().toString(); mockMvc.perform(put(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString) - .queryParam("stashed", "true")) - .andExpect(status().isOk()); + .queryParam("groupUuid", TEST_GROUP_ID.toString()) + .queryParam("uuids", uuidString) + .queryParam("stashed", "true")) + .andExpect(status().isOk()); assertEquals(1, modificationRepository.getModifications(TEST_GROUP_ID, true, true, true).size()); mockMvc.perform(delete("/v1/groups/" + TEST_GROUP_ID + "/stashed-modifications").queryParam("errorOnGroupNotFound", "false")).andExpect(status().isOk()); assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, true, true, true).size()); @@ -1676,16 +1708,18 @@ void testDuplicateCompositeModification() throws Exception { mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) .content(mapper.writeValueAsString(modificationUuidList)).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); // Duplicate it without group ownership mvcResult = mockMvc.perform( - post(URI_COMPOSITE_NETWORK_MODIF_BASE + "/duplication") + post(URI_COMPOSITE_NETWORK_MODIF_BASE + "/duplication") .content(objectWriter.writeValueAsString(List.of(compositeModificationUuid))) .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + .andExpect(status().isOk()).andReturn(); - Map returnedMap = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + Map returnedMap = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); assertEquals(1, returnedMap.size()); Map.Entry returnedIds = returnedMap.entrySet().stream().findFirst().get(); UUID returnedSourceId = returnedIds.getKey(); @@ -1704,8 +1738,8 @@ void testDuplicateCompositeModification() throws Exception { // now delete the duplicate modification mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) - .queryParam("uuids", returnedNewId.toString())) - .andExpect(status().isOk()); + .queryParam("uuids", returnedNewId.toString())) + .andExpect(status().isOk()); // source group has not changed groupModifications = modificationRepository.getModifications(TEST_GROUP_ID, true, true, false); @@ -1713,7 +1747,7 @@ void testDuplicateCompositeModification() throws Exception { assertEquals(modificationUuidList.get(0), groupModifications.get(0).getUuid()); // duplicate has been deleted assertEquals("Modification not found: " + returnedNewId, assertThrows(RuntimeException.class, () - -> modificationRepository.getModificationInfo(returnedNewId)).getMessage()); + -> modificationRepository.getModificationInfo(returnedNewId)).getMessage()); } @Test @@ -1727,8 +1761,9 @@ void testUpdateNetworkCompositeModification() throws Exception { List modificationUuids = modificationList.stream().map(ModificationInfos::getUuid).toList(); MvcResult mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) .content(mapper.writeValueAsString(modificationUuids)).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); - UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + .andExpect(status().isOk()).andReturn(); + UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); // Create new modifications to use in the update int newModificationsNumber = 2; @@ -1738,12 +1773,13 @@ void testUpdateNetworkCompositeModification() throws Exception { // Update the composite modification with the new modifications mockMvc.perform(put(URI_COMPOSITE_NETWORK_MODIF_BASE + "/" + compositeModificationUuid) .content(mapper.writeValueAsString(newModificationUuids)).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + .andExpect(status().isOk()); // Get the composite modification content and verify it has been updated mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid + "/network-modifications?onlyMetadata=false")) - .andExpect(status().isOk()).andReturn(); - List updatedCompositeContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + .andExpect(status().isOk()).andReturn(); + List updatedCompositeContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); assertEquals(newModificationsNumber, updatedCompositeContent.size()); } @@ -1756,7 +1792,7 @@ void testUpdateNetworkCompositeModificationWithNonexistentUuid() throws Exceptio mockMvc.perform(put(URI_COMPOSITE_NETWORK_MODIF_BASE + "/" + nonExistentUuid) .content(mapper.writeValueAsString(modificationUuids)).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isNotFound()); + .andExpect(status().isInternalServerError()); } @Test @@ -1767,18 +1803,20 @@ void testUpdateNetworkCompositeModificationWithEmptyList() throws Exception { MvcResult mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) .content(mapper.writeValueAsString(modificationUuids)).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); - UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + .andExpect(status().isOk()).andReturn(); + UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); // Update the composite with an empty list of modifications mockMvc.perform(put(URI_COMPOSITE_NETWORK_MODIF_BASE + "/" + compositeModificationUuid) .content(mapper.writeValueAsString(Collections.emptyList())).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + .andExpect(status().isOk()); // Verify that the composite now contains no modifications mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid + "/network-modifications?onlyMetadata=false")) - .andExpect(status().isOk()).andReturn(); - List updatedCompositeContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + .andExpect(status().isOk()).andReturn(); + List updatedCompositeContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); assertTrue(updatedCompositeContent.isEmpty()); } @@ -1790,9 +1828,10 @@ void testMetadata() throws Exception { UUID switchModificationId = modificationList.get(0).getUuid(); MvcResult mvcResult = mockMvc.perform(get(URI_NETWORK_MODIF_BASE + "/metadata?ids={id}", switchModificationId) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); - List metadata = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn(); + List metadata = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + }); assertEquals(1, metadata.size()); assertEquals(switchModificationId, metadata.get(0).getId()); assertEquals(EQUIPMENT_ATTRIBUTE_MODIFICATION, metadata.get(0).getType()); @@ -1806,11 +1845,13 @@ void testStandaloneDeletionError() throws Exception { // Try to delete this modification without its group: not allowed mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) - .queryParam("uuids", switchModificationId.toString())) - .andExpectAll( - status().is5xxServerError(), - content().string(new NetworkModificationServerRunException(String.format("%s is owned by group %s", switchModificationId, TEST_GROUP_ID)).getMessage()) - ); + .queryParam("uuids", switchModificationId.toString())) + .andExpect(status().isInternalServerError()) + .andExpect(result -> { + Throwable ex = result.getResolvedException(); + assertNotNull(ex); + assertEquals(String.format("Modification deletion error: %s is owned by group %s", switchModificationId, TEST_GROUP_ID), ex.getMessage()); + }); } @Test @@ -1823,13 +1864,13 @@ void testVerifyModifications() throws Exception { // try to verify unexisting modification mockMvc.perform(get("/v1/groups/{groupId}/network-modifications/verify", TEST_GROUP_ID) - .param("uuids", UUID.randomUUID().toString())) - .andExpect(status().isNotFound()); + .param("uuids", UUID.randomUUID().toString())) + .andExpect(status().isInternalServerError()); // try to verify invalid modification mockMvc.perform(get("/v1/groups/{groupId}/network-modifications/verify", TEST_GROUP2_ID) .param("uuids", switchModificationId.toString())) - .andExpect(status().isNotFound()); + .andExpect(status().isInternalServerError()); // try to verify valid modification mockMvc.perform(get("/v1/groups/{groupId}/network-modifications/verify", TEST_GROUP_ID) @@ -1842,9 +1883,9 @@ void testSearchModificationInfos() throws Exception { // Substation Modification ID : s1 assertNotNull(network.getSubstation("s1")); SubstationModificationInfos substationModificationInfos = SubstationModificationInfos.builder() - .equipmentId("s1") - .equipmentName(AttributeModification.toAttributeModification("newSubstationName", OperationType.SET)) - .build(); + .equipmentId("s1") + .equipmentName(AttributeModification.toAttributeModification("newSubstationName", OperationType.SET)) + .build(); String substationModificationInfosJson = getJsonBody(substationModificationInfos, TEST_NETWORK_ID, null); MvcResult mvcResult1 = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(substationModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult1); @@ -1858,9 +1899,9 @@ void testSearchModificationInfos() throws Exception { // Load deletion ID : v5load EquipmentDeletionInfos equipmentDeletionInfos = EquipmentDeletionInfos.builder() - .equipmentType(IdentifiableType.LOAD) - .equipmentId("v5load") - .build(); + .equipmentType(IdentifiableType.LOAD) + .equipmentId("v5load") + .build(); String equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, null); runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); MvcResult mvcModificationResult; @@ -1869,15 +1910,15 @@ void testSearchModificationInfos() throws Exception { // search modifications by equipment id containing userInput "id" mvcModificationResult = mockMvc.perform(get(URI_NETWORK_MODIF_BASE + "/indexation-infos?networkUuid={networkUuid}&userInput={userInput}", - TEST_NETWORK_ID, "id") - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + TEST_NETWORK_ID, "id") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); networkModificationsResult = mapper.readValue( - mvcModificationResult.getResponse().getContentAsString(), - new TypeReference<>() { - }); + mvcModificationResult.getResponse().getContentAsString(), + new TypeReference<>() { + }); assertEquals(1, networkModificationsResult.size()); modificationsSearchResult = networkModificationsResult.get(TEST_GROUP_ID); assertEquals(1, modificationsSearchResult.size()); @@ -1887,15 +1928,15 @@ void testSearchModificationInfos() throws Exception { // search modifications by equipment id containing userInput "v" mvcModificationResult = mockMvc.perform(get(URI_NETWORK_MODIF_BASE + "/indexation-infos?networkUuid={networkUuid}&userInput={userInput}", - TEST_NETWORK_ID, "load") - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + TEST_NETWORK_ID, "load") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); networkModificationsResult = mapper.readValue( - mvcModificationResult.getResponse().getContentAsString(), - new TypeReference<>() { - }); + mvcModificationResult.getResponse().getContentAsString(), + new TypeReference<>() { + }); assertEquals(1, networkModificationsResult.size()); modificationsSearchResult = networkModificationsResult.get(TEST_GROUP_ID); assertEquals("EQUIPMENT_DELETION", modificationsSearchResult.getFirst().getMessageType()); @@ -1903,15 +1944,15 @@ void testSearchModificationInfos() throws Exception { // search modifications by equipment id containing userInput "s1" mvcModificationResult = mockMvc.perform(get(URI_NETWORK_MODIF_BASE + "/indexation-infos?networkUuid={networkUuid}&userInput={userInput}", - TEST_NETWORK_ID, "s1") - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + TEST_NETWORK_ID, "s1") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); networkModificationsResult = mapper.readValue( - mvcModificationResult.getResponse().getContentAsString(), - new TypeReference<>() { - }); + mvcModificationResult.getResponse().getContentAsString(), + new TypeReference<>() { + }); assertEquals(1, networkModificationsResult.size()); modificationsSearchResult = networkModificationsResult.get(TEST_GROUP_ID); assertEquals("SUBSTATION_MODIFICATION", modificationsSearchResult.getFirst().getMessageType()); @@ -1919,14 +1960,14 @@ void testSearchModificationInfos() throws Exception { // search modifications by non existing equipment Id "notFound" mvcModificationResult = mockMvc.perform(get(URI_NETWORK_MODIF_BASE + "/indexation-infos?networkUuid={networkUuid}&userInput={userInput}", - TEST_NETWORK_ID, "notFound") - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + TEST_NETWORK_ID, "notFound") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); networkModificationsResult = mapper.readValue( - mvcModificationResult.getResponse().getContentAsString(), - new TypeReference<>() { - }); + mvcModificationResult.getResponse().getContentAsString(), + new TypeReference<>() { + }); assertEquals(0, networkModificationsResult.size()); } } diff --git a/src/test/java/org/gridsuite/modification/server/ServerNameProvider.java b/src/test/java/org/gridsuite/modification/server/ServerNameProvider.java new file mode 100644 index 000000000..1b476be79 --- /dev/null +++ b/src/test/java/org/gridsuite/modification/server/ServerNameProvider.java @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package org.gridsuite.modification.server; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * @author Mohamed Ben-rejeb {@literal } + */ +@Component +public class ServerNameProvider implements com.powsybl.ws.commons.error.ServerNameProvider { + + private final String name; + + public ServerNameProvider(@Value("${spring.application.name:network-modification-server}") String name) { + this.name = name; + } + + @Override + public String serverName() { + return name; + } +} diff --git a/src/test/java/org/gridsuite/modification/server/modifications/AbstractNetworkModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/AbstractNetworkModificationTest.java index 2a251dfa0..02de8b74f 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/AbstractNetworkModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/AbstractNetworkModificationTest.java @@ -16,6 +16,7 @@ import com.powsybl.network.store.client.NetworkStoreService; import com.powsybl.network.store.client.PreloadingStrategy; import com.powsybl.network.store.iidm.impl.NetworkImpl; +import com.powsybl.ws.commons.error.BaseExceptionHandler; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.dto.NetworkModificationResult; import org.gridsuite.modification.server.dto.NetworkModificationsResult; @@ -35,6 +36,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; import org.springframework.http.MediaType; import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.MockMvc; @@ -64,6 +66,7 @@ * */ @SpringBootTest +@Import(BaseExceptionHandler.class) @DisableElasticsearch @AutoConfigureMockMvc public abstract class AbstractNetworkModificationTest { diff --git a/src/test/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModificationTest.java index 32f16a18f..1bde868e7 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModificationTest.java @@ -30,7 +30,6 @@ import static org.junit.jupiter.api.Assertions.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -64,7 +63,7 @@ void testEquipmentAttributeModificationInfos() throws Exception { // switch opening ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); + .andExpect(request().asyncStarted()); mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); @@ -73,7 +72,7 @@ void testEquipmentAttributeModificationInfos() throws Exception { switchStatusModificationInfos.setEquipmentId("break1Variant"); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, NetworkCreation.VARIANT_ID); mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); + .andExpect(request().asyncStarted()); mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1Variant")); @@ -99,18 +98,18 @@ private void switchModifications(String extraParams, String switchId1, String sw switchStatusModificationInfos.setEquipmentId(switchNotFoundId); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); + .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + .andExpect(status().isOk()); assertLogMessage("Equipment not found: " + switchNotFoundId, - ERROR_MESSAGE_KEY, reportService); + ERROR_MESSAGE_KEY, reportService); // switch closing when already closed switchStatusModificationInfos.setEquipmentId(switchId1); switchStatusModificationInfos.setEquipmentAttributeValue(false); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); + .andExpect(request().asyncStarted()); mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); testEmptyImpacts(mapper, mvcResult.getResponse().getContentAsString()); @@ -118,7 +117,7 @@ private void switchModifications(String extraParams, String switchId1, String sw switchStatusModificationInfos.setEquipmentAttributeValue(true); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); + .andExpect(request().asyncStarted()); mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), substationsIds); @@ -127,7 +126,7 @@ private void switchModifications(String extraParams, String switchId1, String sw switchStatusModificationInfos.setEquipmentAttributeValue(false); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); + .andExpect(request().asyncStarted()); mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), substationsIds); @@ -136,7 +135,7 @@ private void switchModifications(String extraParams, String switchId1, String sw switchStatusModificationInfos.setEquipmentAttributeValue(true); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); + .andExpect(request().asyncStarted()); mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), otherSubstationsIds); @@ -155,10 +154,13 @@ void testWithErrors() throws Exception { .build(); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, null); + mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpectAll( - status().isBadRequest(), - content().string("For switch status, the attribute name is only 'open'")); + .andExpect(result -> { + Throwable ex = result.getResolvedException(); + assertNotNull(ex); + assertEquals("For switch status, the attribute name is only 'open'", ex.getMessage()); + }); // bad equipment attribute value switchStatusModificationInfos.setEquipmentAttributeName("open"); @@ -166,9 +168,12 @@ void testWithErrors() throws Exception { switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpectAll( - status().isBadRequest(), - content().string("For switch status, the attribute values are only " + Set.of(true, false))); + .andExpect(status().isInternalServerError()) + .andExpect(result -> { + Throwable ex = result.getResolvedException(); + assertNotNull(ex); + assertEquals("For switch status, the attribute values are only " + Set.of(true, false), ex.getMessage()); + }); } @Override @@ -211,7 +216,8 @@ protected void assertAfterNetworkModificationDeletion() { @Override protected void testCreationModificationMessage(ModificationInfos modificationInfos) throws Exception { assertEquals("EQUIPMENT_ATTRIBUTE_MODIFICATION", modificationInfos.getMessageType()); - Map createdValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { }); + Map createdValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { + }); assertEquals("open", createdValues.get("equipmentAttributeName")); assertEquals("v1b1", createdValues.get("equipmentId")); assertEquals("true", createdValues.get("equipmentAttributeValue")); @@ -220,7 +226,8 @@ protected void testCreationModificationMessage(ModificationInfos modificationInf @Override protected void testUpdateModificationMessage(ModificationInfos modificationInfos) throws Exception { assertEquals("EQUIPMENT_ATTRIBUTE_MODIFICATION", modificationInfos.getMessageType()); - Map createdValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { }); + Map createdValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { + }); assertEquals("open", createdValues.get("equipmentAttributeName")); assertEquals("v1b1Edited", createdValues.get("equipmentId")); assertEquals("false", createdValues.get("equipmentAttributeValue")); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineAttachToVoltageLevelTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineAttachToVoltageLevelTest.java index 183eff81d..d0f064d90 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineAttachToVoltageLevelTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineAttachToVoltageLevelTest.java @@ -25,7 +25,6 @@ import static org.junit.jupiter.api.Assertions.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -150,10 +149,12 @@ void testCreateWithErrors() throws Exception { lineMissingLine.setAttachmentLine(null); // we omit a mandatory input data String lineMissingLineJson = getJsonBody(lineMissingLine, null); mockMvc.perform(post(getNetworkModificationUri()).content(lineMissingLineJson).contentType(MediaType.APPLICATION_JSON)) - .andExpectAll( - status().is4xxClientError(), - content().string("Missing required attachment line description") - ); + .andExpect(status().isInternalServerError()) + .andExpect(result -> { + Throwable ex = result.getResolvedException(); + assertNotNull(ex); + assertEquals("Failed to map DTO to Entity: Missing required attachment line description", ex.getMessage()); + }); testNetworkModificationsCount(getGroupId(), 1); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java index d7b1367e1..db95c528e 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java @@ -105,7 +105,7 @@ void testCreateWithErrors() throws Exception { lineCreationInfosJson = getJsonBody(lineCreationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(lineCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage(":line already exists: line2", + assertLogMessage("line already exists: line2", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationLockoutLineTest.java b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationLockoutLineTest.java index dc9e78039..4d8deead0 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationLockoutLineTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationLockoutLineTest.java @@ -33,7 +33,6 @@ import static org.junit.jupiter.api.Assertions.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -57,37 +56,37 @@ private Line createLineAndSwitches(SwitchKind switchKind, boolean isFictitious) createSwitch(getNetwork().getVoltageLevel("vl2"), "br22", "br22", switchKind, false, false, isFictitious, 0, 3); return getNetwork().newLine() - .setId("line1") - .setName("line1") - .setVoltageLevel1("vl1") - .setVoltageLevel2("vl2") - .setR(0.1) - .setX(10.0) - .setG1(0.0) - .setG2(0.0) - .setB1(0.0) - .setB2(0.0) - .setNode1(3) - .setNode2(3) - .add(); + .setId("line1") + .setName("line1") + .setVoltageLevel1("vl1") + .setVoltageLevel2("vl2") + .setR(0.1) + .setX(10.0) + .setG1(0.0) + .setG2(0.0) + .setB1(0.0) + .setB2(0.0) + .setNode1(3) + .setNode2(3) + .add(); } @Override protected ModificationInfos buildModification() { return OperatingStatusModificationInfos.builder() - .stashed(false) - .equipmentId(TARGET_LINE_ID) - .energizedVoltageLevelId("energizedVoltageLevelId") - .action(OperatingStatusModificationInfos.ActionType.LOCKOUT).build(); + .stashed(false) + .equipmentId(TARGET_LINE_ID) + .energizedVoltageLevelId("energizedVoltageLevelId") + .action(OperatingStatusModificationInfos.ActionType.LOCKOUT).build(); } @Override protected ModificationInfos buildModificationUpdate() { return OperatingStatusModificationInfos.builder() - .stashed(false) - .equipmentId(UPDATE_BRANCH_ID) - .energizedVoltageLevelId("energizedVoltageLevelId") - .action(OperatingStatusModificationInfos.ActionType.SWITCH_ON).build(); + .stashed(false) + .equipmentId(UPDATE_BRANCH_ID) + .energizedVoltageLevelId("energizedVoltageLevelId") + .action(OperatingStatusModificationInfos.ActionType.SWITCH_ON).build(); } @Override @@ -103,9 +102,9 @@ private void testLockoutLine(String lineID) throws Exception { assertNull(getNetwork().getLine(lineID).getExtension(OperatingStatus.class)); ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); + .andExpect(request().asyncStarted()); mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + .andExpect(status().isOk()); TestUtils.assertOperatingStatus(getNetwork(), lineID, TARGET_BRANCH_STATUS); } @@ -168,28 +167,31 @@ void testCreateWithErrors() throws Exception { .andExpect(status().isOk()); assertNull(getNetwork().getLine("notFound")); assertLogMessage("Equipment not found: notFound", - ERROR_MESSAGE_KEY, reportService); + ERROR_MESSAGE_KEY, reportService); // modification action empty modificationInfos.setEquipmentId("line2"); modificationInfos.setAction(null); modificationJson = getJsonBody(modificationInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpectAll( - status().isBadRequest(), - content().string("OPERATING_ACTION_TYPE_EMPTY") - ); + .andExpect(result -> { + Throwable ex = result.getResolvedException(); + assertNotNull(ex); + assertEquals("Empty operating action type", ex.getMessage()); + }); + // modification action not existing // note: should never happen in real mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson.replace("LOCKOUT", "INVALID_ACTION")).contentType(MediaType.APPLICATION_JSON)) - .andExpect( - status().is4xxClientError()); + .andExpect( + status().isInternalServerError()); } @Override protected void testCreationModificationMessage(ModificationInfos modificationInfos) throws Exception { assertEquals("OPERATING_STATUS_MODIFICATION", modificationInfos.getMessageType()); - Map createdValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { }); + Map createdValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { + }); assertEquals("energizedVoltageLevelId", createdValues.get("energizedVoltageLevelId")); assertEquals("LOCKOUT", createdValues.get("action")); assertEquals("line2", createdValues.get("equipmentId")); @@ -198,7 +200,8 @@ protected void testCreationModificationMessage(ModificationInfos modificationInf @Override protected void testUpdateModificationMessage(ModificationInfos modificationInfos) throws Exception { assertEquals("OPERATING_STATUS_MODIFICATION", modificationInfos.getMessageType()); - Map updatedValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { }); + Map updatedValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { + }); assertEquals("energizedVoltageLevelId", updatedValues.get("energizedVoltageLevelId")); assertEquals("SWITCH_ON", updatedValues.get("action")); assertEquals("line1", updatedValues.get("equipmentId")); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelCreationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelCreationTest.java index c44c49626..0e9842e16 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelCreationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelCreationTest.java @@ -209,17 +209,17 @@ private void testIccWithError(Double ipMin, Double ipMax, String reportError) th @Test void testIpMinGreaterThanIpMax() throws Exception { - testIccWithError(15.1, 15.0, "Voltage level creation error: IpMin cannot be greater than IpMax"); + testIccWithError(15.1, 15.0, "IpMin cannot be greater than IpMax"); } @Test void testIpMinNegative() throws Exception { - testIccWithError(-25.0, 15.0, "Voltage level creation error: IpMin must be positive"); + testIccWithError(-25.0, 15.0, "IpMin must be positive"); } @Test void testIpMaxNegative() throws Exception { - testIccWithError(25.0, -15.0, "Voltage level creation error: IpMax must be positive"); + testIccWithError(25.0, -15.0, "IpMax must be positive"); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelModificationTest.java index ad6b197ec..397f502d3 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelModificationTest.java @@ -157,31 +157,31 @@ private void testIpMinIpMaxNotChanged(Double ipMin, Double ipMax, String reportE @Test void testIpMinGreaterThanIpMax() throws Exception { // check only modification inputs - testIpMinIpMaxNotChanged(30.0, 29.0, "Voltage level modification error: IpMin cannot be greater than IpMax"); + testIpMinIpMaxNotChanged(30.0, 29.0, "IpMin cannot be greater than IpMax"); } @Test void testIpMinNegative() throws Exception { // check only modification inputs - testIpMinIpMaxNotChanged(-30.0, 0.0, "Voltage level modification error: IpMin must be positive"); + testIpMinIpMaxNotChanged(-30.0, 0.0, "IpMin must be positive"); } @Test void testIpMaxNegative() throws Exception { // check only modification inputs - testIpMinIpMaxNotChanged(0.0, -12.0, "Voltage level modification error: IpMax must be positive"); + testIpMinIpMaxNotChanged(0.0, -12.0, "IpMax must be positive"); } @Test void testIpMinGreaterThanEquipmentIpMax() throws Exception { // check ipMin modification input against equipement ipMax real value (25.0) - testIpMinIpMaxNotChanged(30.0, null, "Voltage level modification error: IpMin cannot be greater than IpMax"); + testIpMinIpMaxNotChanged(30.0, null, "IpMin cannot be greater than IpMax"); } @Test void testEquipmentIpMinGreaterThanIpMax() throws Exception { // check ipMax modification input against equipement ipMin real value (15.0) - testIpMinIpMaxNotChanged(null, 14.9, "Voltage level modification error: IpMin cannot be greater than IpMax"); + testIpMinIpMaxNotChanged(null, 14.9, "IpMin cannot be greater than IpMax"); } @Test @@ -216,7 +216,7 @@ void testSetIpMinOnEquipmentWithoutExtension() throws Exception { VoltageLevel voltageLevelUpdated = getNetwork().getVoltageLevel(vlWithNoIcc); assertNotNull(voltageLevelUpdated); assertNull(voltageLevelUpdated.getExtension(IdentifiableShortCircuit.class)); - assertLogMessage("Voltage level modification error: IpMax is required", ERROR_MESSAGE_KEY, reportService); + assertLogMessage("IpMax is required", ERROR_MESSAGE_KEY, reportService); } @Test diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java index 5ee834c23..1665695f0 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java @@ -89,7 +89,7 @@ public void specificSetUp() { public void testByModificationError() throws Exception { //Test with modification = null mockMvc.perform(post(getNetworkModificationUri()).content(mapper.writeValueAsString(null)).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isBadRequest()); + .andExpect(status().isInternalServerError()); // Test with empty list of assignment checkCreationApplicationStatus(List.of(), NetworkModificationResult.ApplicationStatus.WITH_ERRORS); diff --git a/src/test/resources/application-default.yml b/src/test/resources/application-default.yml index 3f2a04d86..d2f993e4b 100644 --- a/src/test/resources/application-default.yml +++ b/src/test/resources/application-default.yml @@ -1,4 +1,8 @@ spring: + main: + web-application-type: servlet + application: + name: network-modification-server jpa: database: H2 properties: From 77eff924fbdd58dd8e54474304e21d5cf48cd564 Mon Sep 17 00:00:00 2001 From: Joris Mancini Date: Tue, 6 Jan 2026 14:18:48 +0100 Subject: [PATCH 3/8] chore: update with refactored network-modification Signed-off-by: Joris Mancini --- pom.xml | 2 +- .../server/modifications/NetworkModificationApplicator.java | 3 +-- .../modifications/TwoWindingsTransformerModificationTest.java | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index a6f55fc6b..6a6bc6da8 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ **/migration/**/* gridsuite org.gridsuite:network-modification-server - 0.59.0 + 0.60.0-SNAPSHOT diff --git a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java index 63fceec5c..d248a2119 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java @@ -19,7 +19,6 @@ import lombok.Getter; import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.dto.ModificationInfos; -import org.gridsuite.modification.error.NetworkModificationRunException; import org.gridsuite.modification.modifications.AbstractModification; import org.gridsuite.modification.server.dto.ModificationApplicationGroup; import org.gridsuite.modification.server.dto.NetworkInfos; @@ -231,7 +230,7 @@ private void apply(AbstractModification modification, Network network, ReportNod } private void handleException(ReportNode subReportNode, Exception e) { - boolean isApplicationException = PowsyblException.class.isAssignableFrom(e.getClass()) || NetworkModificationRunException.class.isAssignableFrom(e.getClass()) + boolean isApplicationException = PowsyblException.class.isAssignableFrom(e.getClass()) || NetworkModificationServerRunException.class.isAssignableFrom(e.getClass()); if (!isApplicationException && LOGGER.isErrorEnabled()) { LOGGER.error(e.toString(), e); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java index c0e5b4601..34aead0b1 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java @@ -316,7 +316,7 @@ void testCreateWithErrors() throws Exception { .content(modificationInfosJson) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage("Two windings transformer '2wt_not_existing' : does not exist in the network", + assertLogMessage("Two windings transformer '2wt_not_existing' : it does not exist in the network", ERROR_MESSAGE_KEY, reportService); } From 1a6ec743b3816b8543cc7a2340503597521ae0d9 Mon Sep 17 00:00:00 2001 From: Joris Mancini Date: Tue, 6 Jan 2026 16:08:18 +0100 Subject: [PATCH 4/8] revert: error during merge Signed-off-by: Joris Mancini --- .../changesets/changelog_20251205T094612Z.xml | 18 ++++++++++ .../changesets/changelog_20251208T124345Z.xml | 8 +++++ .../changesets/changelog_20251215T152152Z.xml | 33 +++++++++++++++++++ .../db/changelog/db.changelog-master.yaml | 11 ++++++- 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/db/changelog/changesets/changelog_20251205T094612Z.xml create mode 100644 src/main/resources/db/changelog/changesets/changelog_20251208T124345Z.xml create mode 100644 src/main/resources/db/changelog/changesets/changelog_20251215T152152Z.xml diff --git a/src/main/resources/db/changelog/changesets/changelog_20251205T094612Z.xml b/src/main/resources/db/changelog/changesets/changelog_20251205T094612Z.xml new file mode 100644 index 000000000..4cb20c9aa --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20251205T094612Z.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/changesets/changelog_20251208T124345Z.xml b/src/main/resources/db/changelog/changesets/changelog_20251208T124345Z.xml new file mode 100644 index 000000000..6fdd0a72c --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20251208T124345Z.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/main/resources/db/changelog/changesets/changelog_20251215T152152Z.xml b/src/main/resources/db/changelog/changesets/changelog_20251215T152152Z.xml new file mode 100644 index 000000000..d247504a2 --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20251215T152152Z.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + name IS NOT NULL + + + + + value_ IS NOT NULL + + + + + acceptable_duration IS NOT NULL + + + diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index 671f84e69..22bc992fa 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -443,4 +443,13 @@ databaseChangeLog: relativeToChangelogFile: true - include: file: changesets/changelog_20251128T072356Z.xml - relativeToChangelogFile: true \ No newline at end of file + relativeToChangelogFile: true + - include: + relativeToChangelogFile: true + file: changesets/changelog_20251205T094612Z.xml + - include: + relativeToChangelogFile: true + file: changesets/changelog_20251208T124345Z.xml + - include: + file: changesets/changelog_20251215T152152Z.xml + relativeToChangelogFile: true From bdebbce8112547c77ae7d39a90f4b117887547bf Mon Sep 17 00:00:00 2001 From: Joris Mancini Date: Tue, 6 Jan 2026 16:30:18 +0100 Subject: [PATCH 5/8] revert: rename NetworkModificationServerException Signed-off-by: Joris Mancini --- .../dto/elasticsearch/EquipmentInfos.java | 6 +- .../server/entities/ModificationEntity.java | 6 +- .../LineAttachToVoltageLevelEntity.java | 4 +- .../EquipmentAttributeModificationEntity.java | 4 +- ...> NetworkModificationServerException.java} | 6 +- .../NetworkModificationApplicator.java | 5 +- .../modifications/NetworkStoreListener.java | 4 +- .../NetworkModificationRepository.java | 101 +++++++++--------- .../service/NetworkModificationService.java | 8 +- .../modifications/BalancesAdjustmentTest.java | 4 +- 10 files changed, 73 insertions(+), 75 deletions(-) rename src/main/java/org/gridsuite/modification/server/error/{NetworkModificationServerRunException.java => NetworkModificationServerException.java} (66%) diff --git a/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/EquipmentInfos.java b/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/EquipmentInfos.java index 73ba5b1a8..ce8a9335a 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/EquipmentInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/EquipmentInfos.java @@ -11,7 +11,7 @@ import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.dto.SubstationInfos; import org.gridsuite.modification.server.dto.VoltageLevelInfos; -import org.gridsuite.modification.server.error.NetworkModificationServerRunException; +import org.gridsuite.modification.server.error.NetworkModificationServerException; import org.springframework.data.annotation.TypeAlias; import org.springframework.data.elasticsearch.annotations.*; import org.springframework.lang.NonNull; @@ -84,7 +84,7 @@ public static Set getVoltageLevels(@NonNull Identifiable identi ).collect(Collectors.toSet()); } - throw new NetworkModificationServerRunException("The equipment type : " + identifiable.getClass().getSimpleName() + " is unknown"); + throw new NetworkModificationServerException("The equipment type : " + identifiable.getClass().getSimpleName() + " is unknown"); } public static String getEquipmentTypeName(@NonNull Identifiable identifiable) { @@ -101,7 +101,7 @@ public static String getEquipmentTypeName(@NonNull Identifiable identifiable) */ private static String getHvdcLineTypeName(HvdcLine hvdcLine) { if (hvdcLine.getConverterStation1().getHvdcType() != hvdcLine.getConverterStation2().getHvdcType()) { - throw new NetworkModificationServerRunException(String.format("The hybrid Hvdc line %s is unsupported", hvdcLine.getId())); + throw new NetworkModificationServerException(String.format("The hybrid Hvdc line %s is unsupported", hvdcLine.getId())); } return String.format("%s_%s", hvdcLine.getType().name(), hvdcLine.getConverterStation1().getHvdcType().name()); diff --git a/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java index 2930d8081..e7d9d46f4 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java @@ -14,7 +14,7 @@ import org.gridsuite.modification.dto.EquipmentAttributeModificationInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.entities.equipment.modification.attribute.EquipmentAttributeModificationEntity; -import org.gridsuite.modification.server.error.NetworkModificationServerRunException; +import org.gridsuite.modification.server.error.NetworkModificationServerException; import java.lang.reflect.Constructor; import java.time.Instant; @@ -84,7 +84,7 @@ public ModificationEntity(UUID id, String type) { protected ModificationEntity(ModificationInfos modificationInfos) { if (modificationInfos == null) { - throw new NetworkModificationServerRunException("Missing network modification description"); + throw new NetworkModificationServerException("Missing network modification description"); } //We need to limit the precision to avoid database precision storage limit issue (postgres has a precision of 6 digits while h2 can go to 9) this.date = Instant.now().truncatedTo(ChronoUnit.MICROS); @@ -136,7 +136,7 @@ public static ModificationEntity fromDTO(ModificationInfos dto) { Constructor constructor = entityClass.getConstructor(dto.getClass()); return constructor.newInstance(dto); } catch (Exception e) { - throw new NetworkModificationServerRunException("Failed to map DTO to Entity: " + e.getCause().getMessage(), e); + throw new NetworkModificationServerException("Failed to map DTO to Entity" + e.getCause().getMessage(), e); } } else { throw new IllegalArgumentException("No entity class registered for DTO class: " + dto.getClass()); diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineAttachToVoltageLevelEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineAttachToVoltageLevelEntity.java index cab82619a..a919be34c 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineAttachToVoltageLevelEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineAttachToVoltageLevelEntity.java @@ -16,7 +16,7 @@ import org.gridsuite.modification.server.entities.equipment.creation.VoltageLevelCreationEntity; import jakarta.persistence.*; -import org.gridsuite.modification.server.error.NetworkModificationServerRunException; +import org.gridsuite.modification.server.error.NetworkModificationServerException; /** * @author Nicolas NOIR @@ -96,7 +96,7 @@ private void assignAttributes(LineAttachToVoltageLevelInfos lineAttachToVoltageL existingVoltageLevelId = lineAttachToVoltageLevelInfos.getExistingVoltageLevelId(); bbsOrBusId = lineAttachToVoltageLevelInfos.getBbsOrBusId(); if (lineAttachToVoltageLevelInfos.getAttachmentLine() == null) { - throw new NetworkModificationServerRunException("Missing required attachment line description"); + throw new NetworkModificationServerException("Missing required attachment line description"); } lineCreation = new LineCreationEntity(lineAttachToVoltageLevelInfos.getAttachmentLine()); newLine1Id = lineAttachToVoltageLevelInfos.getNewLine1Id(); diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/attribute/EquipmentAttributeModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/attribute/EquipmentAttributeModificationEntity.java index 8e9be48da..e73abd8d0 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/attribute/EquipmentAttributeModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/attribute/EquipmentAttributeModificationEntity.java @@ -21,7 +21,7 @@ import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; import jakarta.persistence.MappedSuperclass; -import org.gridsuite.modification.server.error.NetworkModificationServerRunException; +import org.gridsuite.modification.server.error.NetworkModificationServerException; /** @@ -96,7 +96,7 @@ public static EquipmentAttributeModificationEntity createAttributeEntity(Equi Constructor> constructor = entityClass.getConstructor(EquipmentAttributeModificationInfos.class); return constructor.newInstance(dto); } catch (Exception e) { - throw new NetworkModificationServerRunException("Failed to map DTO to Entity", e); + throw new NetworkModificationServerException("Failed to map DTO to Entity" + e.getCause().getMessage(), e); } } else { throw new IllegalArgumentException("No entity class registered for attribute value class: " + attributeValueClass); diff --git a/src/main/java/org/gridsuite/modification/server/error/NetworkModificationServerRunException.java b/src/main/java/org/gridsuite/modification/server/error/NetworkModificationServerException.java similarity index 66% rename from src/main/java/org/gridsuite/modification/server/error/NetworkModificationServerRunException.java rename to src/main/java/org/gridsuite/modification/server/error/NetworkModificationServerException.java index 2201b4a3f..8f3b50790 100644 --- a/src/main/java/org/gridsuite/modification/server/error/NetworkModificationServerRunException.java +++ b/src/main/java/org/gridsuite/modification/server/error/NetworkModificationServerException.java @@ -9,13 +9,13 @@ /** * @author Mohamed Benrejeb */ -public class NetworkModificationServerRunException extends RuntimeException { +public class NetworkModificationServerException extends RuntimeException { - public NetworkModificationServerRunException(String message) { + public NetworkModificationServerException(String message) { super(message); } - public NetworkModificationServerRunException(String message, Throwable cause) { + public NetworkModificationServerException(String message, Throwable cause) { super(message, cause); } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java index d248a2119..70a706132 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java @@ -26,7 +26,7 @@ import org.gridsuite.modification.server.dto.NetworkModificationResult.ApplicationStatus; import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosService; -import org.gridsuite.modification.server.error.NetworkModificationServerRunException; +import org.gridsuite.modification.server.error.NetworkModificationServerException; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.service.*; import org.slf4j.Logger; @@ -230,8 +230,7 @@ private void apply(AbstractModification modification, Network network, ReportNod } private void handleException(ReportNode subReportNode, Exception e) { - boolean isApplicationException = PowsyblException.class.isAssignableFrom(e.getClass()) - || NetworkModificationServerRunException.class.isAssignableFrom(e.getClass()); + boolean isApplicationException = PowsyblException.class.isAssignableFrom(e.getClass()); if (!isApplicationException && LOGGER.isErrorEnabled()) { LOGGER.error(e.toString(), e); } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java b/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java index af6c38f63..1ad86b2ee 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java @@ -16,7 +16,7 @@ import org.gridsuite.modification.server.dto.elasticsearch.TombstonedEquipmentInfos; import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosService; -import org.gridsuite.modification.server.error.NetworkModificationServerRunException; +import org.gridsuite.modification.server.error.NetworkModificationServerException; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.impacts.CollectionElementImpact; import org.gridsuite.modification.server.impacts.SimpleElementImpact; @@ -199,7 +199,7 @@ public List flushModificationApplications() { networkStoreService.flush(network); // At first flushImpactedEquipments(); } catch (Exception e) { - throw new NetworkModificationServerRunException(e.getMessage(), e); + throw new NetworkModificationServerException(e.getMessage(), e); } return reduceNetworkImpacts(); diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index ae6c5a42e..7bb359667 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -19,7 +19,7 @@ import org.gridsuite.modification.server.entities.tabular.TabularModificationsEntity; import org.gridsuite.modification.server.entities.tabular.TabularPropertyEntity; import org.gridsuite.modification.server.error.NetworkModificationGroupNotFoundException; -import org.gridsuite.modification.server.error.NetworkModificationServerRunException; +import org.gridsuite.modification.server.error.NetworkModificationServerException; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @@ -122,7 +122,7 @@ public List saveModificationInfos(UUID groupUuid, List saveModificationInfosNonTransactional(UUID groupUuid, - List modifications) { + List modifications) { List entities = modifications.stream().map(ModificationEntity::fromDTO).toList(); return saveModificationsNonTransactional(groupUuid, entities); @@ -132,25 +132,25 @@ public UUID createNetworkCompositeModification(@NonNull List modificationU CompositeModificationInfos compositeInfos = CompositeModificationInfos.builder().modifications(List.of()).build(); CompositeModificationEntity compositeEntity = (CompositeModificationEntity) ModificationEntity.fromDTO(compositeInfos); List copyEntities = modificationRepository.findAllByIdIn(modificationUuids).stream() - .map(this::toModificationsInfosOptimizedForTabular) - .map(ModificationEntity::fromDTO) - .toList(); + .map(this::toModificationsInfosOptimizedForTabular) + .map(ModificationEntity::fromDTO) + .toList(); compositeEntity.setModifications(copyEntities); return modificationRepository.save(compositeEntity).getId(); } public void updateCompositeModification(@NonNull UUID compositeUuid, @NonNull List modificationUuids) { ModificationEntity modificationEntity = modificationRepository.findById(compositeUuid) - .orElseThrow(() -> new NetworkModificationServerRunException(String.format(MODIFICATION_NOT_FOUND_MESSAGE, compositeUuid))); + .orElseThrow(() -> new NetworkModificationServerException(String.format(MODIFICATION_NOT_FOUND_MESSAGE, compositeUuid))); if (!(modificationEntity instanceof CompositeModificationEntity compositeEntity)) { - throw new NetworkModificationServerRunException(String.format("Modification (%s) is not a composite modification", compositeUuid)); + throw new NetworkModificationServerException(String.format("Modification (%s) is not a composite modification", compositeUuid)); } List copyEntities = modificationRepository.findAllByIdIn(modificationUuids).stream() - .map(this::toModificationsInfosOptimizedForTabular) - .map(ModificationEntity::fromDTO) - .toList(); + .map(this::toModificationsInfosOptimizedForTabular) + .map(ModificationEntity::fromDTO) + .toList(); compositeEntity.getModifications().clear(); compositeEntity.getModifications().addAll(copyEntities); modificationRepository.save(compositeEntity); @@ -217,10 +217,10 @@ private List moveModificationsNonTransactional(UUID destinat private void insertModifications(List modificationsList, List modificationsToAdd, UUID referenceModificationUuid) { // If referenceModificationUuid == null we will append at the end of list, otherwise we will insert before referenceModification int insertionIndex = referenceModificationUuid == null ? - modificationsList.size() : IntStream.range(0, modificationsList.size()) - .filter(i -> referenceModificationUuid.equals(modificationsList.get(i).getId())) - .findFirst() - .orElseThrow(() -> new NetworkModificationServerRunException("Insert modification error")); + modificationsList.size() : IntStream.range(0, modificationsList.size()) + .filter(i -> referenceModificationUuid.equals(modificationsList.get(i).getId())) + .findFirst() + .orElseThrow(() -> new NetworkModificationServerException("Insert modification error")); modificationsList.addAll(insertionIndex, modificationsToAdd); for (int order = 0; order < modificationsList.size(); order++) { modificationsList.get(order).setModificationsOrder(order); @@ -250,8 +250,8 @@ private List removeModifications(List mo public List getModificationGroupsUuids() { return this.modificationGroupRepository.findAll().stream() - .map(ModificationGroupEntity::getId) - .collect(Collectors.toList()); + .map(ModificationGroupEntity::getId) + .collect(Collectors.toList()); } @Transactional @@ -260,9 +260,9 @@ public Map duplicateCompositeModifications(List sourceModifica // findAllById does not keep sourceModificationUuids order, but // sourceEntities, copyEntities, newEntities have the same order. List copyEntities = sourceEntities.stream() - .map(this::toModificationsInfosOptimizedForTabular) - .map(ModificationEntity::fromDTO) - .toList(); + .map(this::toModificationsInfosOptimizedForTabular) + .map(ModificationEntity::fromDTO) + .toList(); List newEntities = modificationRepository.saveAll(copyEntities); // Iterate through sourceEntities and newEntities collections simultaneously to map sourceId -> newId @@ -286,9 +286,8 @@ public List getModifications(UUID groupUuid, boolean onlyMeta } catch (NetworkModificationGroupNotFoundException e) { if (!errorOnGroupNotFound) { return List.of(); - } else { - throw e; } + throw e; } } @@ -311,14 +310,14 @@ public List getModificationsMetadata(UUID groupUuid, boolean private List reorderModifications(List modifications, List subModificationsOrderedUuids) { Map modificationsMap = modifications.stream() - .collect(Collectors.toMap( - ModificationEntity::getId, - Function.identity() - )); + .collect(Collectors.toMap( + ModificationEntity::getId, + Function.identity() + )); return subModificationsOrderedUuids - .stream() - .map(modificationsMap::get) - .toList(); + .stream() + .map(modificationsMap::get) + .toList(); } private List loadTabularModificationSubEntities(List subModificationsUuids, ModificationType modificationType) { @@ -425,8 +424,8 @@ public List getActiveModifications(UUID groupUuid, Set private List getModificationsInfos(List groupUuids, boolean onlyStashed) { return groupUuids.stream().flatMap(this::getModificationEntityStream) - .filter(m -> !onlyStashed || m.getStashed() == onlyStashed) - .map(this::toModificationsInfosOptimizedForTabular).toList(); + .filter(m -> !onlyStashed || m.getStashed() == onlyStashed) + .map(this::toModificationsInfosOptimizedForTabular).toList(); } @Transactional(readOnly = true) @@ -437,7 +436,7 @@ public ModificationInfos getModificationInfo(UUID modificationUuid) { public ModificationEntity getModificationEntity(UUID modificationUuid) { return modificationRepository .findById(modificationUuid) - .orElseThrow(() -> new NetworkModificationServerRunException("Modification not found: " + modificationUuid.toString())); + .orElseThrow(() -> new NetworkModificationServerException("Modification not found: " + modificationUuid.toString())); } @Transactional // To have the 2 delete in the same transaction (atomic) @@ -473,11 +472,11 @@ public int deleteModifications(UUID groupUuid, List uuids) { modifications = modificationRepository.findAllById(uuids); Optional optionalModificationWithGroup = modifications.stream().filter(m -> m.getGroup() != null).findFirst(); if (optionalModificationWithGroup.isPresent()) { - throw new NetworkModificationServerRunException(String.format("Modification deletion error: %s is owned by group %s", + throw new NetworkModificationServerException(String.format("Modification deletion error: %s is owned by group %s", optionalModificationWithGroup.get().getId().toString(), optionalModificationWithGroup.get().getGroup().getId())); } } else { - throw new NetworkModificationServerRunException("Modification deletion error: need to specify the group or give a list of UUIDs"); + throw new NetworkModificationServerException("Modification deletion error: need to specify the group or give a list of UUIDs"); } int count = modifications.size(); deleteModifications(modifications); @@ -520,12 +519,12 @@ private List getModificationsInfosNonTransactional(List public List getBasicNetworkModificationsFromComposite(@NonNull UUID uuid) { List networkModificationsUuids = modificationRepository.findModificationIdsByCompositeModificationId(uuid); Map entitiesById = modificationRepository.findBaseDataByIdIn(networkModificationsUuids).stream() - .collect(Collectors.toMap(ModificationEntity::getId, Function.identity())); + .collect(Collectors.toMap(ModificationEntity::getId, Function.identity())); return networkModificationsUuids.stream() - .map(entitiesById::get) - .filter(Objects::nonNull) - .map(this::toModificationsInfosOptimizedForTabular) - .toList(); + .map(entitiesById::get) + .filter(Objects::nonNull) + .map(this::toModificationsInfosOptimizedForTabular) + .toList(); } @Transactional(readOnly = true) @@ -536,13 +535,13 @@ public List getCompositeModificationsInfos(@NonNull List getCompositeModificationsInfosNonTransactional(@NonNull List uuids) { List entities = new ArrayList<>(); uuids.forEach(uuid -> { - List foundEntities = modificationRepository.findModificationIdsByCompositeModificationId(uuid); - List orderedModifications = foundEntities + List foundEntities = modificationRepository.findModificationIdsByCompositeModificationId(uuid); + List orderedModifications = foundEntities .stream() .map(this::getModificationInfo) .toList(); - entities.addAll(orderedModifications); - } + entities.addAll(orderedModifications); + } ); return entities; } @@ -562,8 +561,8 @@ public void stashNetworkModifications(@NonNull List modificationUuids, int List modificationEntities = new ArrayList<>(); for (UUID modificationUuid : modificationUuids) { ModificationEntity modificationEntity = this.modificationRepository - .findById(modificationUuid) - .orElseThrow(() -> new NetworkModificationServerRunException(String.format(MODIFICATION_NOT_FOUND_MESSAGE, modificationUuid))); + .findById(modificationUuid) + .orElseThrow(() -> new NetworkModificationServerException(String.format(MODIFICATION_NOT_FOUND_MESSAGE, modificationUuid))); modificationEntity.setStashed(true); modificationEntity.setModificationsOrder(stashModificationOrder); modificationEntities.add(modificationEntity); @@ -592,7 +591,7 @@ public void restoreNetworkModifications(@NonNull List modificationUuids, i int modificationOrder = unstashedSize; List modifications = modificationRepository.findAllByIdInReverse(modificationUuids); if (modifications.size() != modificationUuids.size()) { - throw new NetworkModificationServerRunException("Modification not found"); + throw new NetworkModificationServerException("Modification not found"); } for (ModificationEntity modification : modifications) { modification.setStashed(false); @@ -606,7 +605,7 @@ public void updateNetworkModificationMetadata(@NonNull List modificationUu for (UUID modificationUuid : modificationUuids) { ModificationEntity modificationEntity = this.modificationRepository .findById(modificationUuid) - .orElseThrow(() -> new NetworkModificationServerRunException(String.format(MODIFICATION_NOT_FOUND_MESSAGE, modificationUuid))); + .orElseThrow(() -> new NetworkModificationServerException(String.format(MODIFICATION_NOT_FOUND_MESSAGE, modificationUuid))); if (metadata.getDescription() != null) { modificationEntity.setDescription(metadata.getDescription()); } @@ -623,8 +622,8 @@ public void updateModification(@NonNull UUID modificationUuid, @NonNull Modifica // Before updating/adding with new sub-modifications, we delete and clear existing sub-modifications manually // to avoid JPA to make a huge query to find them (no need to read them, they are going to be replaced). if (modificationInfos.getType() == ModificationType.TABULAR_CREATION - || modificationInfos.getType() == ModificationType.TABULAR_MODIFICATION - || modificationInfos.getType() == ModificationType.LIMIT_SETS_TABULAR_MODIFICATION) { + || modificationInfos.getType() == ModificationType.TABULAR_MODIFICATION + || modificationInfos.getType() == ModificationType.LIMIT_SETS_TABULAR_MODIFICATION) { TabularModificationsEntity tabularEntity = (TabularModificationsEntity) entity; deleteTabularModificationSubModifications(tabularEntity); tabularEntity.update(modificationInfos); @@ -658,9 +657,9 @@ public List getModificationsMetadata(List uuids) { return modificationRepository.findMetadataIn(uuids) .stream() .map(entity -> ModificationMetadata.builder() - .id(entity.getId()) - .type(ModificationType.valueOf(entity.getType())) - .build()) + .id(entity.getId()) + .type(ModificationType.valueOf(entity.getType())) + .build()) .toList(); } diff --git a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java index 6a4434251..82ce0d46c 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -26,7 +26,7 @@ import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosService; import org.gridsuite.modification.server.entities.ModificationEntity; import org.gridsuite.modification.server.error.NetworkModificationGroupNotFoundException; -import org.gridsuite.modification.server.error.NetworkModificationServerRunException; +import org.gridsuite.modification.server.error.NetworkModificationServerException; import org.gridsuite.modification.server.modifications.NetworkModificationApplicator; import org.gridsuite.modification.server.repositories.ModificationRepository; import org.gridsuite.modification.server.repositories.NetworkModificationRepository; @@ -121,7 +121,7 @@ public void verifyModifications(UUID groupUuid, Set modificationUuids) { .stream().map(ModificationInfos::getUuid) .collect(Collectors.toSet()) .containsAll(modificationUuids)) { - throw new NetworkModificationServerRunException("Modifications not found"); + throw new NetworkModificationServerException("Modifications not found"); } } @@ -311,7 +311,7 @@ public void stopBuildRequest(String receiver) { public void deleteNetworkModifications(UUID groupUuid, List modificationsUuids) { if (networkModificationRepository.deleteModifications(groupUuid, modificationsUuids) == 0) { - throw new NetworkModificationServerRunException("No modifications found"); + throw new NetworkModificationServerException("No modifications found"); } } @@ -360,7 +360,7 @@ private CompletableFuture> applyModification public CompletableFuture duplicateModifications(@NonNull UUID targetGroupUuid, UUID originGroupUuid, @NonNull List modificationsUuids, @NonNull List applicationContexts) { if (originGroupUuid != null && !modificationsUuids.isEmpty()) { // Duplicate modifications from a group or from a list only - throw new NetworkModificationServerRunException("Invalid argument for duplication"); + throw new NetworkModificationServerException("Invalid argument for duplication"); } List duplicateModifications = networkModificationRepository.saveDuplicateModifications(targetGroupUuid, originGroupUuid, modificationsUuids); List ids = duplicateModifications.stream().map(ModificationInfos::getUuid).toList(); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java index 12b9af23c..4669e43e9 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java @@ -13,7 +13,7 @@ import com.powsybl.loadflow.LoadFlowParameters; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.dto.NetworkModificationsResult; -import org.gridsuite.modification.server.error.NetworkModificationServerRunException; +import org.gridsuite.modification.server.error.NetworkModificationServerException; import org.gridsuite.modification.server.service.LoadFlowService; import org.gridsuite.modification.server.utils.elasticsearch.DisableElasticsearch; import org.junit.jupiter.api.BeforeEach; @@ -66,7 +66,7 @@ void setupLoadFlowServiceMock() { // Mock for server error case when(loadFlowService.getLoadFlowParametersInfos(ERROR_LOADFLOW_PARAMETERS_UUID)) - .thenThrow(new NetworkModificationServerRunException("LOAD_FLOW_PARAMETERS_FETCH_ERROR : Internal server error")); + .thenThrow(new NetworkModificationServerException("LOAD_FLOW_PARAMETERS_FETCH_ERROR : Internal server error")); } @Override From 4ccfd8f42323b63ad609d03438f34d8087ba532e Mon Sep 17 00:00:00 2001 From: Joris Mancini Date: Wed, 7 Jan 2026 10:56:10 +0100 Subject: [PATCH 6/8] revert: let NetworkModificationException where it is used Signed-off-by: Joris Mancini --- .../dto/elasticsearch/EquipmentInfos.java | 6 +-- .../server/entities/ModificationEntity.java | 5 ++- .../LineAttachToVoltageLevelEntity.java | 4 +- .../EquipmentAttributeModificationEntity.java | 2 +- .../NetworkModificationApplicator.java | 1 - .../modifications/NetworkStoreListener.java | 10 +---- .../server/ModificationControllerTest.java | 10 +++-- .../modifications/BalancesAdjustmentTest.java | 4 +- .../modifications/EquipmentDeletionTest.java | 2 +- .../modifications/GenerationDispatchTest.java | 5 ++- .../MoveVoltageLevelFeederBaysTest.java | 5 ++- ...woWindingsTransformerModificationTest.java | 5 ++- .../modifications/VscModificationTest.java | 5 ++- .../service/EquipmentInfosServiceTests.java | 9 +++-- .../service/ModificationRepositoryTest.java | 38 ++++++++++--------- 15 files changed, 57 insertions(+), 54 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/EquipmentInfos.java b/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/EquipmentInfos.java index ce8a9335a..aa94c1e26 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/EquipmentInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/EquipmentInfos.java @@ -9,9 +9,9 @@ import com.powsybl.iidm.network.*; import lombok.*; import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.server.dto.SubstationInfos; import org.gridsuite.modification.server.dto.VoltageLevelInfos; -import org.gridsuite.modification.server.error.NetworkModificationServerException; import org.springframework.data.annotation.TypeAlias; import org.springframework.data.elasticsearch.annotations.*; import org.springframework.lang.NonNull; @@ -84,7 +84,7 @@ public static Set getVoltageLevels(@NonNull Identifiable identi ).collect(Collectors.toSet()); } - throw new NetworkModificationServerException("The equipment type : " + identifiable.getClass().getSimpleName() + " is unknown"); + throw new NetworkModificationException("The equipment type : " + identifiable.getClass().getSimpleName() + " is unknown"); } public static String getEquipmentTypeName(@NonNull Identifiable identifiable) { @@ -101,7 +101,7 @@ public static String getEquipmentTypeName(@NonNull Identifiable identifiable) */ private static String getHvdcLineTypeName(HvdcLine hvdcLine) { if (hvdcLine.getConverterStation1().getHvdcType() != hvdcLine.getConverterStation2().getHvdcType()) { - throw new NetworkModificationServerException(String.format("The hybrid Hvdc line %s is unsupported", hvdcLine.getId())); + throw new NetworkModificationException(String.format("The hybrid Hvdc line %s is unsupported", hvdcLine.getId())); } return String.format("%s_%s", hvdcLine.getType().name(), hvdcLine.getConverterStation1().getHvdcType().name()); diff --git a/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java index e7d9d46f4..3de6c554c 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/ModificationEntity.java @@ -11,6 +11,7 @@ import lombok.*; import org.gridsuite.modification.ModificationType; +import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.EquipmentAttributeModificationInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.entities.equipment.modification.attribute.EquipmentAttributeModificationEntity; @@ -84,7 +85,7 @@ public ModificationEntity(UUID id, String type) { protected ModificationEntity(ModificationInfos modificationInfos) { if (modificationInfos == null) { - throw new NetworkModificationServerException("Missing network modification description"); + throw new NetworkModificationException("Missing network modification description"); } //We need to limit the precision to avoid database precision storage limit issue (postgres has a precision of 6 digits while h2 can go to 9) this.date = Instant.now().truncatedTo(ChronoUnit.MICROS); @@ -136,7 +137,7 @@ public static ModificationEntity fromDTO(ModificationInfos dto) { Constructor constructor = entityClass.getConstructor(dto.getClass()); return constructor.newInstance(dto); } catch (Exception e) { - throw new NetworkModificationServerException("Failed to map DTO to Entity" + e.getCause().getMessage(), e); + throw new NetworkModificationServerException("Failed to map DTO to Entity: " + e.getCause().getMessage(), e); } } else { throw new IllegalArgumentException("No entity class registered for DTO class: " + dto.getClass()); diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineAttachToVoltageLevelEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineAttachToVoltageLevelEntity.java index a919be34c..1bdce63d9 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineAttachToVoltageLevelEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineAttachToVoltageLevelEntity.java @@ -9,6 +9,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.NonNull; +import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.LineAttachToVoltageLevelInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.entities.ModificationEntity; @@ -16,7 +17,6 @@ import org.gridsuite.modification.server.entities.equipment.creation.VoltageLevelCreationEntity; import jakarta.persistence.*; -import org.gridsuite.modification.server.error.NetworkModificationServerException; /** * @author Nicolas NOIR @@ -96,7 +96,7 @@ private void assignAttributes(LineAttachToVoltageLevelInfos lineAttachToVoltageL existingVoltageLevelId = lineAttachToVoltageLevelInfos.getExistingVoltageLevelId(); bbsOrBusId = lineAttachToVoltageLevelInfos.getBbsOrBusId(); if (lineAttachToVoltageLevelInfos.getAttachmentLine() == null) { - throw new NetworkModificationServerException("Missing required attachment line description"); + throw new NetworkModificationException("Missing required attachment line description"); } lineCreation = new LineCreationEntity(lineAttachToVoltageLevelInfos.getAttachmentLine()); newLine1Id = lineAttachToVoltageLevelInfos.getNewLine1Id(); diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/attribute/EquipmentAttributeModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/attribute/EquipmentAttributeModificationEntity.java index e73abd8d0..222b38352 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/attribute/EquipmentAttributeModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/attribute/EquipmentAttributeModificationEntity.java @@ -96,7 +96,7 @@ public static EquipmentAttributeModificationEntity createAttributeEntity(Equi Constructor> constructor = entityClass.getConstructor(EquipmentAttributeModificationInfos.class); return constructor.newInstance(dto); } catch (Exception e) { - throw new NetworkModificationServerException("Failed to map DTO to Entity" + e.getCause().getMessage(), e); + throw new NetworkModificationServerException("Failed to map DTO to Entity: " + e.getCause().getMessage(), e); } } else { throw new IllegalArgumentException("No entity class registered for attribute value class: " + attributeValueClass); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java index 70a706132..ca281c97b 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java @@ -26,7 +26,6 @@ import org.gridsuite.modification.server.dto.NetworkModificationResult.ApplicationStatus; import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosService; -import org.gridsuite.modification.server.error.NetworkModificationServerException; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.service.*; import org.slf4j.Logger; diff --git a/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java b/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java index 1ad86b2ee..78609fd48 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java @@ -16,7 +16,6 @@ import org.gridsuite.modification.server.dto.elasticsearch.TombstonedEquipmentInfos; import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosService; -import org.gridsuite.modification.server.error.NetworkModificationServerException; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.impacts.CollectionElementImpact; import org.gridsuite.modification.server.impacts.SimpleElementImpact; @@ -195,13 +194,8 @@ public void initModificationApplication(UUID groupUuid, ModificationInfos modifi } public List flushModificationApplications() { - try { - networkStoreService.flush(network); // At first - flushImpactedEquipments(); - } catch (Exception e) { - throw new NetworkModificationServerException(e.getMessage(), e); - } - + networkStoreService.flush(network); // At first + flushImpactedEquipments(); return reduceNetworkImpacts(); } diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index 1a78a7ac7..f074907dd 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -22,6 +22,7 @@ import com.powsybl.ws.commons.error.BaseExceptionHandler; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.tuple.Pair; +import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.dto.LoadCreationInfos.LoadCreationInfosBuilder; import org.gridsuite.modification.server.dto.ModificationMetadata; @@ -32,6 +33,7 @@ import org.gridsuite.modification.server.elasticsearch.EquipmentInfosRepository; import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; import org.gridsuite.modification.server.elasticsearch.TombstonedEquipmentInfosRepository; +import org.gridsuite.modification.server.error.NetworkModificationServerException; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.impacts.SimpleElementImpact; import org.gridsuite.modification.server.impacts.TestImpactUtils; @@ -223,7 +225,7 @@ void testNetworkNotFound() throws Exception { void assertThrowsUpdateModificationNotFound() { UUID modificationUuid = UUID.randomUUID(); ModificationInfos modificationInfos = LoadCreationInfos.builder().equipmentId("id").build(); - String errorMessage = assertThrows(RuntimeException.class, () -> networkModificationService.updateNetworkModification(modificationUuid, modificationInfos)).getMessage(); + String errorMessage = assertThrows(NetworkModificationServerException.class, () -> networkModificationService.updateNetworkModification(modificationUuid, modificationInfos)).getMessage(); assertEquals("Modification not found: " + modificationUuid, errorMessage); assertThrows(NullPointerException.class, () -> networkModificationService.updateNetworkModification(modificationUuid, null)); } @@ -474,7 +476,7 @@ void testDeleteAllModification() throws Exception { void testDeleteModificationMissingParamError() throws Exception { mockMvc.perform(delete(URI_NETWORK_MODIF_BASE)) .andExpect(status().isInternalServerError()) - .andExpect(result -> assertInstanceOf(RuntimeException.class, result.getResolvedException())) + .andExpect(result -> assertInstanceOf(NetworkModificationServerException.class, result.getResolvedException())) .andExpect(result -> assertEquals("Modification deletion error: need to specify the group or give a list of UUIDs", result.getResolvedException().getMessage())); } @@ -1446,7 +1448,7 @@ void shouldGetPosition() { assertEquals(0, result2); ModificationUtils modificationUtils = ModificationUtils.getInstance(); - String errorMessage = assertThrows(RuntimeException.class, () -> modificationUtils.getPosition("invalidBbsId", network, vl)).getMessage(); + String errorMessage = assertThrows(NetworkModificationException.class, () -> modificationUtils.getPosition("invalidBbsId", network, vl)).getMessage(); assertEquals("Busbar section invalidBbsId does not exist in network", errorMessage); } @@ -1789,7 +1791,7 @@ void testDuplicateCompositeModification() throws Exception { assertEquals(1, groupModifications.size()); assertEquals(modificationUuidList.get(0), groupModifications.get(0).getUuid()); // duplicate has been deleted - assertEquals("Modification not found: " + returnedNewId, assertThrows(RuntimeException.class, () + assertEquals("Modification not found: " + returnedNewId, assertThrows(NetworkModificationServerException.class, () -> modificationRepository.getModificationInfo(returnedNewId)).getMessage()); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java index 4669e43e9..9a9359413 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java @@ -166,8 +166,8 @@ void testGetLoadFlowParametersInfosNotFound() { */ @Test void testGetLoadFlowParametersInfosServerError() { - RuntimeException exception = assertThrows( - RuntimeException.class, + NetworkModificationServerException exception = assertThrows( + NetworkModificationServerException.class, () -> loadFlowService.getLoadFlowParametersInfos(ERROR_LOADFLOW_PARAMETERS_UUID) ); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/EquipmentDeletionTest.java b/src/test/java/org/gridsuite/modification/server/modifications/EquipmentDeletionTest.java index 130274ea7..0e226ce2b 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/EquipmentDeletionTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/EquipmentDeletionTest.java @@ -106,7 +106,7 @@ void testCreateWithErrors() throws Exception { String body = getJsonBody(equipmentDeletionInfos, null); mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - assertLogMessage("LOAD with id :notFoundLoad not found", + assertLogMessage("LOAD with id :notFoundLoad not found or of bad type", ERROR_MESSAGE_KEY, reportService); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GenerationDispatchTest.java b/src/test/java/org/gridsuite/modification/server/modifications/GenerationDispatchTest.java index 0ca44ca36..20e64f771 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GenerationDispatchTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GenerationDispatchTest.java @@ -14,6 +14,7 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; +import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.modifications.GenerationDispatch; import org.gridsuite.modification.server.dto.NetworkModificationResult; @@ -584,11 +585,11 @@ void testGenerationDispatchErrorCheck() { GenerationDispatchInfos modification = GenerationDispatchInfos.builder().lossCoefficient(150.).defaultOutageRate(0.).build(); final GenerationDispatch generationDispatch1 = new GenerationDispatch(modification); - assertThrows(RuntimeException.class, () -> generationDispatch1.check(network), "GENERATION_DISPATCH_ERROR : The loss coefficient must be between 0 and 100"); + assertThrows(NetworkModificationException.class, () -> generationDispatch1.check(network), "GENERATION_DISPATCH_ERROR : The loss coefficient must be between 0 and 100"); modification = GenerationDispatchInfos.builder().lossCoefficient(20.).defaultOutageRate(140.).build(); final GenerationDispatch generationDispatch2 = new GenerationDispatch(modification); - assertThrows(RuntimeException.class, () -> generationDispatch2.check(network), "GENERATION_DISPATCH_ERROR : The default outage rate must be between 0 and 100"); + assertThrows(NetworkModificationException.class, () -> generationDispatch2.check(network), "GENERATION_DISPATCH_ERROR : The default outage rate must be between 0 and 100"); } @Test diff --git a/src/test/java/org/gridsuite/modification/server/modifications/MoveVoltageLevelFeederBaysTest.java b/src/test/java/org/gridsuite/modification/server/modifications/MoveVoltageLevelFeederBaysTest.java index 6f2b49058..f08742900 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/MoveVoltageLevelFeederBaysTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/MoveVoltageLevelFeederBaysTest.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.extensions.ConnectablePosition; +import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.MoveFeederBayInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.dto.MoveVoltageLevelFeederBaysInfos; @@ -181,7 +182,7 @@ void testGetTerminal() { .build(); MoveVoltageLevelFeederBays moveVoltageLevelFeederBays = (MoveVoltageLevelFeederBays) moveVoltageLevelFeederBaysInfos.toModification(); assertEquals("MOVE_VOLTAGE_LEVEL_FEEDER_BAYS", moveVoltageLevelFeederBays.getName()); - String message = assertThrows(RuntimeException.class, () -> moveVoltageLevelFeederBays.getTerminal(network, connectablePositionModification)).getMessage(); + String message = assertThrows(NetworkModificationException.class, () -> moveVoltageLevelFeederBays.getTerminal(network, connectablePositionModification)).getMessage(); assertEquals("MoveVoltageLevelFeederBays is not implemented for class com.powsybl.network.store.iidm.impl.ThreeWindingsTransformerImpl", message); // busbar not found on a branch MoveFeederBayInfos connectablePositionModification2 = MoveFeederBayInfos.builder() @@ -192,7 +193,7 @@ void testGetTerminal() { .connectionPosition(4) .connectionDirection(ConnectablePosition.Direction.TOP) .build(); - message = assertThrows(RuntimeException.class, () -> moveVoltageLevelFeederBays.getTerminal(network, connectablePositionModification2)).getMessage(); + message = assertThrows(NetworkModificationException.class, () -> moveVoltageLevelFeederBays.getTerminal(network, connectablePositionModification2)).getMessage(); assertEquals("Invalid connection side: THREE for branch line1", message); // injection with no error MoveFeederBayInfos connectablePositionModification3 = MoveFeederBayInfos.builder() diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java index 34aead0b1..f57182a51 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java @@ -11,6 +11,7 @@ import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.extensions.ConnectablePosition; import com.powsybl.iidm.network.extensions.TwoWindingsTransformerToBeEstimated; +import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.dto.NetworkModificationResult; import org.gridsuite.modification.server.dto.NetworkModificationsResult; @@ -830,12 +831,12 @@ void testProcessPhaseTapChangerCreation() { preparePhaseTapChangerAdder(adder); AttributeModification regulationValueModification = new AttributeModification<>(10.0, OperationType.SET); AttributeModification regulatingModification = new AttributeModification<>(true, OperationType.SET); - String message = assertThrows(RuntimeException.class, () -> processPhaseTapRegulation(null, adder, false, + String message = assertThrows(NetworkModificationException.class, () -> processPhaseTapRegulation(null, adder, false, null, regulationValueModification, null, regulatingModification, regulationReports)).getMessage(); assertEquals("Two winding transformer creation error: Regulation mode is missing when creating tap phase changer with regulation enabled", message); AttributeModification regulationModeModification = new AttributeModification<>(PhaseTapChanger.RegulationMode.CURRENT_LIMITER, OperationType.SET); - String message2 = assertThrows(RuntimeException.class, () -> processPhaseTapRegulation(null, adder, false, + String message2 = assertThrows(NetworkModificationException.class, () -> processPhaseTapRegulation(null, adder, false, regulationModeModification, null, null, regulatingModification, regulationReports)).getMessage(); assertEquals("Two winding transformer creation error: Regulation value is missing when creating tap phase changer with regulation enabled", message2); processPhaseTapRegulation(null, adder, false, diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VscModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VscModificationTest.java index 643775521..b80a21cc2 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VscModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VscModificationTest.java @@ -14,6 +14,7 @@ import com.powsybl.iidm.network.extensions.HvdcAngleDroopActivePowerControl; import com.powsybl.iidm.network.extensions.HvdcOperatorActivePowerRange; import com.powsybl.iidm.network.extensions.HvdcOperatorActivePowerRangeAdder; +import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.modifications.VscModification; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -271,7 +272,7 @@ private VscModificationInfos buildModificationWithDroopAbsentInfos(boolean isPre private static void checkDroopWithAbsentInfos(VscModificationInfos modificationInfos, Network networkWithoutExt) { VscModification vscModification = new VscModification(modificationInfos); - String message = assertThrows(RuntimeException.class, + String message = assertThrows(NetworkModificationException.class, () -> vscModification.check(networkWithoutExt)) .getMessage(); assertEquals(ACTIVE_POWER_CONTROL_DROOP_P0_REQUIRED_ERROR_MSG, message); @@ -355,7 +356,7 @@ void testDtoContainRequiredData() { var networkuuid = UUID.randomUUID(); Network networkWitoutExt = NetworkCreation.createWithVSC(networkuuid, true); VscModification vscModification = new VscModification(modificationInfos); - assertThrows(RuntimeException.class, () -> vscModification.check(networkWitoutExt)); + assertThrows(NetworkModificationException.class, () -> vscModification.check(networkWitoutExt)); } @Test diff --git a/src/test/java/org/gridsuite/modification/server/service/EquipmentInfosServiceTests.java b/src/test/java/org/gridsuite/modification/server/service/EquipmentInfosServiceTests.java index 2e8b6ec73..12b30e2ae 100644 --- a/src/test/java/org/gridsuite/modification/server/service/EquipmentInfosServiceTests.java +++ b/src/test/java/org/gridsuite/modification/server/service/EquipmentInfosServiceTests.java @@ -9,6 +9,7 @@ import com.powsybl.iidm.network.*; import com.powsybl.network.store.iidm.impl.NetworkFactoryImpl; import com.powsybl.network.store.iidm.impl.NetworkImpl; +import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.server.dto.SubstationInfos; import org.gridsuite.modification.server.dto.VoltageLevelInfos; import org.gridsuite.modification.server.dto.elasticsearch.EquipmentInfos; @@ -255,13 +256,13 @@ void testSubstations() { void testBadType() { Identifiable network = new NetworkFactoryImpl().createNetwork("test", "test"); - String errorMessage = assertThrows(RuntimeException.class, () -> EquipmentInfos.getVoltageLevelsInfos(network)).getMessage(); + String errorMessage = assertThrows(NetworkModificationException.class, () -> EquipmentInfos.getVoltageLevelsInfos(network)).getMessage(); assertTrue(errorMessage.contains(String.format("The equipment type : %s is unknown", NetworkImpl.class.getSimpleName()))); - errorMessage = assertThrows(RuntimeException.class, () -> EquipmentInfos.getSubstationsInfos(network)).getMessage(); + errorMessage = assertThrows(NetworkModificationException.class, () -> EquipmentInfos.getSubstationsInfos(network)).getMessage(); assertTrue(errorMessage.contains(String.format("The equipment type : %s is unknown", NetworkImpl.class.getSimpleName()))); - errorMessage = assertThrows(RuntimeException.class, () -> EquipmentInfos.getSubstationsInfos(network)).getMessage(); + errorMessage = assertThrows(NetworkModificationException.class, () -> EquipmentInfos.getSubstationsInfos(network)).getMessage(); assertTrue(errorMessage.contains(String.format("The equipment type : %s is unknown", NetworkImpl.class.getSimpleName()))); } @@ -269,7 +270,7 @@ void testBadType() { void testUnsupportedHybridHvdc() { Network network = NetworkCreation.create(NETWORK_UUID, true); HvdcLine hvdcLine = network.getHvdcLine("hvdcLine"); - String errorMessage = assertThrows(RuntimeException.class, () -> EquipmentInfos.getEquipmentTypeName(hvdcLine)).getMessage(); + String errorMessage = assertThrows(NetworkModificationException.class, () -> EquipmentInfos.getEquipmentTypeName(hvdcLine)).getMessage(); assertEquals("The hybrid Hvdc line hvdcLine is unsupported", errorMessage); } diff --git a/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java b/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java index a9208f0fa..4006137eb 100644 --- a/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java @@ -19,6 +19,8 @@ import org.gridsuite.modification.server.entities.equipment.modification.attribute.DoubleModificationEmbedded; import org.gridsuite.modification.server.entities.equipment.modification.attribute.EnumModificationEmbedded; import org.gridsuite.modification.server.entities.equipment.modification.attribute.IAttributeModificationEmbeddable; +import org.gridsuite.modification.server.error.NetworkModificationGroupNotFoundException; +import org.gridsuite.modification.server.error.NetworkModificationServerException; import org.gridsuite.modification.server.repositories.ModificationGroupRepository; import org.gridsuite.modification.server.repositories.ModificationRepository; import org.gridsuite.modification.server.repositories.NetworkModificationRepository; @@ -125,7 +127,7 @@ private VoltageInitModificationInfos getVoltageInitModification(UUID modificatio @Test void test() { assertEquals(List.of(), this.networkModificationRepository.getModificationGroupsUuids()); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); assertEquals(0, networkModificationRepository.getModifications(TEST_GROUP_ID, true, false).size()); @@ -167,7 +169,7 @@ void test() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertEquals(0, modificationRepository.findAll().size()); - exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); + exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -208,7 +210,7 @@ void testGetModificationQueryCount() { assertRequestsCount(1, 0, 0, 0); // Non-existent modification uuid - RuntimeException exception = assertThrows(RuntimeException.class, () -> getEquipmentAttributeModification(TEST_GROUP_ID)); + NetworkModificationServerException exception = assertThrows(NetworkModificationServerException.class, () -> getEquipmentAttributeModification(TEST_GROUP_ID)); assertEquals("Modification not found: 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -227,7 +229,7 @@ void testDeleteModificationQueryCount() { assertRequestsCount(5, 0, 1, 3); // Non-existent group modification uuid - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -266,7 +268,7 @@ void testLoadCreation() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(5, 0, 1, 3); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -347,7 +349,7 @@ void testGeneratorCreation() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(5, 0, 1, 4); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -397,7 +399,7 @@ void testShuntCompensatorCreation() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(5, 0, 1, 3); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -477,7 +479,7 @@ void testLineCreation() { // https://github.com/jdbc-observations/datasource-proxy/issues/123 assertRequestsCount(10, 0, 1); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -662,7 +664,7 @@ void testMoveModificationsBetweenMoreThanTwoGroups() { SQLStatementCountValidator.reset(); List modificationsToMoveUuid2 = List.of(groovyScriptEntity2.getId()); UUID referenceNodeUuid = groovyScriptEntity2.getId(); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.moveModifications(TEST_GROUP_ID_2, TEST_GROUP_ID, modificationsToMoveUuid2, referenceNodeUuid)); + NetworkModificationServerException exception = assertThrows(NetworkModificationServerException.class, () -> networkModificationRepository.moveModifications(TEST_GROUP_ID_2, TEST_GROUP_ID, modificationsToMoveUuid2, referenceNodeUuid)); assertEquals("Insert modification error", exception.getMessage()); assertRequestsCount(5, 0, 0, 0); @@ -716,7 +718,7 @@ void testGroovyScript() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(4, 0, 1, 3); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -769,7 +771,7 @@ void testSubstationCreation() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(5, 0, 1, 4); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -805,7 +807,7 @@ void testVoltageLevelCreation() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(2, 0, 0, 1); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -910,7 +912,7 @@ void testLineSplitWithVoltageLevel() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(2, 0, 0, 1); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -972,7 +974,7 @@ void testLineAttachToVoltageLevel() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(2, 0, 0, 1); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -1022,7 +1024,7 @@ void testLinesAttachToSplitLines() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(2, 0, 0, 1); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -1090,7 +1092,7 @@ void testDeleteAttachingLine() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(2, 0, 0, 1); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -1132,7 +1134,7 @@ void testDeleteVoltageLevelOnLine() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(2, 0, 0, 1); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } @@ -1391,7 +1393,7 @@ void testStaticVarCompensatorCreation() { networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); assertRequestsCount(5, 0, 1, 3); - RuntimeException exception = assertThrows(RuntimeException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); + NetworkModificationGroupNotFoundException exception = assertThrows(NetworkModificationGroupNotFoundException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true)); assertEquals("Modification Group not found 7928181c-7977-4592-ba19-88027e4254e4", exception.getMessage()); } From 08ec8735ca8a09bd398fc133223da025a0a63bf1 Mon Sep 17 00:00:00 2001 From: Joris Mancini Date: Wed, 7 Jan 2026 11:18:26 +0100 Subject: [PATCH 7/8] revert: extra formatting in ModificationControllerTest Signed-off-by: Joris Mancini --- .../server/ModificationControllerTest.java | 517 +++++++++--------- 1 file changed, 244 insertions(+), 273 deletions(-) diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index f074907dd..1e6a6c6c3 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -187,8 +187,7 @@ private boolean existTombstonedEquipmentInfos(String equipmentId, UUID networkUu } private void assertApplicationStatusOK(MvcResult mvcResult) throws Exception { - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().get(0).isPresent()); assertNotEquals(NetworkModificationResult.ApplicationStatus.WITH_ERRORS, networkModificationsResult.modificationResults().get(0).get().getApplicationStatus()); @@ -236,51 +235,47 @@ void testModificationGroups() throws Exception { String resultAsString; EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() - .equipmentType(IdentifiableType.SWITCH) - .equipmentAttributeName("open") - .equipmentAttributeValue(true) - .equipmentId("v1b1") - .build(); + .equipmentType(IdentifiableType.SWITCH) + .equipmentAttributeName("open") + .equipmentAttributeValue(true) + .equipmentId("v1b1") + .build(); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); // no groups mvcResult = mockMvc.perform(get("/v1/groups")).andExpectAll(status().isOk(), content().contentType(MediaType.APPLICATION_JSON)).andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List bsicListResult = mapper.readValue(resultAsString, new TypeReference<>() { - }); + List bsicListResult = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(bsicListResult, List.of()); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); - // switch opening to create the default group + // switch opening to create the default group mvcResult = mockMvc.perform(get("/v1/groups")).andExpectAll( - status().isOk(), - content().contentType(MediaType.APPLICATION_JSON)) - .andReturn(); + status().isOk(), + content().contentType(MediaType.APPLICATION_JSON)) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List bsicListResultUUID = mapper.readValue(resultAsString, new TypeReference<>() { - }); + List bsicListResultUUID = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(bsicListResultUUID, List.of(TEST_GROUP_ID)); mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications", TEST_GROUP_ID)).andExpectAll( - status().isOk(), - content().contentType(MediaType.APPLICATION_JSON)) - .andReturn(); + status().isOk(), + content().contentType(MediaType.APPLICATION_JSON)) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List bsicListResulModifInfos = mapper.readValue(resultAsString, new TypeReference<>() { - }); + List bsicListResulModifInfos = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(1, bsicListResulModifInfos.size()); mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=true", TEST_GROUP_ID)) - .andExpectAll(status().isOk(), content().contentType(MediaType.APPLICATION_JSON)) - .andReturn(); + .andExpectAll(status().isOk(), content().contentType(MediaType.APPLICATION_JSON)) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List bsicListResultInfos = mapper.readValue(resultAsString, new TypeReference<>() { - }); + List bsicListResultInfos = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(1, bsicListResultInfos.size()); // delete the default modification group of a network mockMvc.perform(delete("/v1/groups/{groupUuid}", TEST_GROUP_ID)) - .andExpect(status().isOk()); + .andExpect(status().isOk()); mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=true", TEST_GROUP_ID)) .andExpect(status().isInternalServerError()) @@ -291,12 +286,11 @@ void testModificationGroups() throws Exception { }); mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=true&errorOnGroupNotFound=false", TEST_GROUP_ID)).andExpectAll( - status().isOk(), - content().contentType(MediaType.APPLICATION_JSON)) - .andReturn(); + status().isOk(), + content().contentType(MediaType.APPLICATION_JSON)) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List bsicListModificationInfos = mapper.readValue(resultAsString, new TypeReference<>() { - }); + List bsicListModificationInfos = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(bsicListModificationInfos, List.of()); } @@ -304,12 +298,12 @@ void testModificationGroups() throws Exception { void testRestoreNetworkModifications() throws Exception { MvcResult mvcResult; EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() - .equipmentType(IdentifiableType.SWITCH) - .equipmentAttributeName("open") - .equipmentAttributeValue(true) - .equipmentId("v1b1") - .stashed(true) - .build(); + .equipmentType(IdentifiableType.SWITCH) + .equipmentAttributeName("open") + .equipmentAttributeValue(true) + .equipmentId("v1b1") + .stashed(true) + .build(); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -320,10 +314,10 @@ void testRestoreNetworkModifications() throws Exception { String uuidString = modifications.get(0).getUuid().toString(); mockMvc.perform(put(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString) - .queryParam("stashed", "false")) - .andExpect(status().isOk()); + .queryParam("groupUuid", TEST_GROUP_ID.toString()) + .queryParam("uuids", uuidString) + .queryParam("stashed", "false")) + .andExpect(status().isOk()); assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, true, true, true).size()); } @@ -331,12 +325,12 @@ void testRestoreNetworkModifications() throws Exception { void testStashNetworkModifications() throws Exception { MvcResult mvcResult; EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() - .equipmentType(IdentifiableType.SWITCH) - .equipmentAttributeName("open") - .equipmentAttributeValue(true) - .equipmentId("v1b1") - .stashed(true) - .build(); + .equipmentType(IdentifiableType.SWITCH) + .equipmentAttributeName("open") + .equipmentAttributeValue(true) + .equipmentId("v1b1") + .stashed(true) + .build(); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -346,10 +340,10 @@ void testStashNetworkModifications() throws Exception { assertEquals(1, modifications.size()); String uuidString = modifications.get(0).getUuid().toString(); mockMvc.perform(put(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString) - .queryParam("stashed", "true")) - .andExpect(status().isOk()); + .queryParam("groupUuid", TEST_GROUP_ID.toString()) + .queryParam("uuids", uuidString) + .queryParam("stashed", "true")) + .andExpect(status().isOk()); assertEquals(true, modificationRepository.getModificationInfo(UUID.fromString(uuidString)).getStashed()); } @@ -425,11 +419,11 @@ void updateModificationDescription() throws Exception { void testDeleteModification() throws Exception { MvcResult mvcResult; EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() - .equipmentType(IdentifiableType.SWITCH) - .equipmentAttributeName("open") - .equipmentAttributeValue(true) - .equipmentId("v1b1") - .build(); + .equipmentType(IdentifiableType.SWITCH) + .equipmentAttributeName("open") + .equipmentAttributeValue(true) + .equipmentId("v1b1") + .build(); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -439,22 +433,22 @@ void testDeleteModification() throws Exception { assertEquals(1, modifications.size()); String uuidString = modifications.get(0).getUuid().toString(); mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", UUID.randomUUID().toString()) - .queryParam("uuids", uuidString)) - .andExpect(status().isInternalServerError()); + .queryParam("groupUuid", UUID.randomUUID().toString()) + .queryParam("uuids", uuidString)) + .andExpect(status().isInternalServerError()); mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString)) - .andExpect(status().isOk()); + .queryParam("groupUuid", TEST_GROUP_ID.toString()) + .queryParam("uuids", uuidString)) + .andExpect(status().isOk()); assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); /* non existing modification */ mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString)) - .andExpect(status().isInternalServerError()); + .queryParam("groupUuid", TEST_GROUP_ID.toString()) + .queryParam("uuids", uuidString)) + .andExpect(status().isInternalServerError()); mockMvc.perform(delete("/v1/groups/" + TEST_GROUP_ID)).andExpect(status().isOk()); mockMvc.perform(delete("/v1/groups/" + TEST_GROUP_ID)).andExpect(status().isInternalServerError()); mockMvc.perform(delete("/v1/groups/" + TEST_GROUP_ID).queryParam("errorOnGroupNotFound", "false")).andExpect(status().isOk()); @@ -467,24 +461,25 @@ void testDeleteAllModification() throws Exception { assertEquals(3, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", TEST_GROUP_ID.toString())) - .andExpect(status().isOk()); + .queryParam("groupUuid", TEST_GROUP_ID.toString())) + .andExpect(status().isOk()); assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); } @Test void testDeleteModificationMissingParamError() throws Exception { mockMvc.perform(delete(URI_NETWORK_MODIF_BASE)) - .andExpect(status().isInternalServerError()) - .andExpect(result -> assertInstanceOf(NetworkModificationServerException.class, result.getResolvedException())) - .andExpect(result -> assertEquals("Modification deletion error: need to specify the group or give a list of UUIDs", result.getResolvedException().getMessage())); + .andExpect(status().isInternalServerError()) + .andExpect(result -> assertInstanceOf(NetworkModificationServerException.class, result.getResolvedException())) + .andExpect(result -> assertEquals("Modification deletion error: need to specify the group or give a list of UUIDs", result.getResolvedException().getMessage())); } @Test void testNetworkModificationsWithErrorOnNetworkFlush() throws Exception { + GroovyScriptInfos groovyScriptInfos = GroovyScriptInfos.builder() - .script("network.getGenerator('idGenerator').targetP=10\nnetwork.getGenerator('idGenerator').targetP=20\n") - .build(); + .script("network.getGenerator('idGenerator').targetP=10\nnetwork.getGenerator('idGenerator').targetP=20\n") + .build(); String groovyScriptInfosJson = getJsonBody(groovyScriptInfos, TEST_NETWORK_WITH_FLUSH_ERROR_ID, NetworkCreation.VARIANT_ID); MvcResult mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON), status().isInternalServerError()); assertTrue(mvcResult.getResponse().getContentAsString().contains("\"detail\":\"flush-error-root-cause\"")); @@ -494,8 +489,8 @@ void testNetworkModificationsWithErrorOnNetworkFlush() throws Exception { @Test void testMultipleModificationsWithError() throws Exception { GroovyScriptInfos groovyScriptInfos = GroovyScriptInfos.builder() - .script("network.getGenerator('idGenerator').targetP=10\nnetwork.getGenerator('idGenerator').targetP=20\n") - .build(); + .script("network.getGenerator('idGenerator').targetP=10\nnetwork.getGenerator('idGenerator').targetP=20\n") + .build(); String groovyScriptInfosJson = getJsonBody(groovyScriptInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); // apply groovy script without error MvcResult mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); @@ -506,11 +501,11 @@ void testMultipleModificationsWithError() throws Exception { groovyScriptInfos.setScript("network.getGenerator('there is no generator').targetP=30\nnetwork.getGenerator('idGenerator').targetP=40\n"); groovyScriptInfosJson = getJsonBody(groovyScriptInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + .andExpect(status().isOk()); assertNotNull(network.getGenerator("idGenerator")); assertEquals(20, network.getGenerator("idGenerator").getTargetP(), 0.1); assertLogMessage("Technical error: java.lang.NullPointerException: Cannot set property 'targetP' on null object", - ERROR_MESSAGE_KEY, reportService); + ERROR_MESSAGE_KEY, reportService); assertEquals(2, modificationRepository.getModifications(TEST_GROUP_ID, true, true).size()); } @@ -518,10 +513,10 @@ void testMultipleModificationsWithError() throws Exception { private List createSomeSwitchModifications(UUID groupId, int number) throws Exception { List openStates = List.of(true, false); EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() - .equipmentType(IdentifiableType.SWITCH) - .equipmentAttributeName("open") - .equipmentId("v1b1") - .build(); + .equipmentType(IdentifiableType.SWITCH) + .equipmentAttributeName("open") + .equipmentId("v1b1") + .build(); MvcResult mvcResult; for (int i = 0; i < number; i++) { switchStatusModificationInfos.setEquipmentAttributeValue(openStates.get(i % 2)); @@ -536,9 +531,9 @@ private List createSomeSwitchModifications(UUID groupId, int private ModificationInfos createDeletionModification(UUID groupId, IdentifiableType equipmentType, String equipmentName) throws Exception { EquipmentDeletionInfos equipmentDeletionInfos = EquipmentDeletionInfos.builder() - .equipmentType(equipmentType) - .equipmentId(equipmentName) - .build(); + .equipmentType(equipmentType) + .equipmentId(equipmentName) + .build(); String bodyJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); MvcResult mvcResult = runRequestAsync(mockMvc, post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + groupId).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -715,8 +710,8 @@ void testCopyModificationWithUnexistingId() throws Exception { String bodyJson = getJsonBody(duplicateModificationUuidList, NetworkCreation.VARIANT_ID); String url = "/v1/groups/" + TEST_GROUP_ID + "?action=COPY" + "&before=" + modificationUuidList.get(0); mockMvc.perform(put(url).content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); var newModificationList = modificationRepository.getModifications(TEST_GROUP_ID, true, true); List newModificationUuidList = newModificationList.stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); @@ -777,18 +772,18 @@ void createGeneratorWithStartup() throws Exception { void testMoveModificationInSameGroup() throws Exception { // create 2 modifications in a single group List modificationUuidList = createSomeSwitchModifications(TEST_GROUP_ID, 2). - stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); + stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); // swap modifications: move [1] before [0] List movingModificationUuidList = List.of(modificationUuidList.get(1)); String bodyJson = getJsonBody(movingModificationUuidList, NetworkCreation.VARIANT_ID); String url = "/v1/groups/" + TEST_GROUP_ID + "?action=MOVE" + "&before=" + modificationUuidList.get(0); mockMvc.perform(put(url).content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); var newModificationUuidList = modificationRepository.getModifications(TEST_GROUP_ID, true, true). - stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); + stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); assertNotNull(newModificationUuidList); Collections.reverse(newModificationUuidList); // swap => reverse order is expected assertEquals(modificationUuidList, newModificationUuidList); @@ -810,8 +805,7 @@ void testNetworkCompositeModification() throws Exception { ModificationInfos compositeModificationInfos = CompositeModificationInfos.builder() .modifications(modificationList) .build(); - UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertThat(modificationRepository.getModificationInfo(compositeModificationUuid)).recursivelyEquals(compositeModificationInfos); // get the modification infos (metadata only) @@ -820,8 +814,7 @@ void testNetworkCompositeModification() throws Exception { // get the composite modification (metadata only) mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid + "/network-modifications")) .andExpect(status().isOk()).andReturn(); - List compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + List compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals(modificationsNumber, compositeModificationContent.size()); for (int i = 0; i < modificationUuids.size(); i++) { assertEquals(modificationInfosList.get(i).getMessageValues(), compositeModificationContent.get(i).getMessageValues()); @@ -836,8 +829,7 @@ void testNetworkCompositeModification() throws Exception { // get the composite modification (complete data) mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid + "/network-modifications?onlyMetadata=false")) .andExpect(status().isOk()).andReturn(); - compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals("open", ((EquipmentAttributeModificationInfos) compositeModificationContent.get(0)).getEquipmentAttributeName()); assertEquals(Boolean.TRUE, ((EquipmentAttributeModificationInfos) compositeModificationContent.get(0)).getEquipmentAttributeValue()); assertEquals(IdentifiableType.SWITCH, ((EquipmentAttributeModificationInfos) compositeModificationContent.get(0)).getEquipmentType()); @@ -871,21 +863,19 @@ void testNetworkCompositeModificationOld() throws Exception { List modificationUuids = modificationList.stream().map(ModificationInfos::getUuid).toList(); MvcResult mvcResult; mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) - .content(mapper.writeValueAsString(modificationUuids)).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + .content(mapper.writeValueAsString(modificationUuids)).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn(); ModificationInfos compositeModificationInfos = CompositeModificationInfos.builder() - .modifications(modificationList) - .build(); - UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + .modifications(modificationList) + .build(); + UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertThat(modificationRepository.getModificationInfo(compositeModificationUuid)).recursivelyEquals(compositeModificationInfos); assertEquals(modificationsNumber, modificationRepository.getModifications(TEST_GROUP_ID, true, true).size()); // get the composite modification (metadata only) mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid + "/network-modifications")) - .andExpect(status().isOk()).andReturn(); - List compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + .andExpect(status().isOk()).andReturn(); + List compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals(modificationsNumber, compositeModificationContent.size()); assertNotNull(compositeModificationContent.get(0).getMessageType()); assertNotNull(compositeModificationContent.get(0).getMessageValues()); @@ -897,8 +887,7 @@ void testNetworkCompositeModificationOld() throws Exception { // get the composite modification (complete data) mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid + "/network-modifications?onlyMetadata=false")) .andExpect(status().isOk()).andReturn(); - compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals("open", ((EquipmentAttributeModificationInfos) compositeModificationContent.get(0)).getEquipmentAttributeName()); assertEquals(Boolean.TRUE, ((EquipmentAttributeModificationInfos) compositeModificationContent.get(0)).getEquipmentAttributeValue()); assertEquals(IdentifiableType.SWITCH, ((EquipmentAttributeModificationInfos) compositeModificationContent.get(0)).getEquipmentType()); @@ -925,9 +914,9 @@ void testMoveModificationBetweenTwoGroups() throws Exception { // create 4 modifications in destination group (3 switch updates + 1 load deletion in s3) List destinationModificationUuidList = ListUtils.union( - createSomeSwitchModifications(TEST_GROUP_ID, 3).stream().map(ModificationInfos::getUuid).toList(), - List.of(createDeletionModification(TEST_GROUP_ID, IdentifiableType.LOAD, "v5load").getUuid()) - ); + createSomeSwitchModifications(TEST_GROUP_ID, 3).stream().map(ModificationInfos::getUuid).toList(), + List.of(createDeletionModification(TEST_GROUP_ID, IdentifiableType.LOAD, "v5load").getUuid()) + ); // create 1 modification in origin group (1 load deletion in s1) UUID originSingleModification = createDeletionModification(TEST_GROUP2_ID, IdentifiableType.LOAD, "v1load").getUuid(); @@ -938,8 +927,7 @@ void testMoveModificationBetweenTwoGroups() throws Exception { MvcResult mvcResult = runRequestAsync(mockMvc, put(url).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); // incremental build: deletion impacts expected, all related to the moved load deletion (dealing with "s1" substation) - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().get(0).isPresent()); networkModificationsResult.modificationResults().get(0).get().getNetworkImpacts().forEach(i -> { @@ -951,7 +939,7 @@ void testMoveModificationBetweenTwoGroups() throws Exception { // check destination var newDestinationModificationUuidList = modificationRepository.getModifications(TEST_GROUP_ID, true, true). - stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); + stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); assertNotNull(newDestinationModificationUuidList); // Expect: existing list + the moved one List expectedDestinationModificationUuidList = ListUtils.union(destinationModificationUuidList, movingModificationUuidList); @@ -959,7 +947,7 @@ void testMoveModificationBetweenTwoGroups() throws Exception { // check origin var newOriginModificationUuidList = modificationRepository.getModifications(TEST_GROUP2_ID, true, true). - stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); + stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); assertNotNull(newOriginModificationUuidList); // Expect: empty assertEquals(List.of(), newOriginModificationUuidList); @@ -969,7 +957,7 @@ void testMoveModificationBetweenTwoGroups() throws Exception { void testMoveModificationWithUnexistingId() throws Exception { // create 2 modifications List modificationUuidList = createSomeSwitchModifications(TEST_GROUP_ID, 2). - stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); + stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); // try to move an unexisting modification before [0]: no error, no change List movingModificationUuidList = List.of(UUID.randomUUID()); @@ -977,11 +965,11 @@ void testMoveModificationWithUnexistingId() throws Exception { String url = "/v1/groups/" + TEST_GROUP_ID + "?action=MOVE" + "&originGroupUuid=" + TEST_GROUP_ID + "&before=" + modificationUuidList.get(0); mockMvc.perform(put(url).content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); var newModificationUuidList = modificationRepository.getModifications(TEST_GROUP_ID, true, true). - stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); + stream().map(ModificationInfos::getUuid).collect(Collectors.toList()); assertNotNull(newModificationUuidList); // nothing has changed in modification group assertEquals(modificationUuidList, newModificationUuidList); @@ -1002,25 +990,25 @@ void testDuplicateModificationGroup() throws Exception { CurrentLimitsInfos c2 = new CurrentLimitsInfos(); c2.setPermanentLimit(200.0); LineCreationInfos lineCreationInfos = LineCreationInfos.builder() - .equipmentId("idLine1") - .equipmentName("nameLine1") - .r(100.0) - .x(100.0) - .g1(10.0) - .b1(10.0) - .g2(20.0) - .b2(20.0) - .voltageLevelId1("v1") - .busOrBusbarSectionId1("bus1") - .voltageLevelId2("v2") - .busOrBusbarSectionId2("bus2") - .operationalLimitsGroups( - List.of( - OperationalLimitsGroupInfos.builder().id("olg1").currentLimits(c1).applicability(SIDE1).build(), - OperationalLimitsGroupInfos.builder().id("olg1").currentLimits(c2).applicability(SIDE2).build() + .equipmentId("idLine1") + .equipmentName("nameLine1") + .r(100.0) + .x(100.0) + .g1(10.0) + .b1(10.0) + .g2(20.0) + .b2(20.0) + .voltageLevelId1("v1") + .busOrBusbarSectionId1("bus1") + .voltageLevelId2("v2") + .busOrBusbarSectionId2("bus2") + .operationalLimitsGroups( + List.of( + OperationalLimitsGroupInfos.builder().id("olg1").currentLimits(c1).applicability(SIDE1).build(), + OperationalLimitsGroupInfos.builder().id("olg1").currentLimits(c2).applicability(SIDE2).build() + ) ) - ) - .build(); + .build(); bodyJson = getJsonBody(lineCreationInfos, TEST_NETWORK_BUS_BREAKER_ID, null); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); @@ -1032,14 +1020,14 @@ void testDuplicateModificationGroup() throws Exception { //create a lineAttached LineCreationInfos attachmentLine = LineCreationInfos.builder() - .equipmentId("attachmentLine") - .r(50.6) - .x(25.3) - .build(); + .equipmentId("attachmentLine") + .r(50.6) + .x(25.3) + .build(); LineAttachToVoltageLevelInfos lineAttachToVL = new LineAttachToVoltageLevelInfos("line3", - 10.0, "AttPointId", "attPointName", null, null, "v4", - "1.A", attachmentLine, "nl1", "NewLine1", "nl2", "NewLine2"); + 10.0, "AttPointId", "attPointName", null, null, "v4", + "1.A", attachmentLine, "nl1", "NewLine1", "nl2", "NewLine2"); String bodyJson2 = getJsonBody(lineAttachToVL, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -1048,7 +1036,7 @@ void testDuplicateModificationGroup() throws Exception { //create a lineSplit LineSplitWithVoltageLevelInfos lineSplitWoVL = new LineSplitWithVoltageLevelInfos("line1", 10.0, null, "v4", "1.A", - "nl11", "NewLine11", "nl12", "NewLine12"); + "nl11", "NewLine11", "nl12", "NewLine12"); bodyJson2 = getJsonBody(lineSplitWoVL, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -1066,13 +1054,13 @@ void testDuplicateModificationGroup() throws Exception { String uuidString = modifications.get(0).getUuid().toString(); mockMvc.perform(put(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString) - .queryParam("stashed", "true")) - .andExpect(status().isOk()); + .queryParam("groupUuid", TEST_GROUP_ID.toString()) + .queryParam("uuids", uuidString) + .queryParam("stashed", "true")) + .andExpect(status().isOk()); List stashedModifications = modificationRepository.getModificationsMetadata(TEST_GROUP_ID, true); List modificationAfterStash = modificationRepository.getModificationsMetadata(TEST_GROUP_ID, false) - .stream().filter(modificationInfos -> !modificationInfos.getStashed()).toList(); + .stream().filter(modificationInfos -> !modificationInfos.getStashed()).toList(); assertEquals(1, stashedModifications.size()); assertEquals(4, modificationAfterStash.size()); @@ -1101,7 +1089,7 @@ void replaceTeePointByVoltageLevelOnLineDuplicateModificationGroupTest() throws UUID newGroupUuid = UUID.randomUUID(); String copyGroupUriString = "/v1/groups?groupUuid=" + newGroupUuid + "&duplicateFrom=" + TEST_GROUP_ID + "&reportUuid=" + UUID.randomUUID(); mockMvc.perform(post(copyGroupUriString)) - .andExpect(status().isOk()); + .andExpect(status().isOk()); testNetworkModificationsCount(newGroupUuid, 1); } @@ -1110,16 +1098,16 @@ void replaceTeePointByVoltageLevelOnLineDuplicateModificationGroupTest() throws void testGroupDuplication() throws Exception { // create new load in voltage level with node/breaker topology (in voltage level "v2" and busbar section "1B") LoadCreationInfos loadCreationInfos = LoadCreationInfos.builder() - .equipmentId("idLoad1") - .equipmentName("nameLoad1") - .voltageLevelId("v2") - .busOrBusbarSectionId("1B") - .loadType(LoadType.AUXILIARY) - .p0(100.0) - .q0(60.0) - .connectionDirection(ConnectablePosition.Direction.BOTTOM) - .connectionName("bottom") - .build(); + .equipmentId("idLoad1") + .equipmentName("nameLoad1") + .voltageLevelId("v2") + .busOrBusbarSectionId("1B") + .loadType(LoadType.AUXILIARY) + .p0(100.0) + .q0(60.0) + .connectionDirection(ConnectablePosition.Direction.BOTTOM) + .connectionName("bottom") + .build(); String loadCreationInfosJson = getJsonBody(loadCreationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); MvcResult mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(loadCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -1145,9 +1133,9 @@ void testTombstonedEquipmentInfos() throws Exception { assertTrue(tombstonedEquipmentInfosRepository.findAllByNetworkUuidAndVariantId(TEST_NETWORK_ID_2, VariantManagerConstants.INITIAL_VARIANT_ID).isEmpty()); EquipmentDeletionInfos equipmentDeletionInfos = EquipmentDeletionInfos.builder() - .equipmentType(IdentifiableType.LOAD) - .equipmentId("v1load") - .build(); + .equipmentType(IdentifiableType.LOAD) + .equipmentId("v1load") + .build(); String equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); // delete load @@ -1163,8 +1151,7 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentId("v3load"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VARIANT_NOT_EXISTING_ID); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - Optional networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + Optional networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertTrue(networkModificationsResult.isPresent()); assertFalse(networkModificationsResult.get().modificationResults().isEmpty()); assertEquals(1, networkModificationsResult.get().modificationResults().size()); @@ -1426,8 +1413,7 @@ private void testNetworkModificationsCount(UUID groupUuid, int actualSize) throw mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=true", groupUuid).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List modificationsTestGroupId = mapper.readValue(resultAsString, new TypeReference<>() { - }); + List modificationsTestGroupId = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(actualSize, modificationsTestGroupId.size()); } @@ -1479,12 +1465,11 @@ void testGetLineTypesCatalog() throws Exception { // Check if the catalog is empty mvcResult = mockMvc - .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List emptyLineTypes = mapper.readValue(resultAsString, new TypeReference<>() { - }); + List emptyLineTypes = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(0, emptyLineTypes.size()); // Create the catalog with some line types @@ -1494,13 +1479,12 @@ void testGetLineTypesCatalog() throws Exception { // Check if the catalog is complete avoiding the duplicate entry mvcResult = mockMvc - .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) - .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List lineTypes = mapper.readValue(resultAsString, new TypeReference<>() { - }); + List lineTypes = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(10, lineTypes.size()); // Check if catalog is completely updated @@ -1509,26 +1493,24 @@ void testGetLineTypesCatalog() throws Exception { .andExpect(status().isOk()); mvcResult = mockMvc - .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) - .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List lineTypes2 = mapper.readValue(resultAsString, new TypeReference<>() { - }); + List lineTypes2 = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(2, lineTypes2.size()); mockMvc.perform(delete(URI_LINE_CATALOG)) - .andExpect(status().isOk()); + .andExpect(status().isOk()); // Check if the catalog is empty mvcResult = mockMvc - .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - emptyLineTypes = mapper.readValue(resultAsString, new TypeReference<>() { - }); + emptyLineTypes = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(0, emptyLineTypes.size()); } @@ -1543,8 +1525,7 @@ void testGetLineTypeWithLimitsCatalog() throws Exception { .andExpect(status().isOk()) .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List emptyLineTypes = mapper.readValue(resultAsString, new TypeReference<>() { - }); + List emptyLineTypes = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(0, emptyLineTypes.size()); // Create the catalog with some line types @@ -1557,8 +1538,7 @@ void testGetLineTypeWithLimitsCatalog() throws Exception { .andExpect(status().isOk()) .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List lineTypes = mapper.readValue(resultAsString, new TypeReference<>() { - }); + List lineTypes = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(2, lineTypes.size()); // getting the whole catalog does not load the limits assertNull(lineTypes.get(0).getLimitsForLineType()); @@ -1568,8 +1548,7 @@ void testGetLineTypeWithLimitsCatalog() throws Exception { .andExpect(status().isOk()) .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - LineTypeInfos selectedLineType = mapper.readValue(resultAsString, new TypeReference<>() { - }); + LineTypeInfos selectedLineType = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(2, selectedLineType.getLimitsForLineType().size()); assertEquals("LimitSet1", selectedLineType.getLimitsForLineType().getFirst().getLimitSetName()); assertEquals(10.0, selectedLineType.getLimitsForLineType().getFirst().getPermanentLimit()); @@ -1592,11 +1571,11 @@ void testPostLineTypeWithLimitsCatalogError() throws Exception { .file(createMockMultipartFile(NOT_EXISTING_JSON_FILE)); mockMvc.perform(mockMultipartHttpServletRequestBuilder) - .andExpect(result -> { - assertNotNull(result.getResolvedException()); - assertEquals("java.io.EOFException", - result.getResolvedException().getMessage()); - }); + .andExpect(result -> { + assertNotNull(result.getResolvedException()); + assertEquals("java.io.EOFException", + result.getResolvedException().getMessage()); + }); } @Test @@ -1688,10 +1667,9 @@ void testCreateVoltageInitModification() throws Exception { // Get the modifications MvcResult mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=false", groupUuid)).andExpectAll( status().isOk(), content().contentType(MediaType.APPLICATION_JSON)) - .andReturn(); + .andReturn(); - List modificationsInfos2 = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + List modificationsInfos2 = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals(1, modificationsInfos2.size()); assertThat(modificationsInfos2.get(0)).recursivelyEquals(modificationsInfos1); } @@ -1700,12 +1678,12 @@ void testCreateVoltageInitModification() throws Exception { void testDeleteStashedNetworkModifications() throws Exception { MvcResult mvcResult; EquipmentAttributeModificationInfos loadModificationInfos = EquipmentAttributeModificationInfos.builder() - .equipmentType(IdentifiableType.LOAD) - .equipmentAttributeName("open") - .equipmentAttributeValue(true) - .equipmentAttributeName("v1load") - .equipmentId("v1load") - .build(); + .equipmentType(IdentifiableType.LOAD) + .equipmentAttributeName("open") + .equipmentAttributeValue(true) + .equipmentAttributeName("v1load") + .equipmentId("v1load") + .build(); String loadModificationInfosJson = getJsonBody(loadModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(loadModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); @@ -1714,10 +1692,10 @@ void testDeleteStashedNetworkModifications() throws Exception { assertEquals(1, modifications.size()); String uuidString = modifications.get(0).getUuid().toString(); mockMvc.perform(put(URI_NETWORK_MODIF_BASE) - .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString) - .queryParam("stashed", "true")) - .andExpect(status().isOk()); + .queryParam("groupUuid", TEST_GROUP_ID.toString()) + .queryParam("uuids", uuidString) + .queryParam("stashed", "true")) + .andExpect(status().isOk()); assertEquals(1, modificationRepository.getModifications(TEST_GROUP_ID, true, true, true).size()); mockMvc.perform(delete("/v1/groups/" + TEST_GROUP_ID + "/stashed-modifications").queryParam("errorOnGroupNotFound", "false")).andExpect(status().isOk()); assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, true, true, true).size()); @@ -1753,18 +1731,16 @@ void testDuplicateCompositeModification() throws Exception { mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) .content(mapper.writeValueAsString(modificationUuidList)).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); // Duplicate it without group ownership mvcResult = mockMvc.perform( - post(URI_COMPOSITE_NETWORK_MODIF_BASE + "/duplication") + post(URI_COMPOSITE_NETWORK_MODIF_BASE + "/duplication") .content(objectWriter.writeValueAsString(List.of(compositeModificationUuid))) .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + .andExpect(status().isOk()).andReturn(); - Map returnedMap = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + Map returnedMap = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals(1, returnedMap.size()); Map.Entry returnedIds = returnedMap.entrySet().stream().findFirst().get(); UUID returnedSourceId = returnedIds.getKey(); @@ -1783,8 +1759,8 @@ void testDuplicateCompositeModification() throws Exception { // now delete the duplicate modification mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) - .queryParam("uuids", returnedNewId.toString())) - .andExpect(status().isOk()); + .queryParam("uuids", returnedNewId.toString())) + .andExpect(status().isOk()); // source group has not changed groupModifications = modificationRepository.getModifications(TEST_GROUP_ID, true, true, false); @@ -1806,9 +1782,8 @@ void testUpdateNetworkCompositeModification() throws Exception { List modificationUuids = modificationList.stream().map(ModificationInfos::getUuid).toList(); MvcResult mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) .content(mapper.writeValueAsString(modificationUuids)).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); - UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + .andExpect(status().isOk()).andReturn(); + UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); // Create new modifications to use in the update int newModificationsNumber = 2; @@ -1818,13 +1793,12 @@ void testUpdateNetworkCompositeModification() throws Exception { // Update the composite modification with the new modifications mockMvc.perform(put(URI_COMPOSITE_NETWORK_MODIF_BASE + "/" + compositeModificationUuid) .content(mapper.writeValueAsString(newModificationUuids)).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + .andExpect(status().isOk()); // Get the composite modification content and verify it has been updated mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid + "/network-modifications?onlyMetadata=false")) - .andExpect(status().isOk()).andReturn(); - List updatedCompositeContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + .andExpect(status().isOk()).andReturn(); + List updatedCompositeContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals(newModificationsNumber, updatedCompositeContent.size()); } @@ -1837,7 +1811,7 @@ void testUpdateNetworkCompositeModificationWithNonexistentUuid() throws Exceptio mockMvc.perform(put(URI_COMPOSITE_NETWORK_MODIF_BASE + "/" + nonExistentUuid) .content(mapper.writeValueAsString(modificationUuids)).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isInternalServerError()); + .andExpect(status().isInternalServerError()); } @Test @@ -1848,20 +1822,18 @@ void testUpdateNetworkCompositeModificationWithEmptyList() throws Exception { MvcResult mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) .content(mapper.writeValueAsString(modificationUuids)).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); - UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + .andExpect(status().isOk()).andReturn(); + UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); // Update the composite with an empty list of modifications mockMvc.perform(put(URI_COMPOSITE_NETWORK_MODIF_BASE + "/" + compositeModificationUuid) .content(mapper.writeValueAsString(Collections.emptyList())).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + .andExpect(status().isOk()); // Verify that the composite now contains no modifications mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid + "/network-modifications?onlyMetadata=false")) - .andExpect(status().isOk()).andReturn(); - List updatedCompositeContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + .andExpect(status().isOk()).andReturn(); + List updatedCompositeContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertTrue(updatedCompositeContent.isEmpty()); } @@ -1873,10 +1845,9 @@ void testMetadata() throws Exception { UUID switchModificationId = modificationList.get(0).getUuid(); MvcResult mvcResult = mockMvc.perform(get(URI_NETWORK_MODIF_BASE + "/metadata?ids={id}", switchModificationId) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); - List metadata = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn(); + List metadata = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals(1, metadata.size()); assertEquals(switchModificationId, metadata.get(0).getId()); assertEquals(EQUIPMENT_ATTRIBUTE_MODIFICATION, metadata.get(0).getType()); @@ -1909,7 +1880,7 @@ void testVerifyModifications() throws Exception { // try to verify unexisting modification mockMvc.perform(get("/v1/groups/{groupId}/network-modifications/verify", TEST_GROUP_ID) - .param("uuids", UUID.randomUUID().toString())) + .param("uuids", UUID.randomUUID().toString())) .andExpect(status().isInternalServerError()); // try to verify invalid modification @@ -1928,9 +1899,9 @@ void testSearchModificationInfos() throws Exception { // Substation Modification ID : s1 assertNotNull(network.getSubstation("s1")); SubstationModificationInfos substationModificationInfos = SubstationModificationInfos.builder() - .equipmentId("s1") - .equipmentName(AttributeModification.toAttributeModification("newSubstationName", OperationType.SET)) - .build(); + .equipmentId("s1") + .equipmentName(AttributeModification.toAttributeModification("newSubstationName", OperationType.SET)) + .build(); String substationModificationInfosJson = getJsonBody(substationModificationInfos, TEST_NETWORK_ID, null); MvcResult mvcResult1 = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(substationModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult1); @@ -1944,9 +1915,9 @@ void testSearchModificationInfos() throws Exception { // Load deletion ID : v5load EquipmentDeletionInfos equipmentDeletionInfos = EquipmentDeletionInfos.builder() - .equipmentType(IdentifiableType.LOAD) - .equipmentId("v5load") - .build(); + .equipmentType(IdentifiableType.LOAD) + .equipmentId("v5load") + .build(); String equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, null); runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); MvcResult mvcModificationResult; @@ -1955,15 +1926,15 @@ void testSearchModificationInfos() throws Exception { // search modifications by equipment id containing userInput "id" mvcModificationResult = mockMvc.perform(get(URI_NETWORK_MODIF_BASE + "/indexation-infos?networkUuid={networkUuid}&userInput={userInput}", - TEST_NETWORK_ID, "id") - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + TEST_NETWORK_ID, "id") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); networkModificationsResult = mapper.readValue( - mvcModificationResult.getResponse().getContentAsString(), - new TypeReference<>() { - }); + mvcModificationResult.getResponse().getContentAsString(), + new TypeReference<>() { + }); assertEquals(1, networkModificationsResult.size()); modificationsSearchResult = networkModificationsResult.get(TEST_GROUP_ID); assertEquals(1, modificationsSearchResult.size()); @@ -1973,15 +1944,15 @@ void testSearchModificationInfos() throws Exception { // search modifications by equipment id containing userInput "v" mvcModificationResult = mockMvc.perform(get(URI_NETWORK_MODIF_BASE + "/indexation-infos?networkUuid={networkUuid}&userInput={userInput}", - TEST_NETWORK_ID, "load") - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + TEST_NETWORK_ID, "load") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); networkModificationsResult = mapper.readValue( - mvcModificationResult.getResponse().getContentAsString(), - new TypeReference<>() { - }); + mvcModificationResult.getResponse().getContentAsString(), + new TypeReference<>() { + }); assertEquals(1, networkModificationsResult.size()); modificationsSearchResult = networkModificationsResult.get(TEST_GROUP_ID); assertEquals("EQUIPMENT_DELETION", modificationsSearchResult.getFirst().getMessageType()); @@ -1989,15 +1960,15 @@ void testSearchModificationInfos() throws Exception { // search modifications by equipment id containing userInput "s1" mvcModificationResult = mockMvc.perform(get(URI_NETWORK_MODIF_BASE + "/indexation-infos?networkUuid={networkUuid}&userInput={userInput}", - TEST_NETWORK_ID, "s1") - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + TEST_NETWORK_ID, "s1") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); networkModificationsResult = mapper.readValue( - mvcModificationResult.getResponse().getContentAsString(), - new TypeReference<>() { - }); + mvcModificationResult.getResponse().getContentAsString(), + new TypeReference<>() { + }); assertEquals(1, networkModificationsResult.size()); modificationsSearchResult = networkModificationsResult.get(TEST_GROUP_ID); assertEquals("SUBSTATION_MODIFICATION", modificationsSearchResult.getFirst().getMessageType()); @@ -2005,14 +1976,14 @@ void testSearchModificationInfos() throws Exception { // search modifications by non existing equipment Id "notFound" mvcModificationResult = mockMvc.perform(get(URI_NETWORK_MODIF_BASE + "/indexation-infos?networkUuid={networkUuid}&userInput={userInput}", - TEST_NETWORK_ID, "notFound") - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + TEST_NETWORK_ID, "notFound") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); networkModificationsResult = mapper.readValue( - mvcModificationResult.getResponse().getContentAsString(), - new TypeReference<>() { - }); + mvcModificationResult.getResponse().getContentAsString(), + new TypeReference<>() { + }); assertEquals(0, networkModificationsResult.size()); } } From 69f9edd5e42ab6dfbc62bcbb979d37121da8650d Mon Sep 17 00:00:00 2001 From: Joris Mancini Date: Wed, 7 Jan 2026 11:28:58 +0100 Subject: [PATCH 8/8] revert: minimal changes for using BaseRestExcpetionHandler in tests Signed-off-by: Joris Mancini --- .../gridsuite/modification/server/ServerNameProvider.java | 6 ++---- src/test/resources/application-default.yml | 4 ---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/test/java/org/gridsuite/modification/server/ServerNameProvider.java b/src/test/java/org/gridsuite/modification/server/ServerNameProvider.java index 1b476be79..47a646e3e 100644 --- a/src/test/java/org/gridsuite/modification/server/ServerNameProvider.java +++ b/src/test/java/org/gridsuite/modification/server/ServerNameProvider.java @@ -6,7 +6,6 @@ */ package org.gridsuite.modification.server; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** @@ -15,10 +14,9 @@ @Component public class ServerNameProvider implements com.powsybl.ws.commons.error.ServerNameProvider { - private final String name; + private final String name = "network-modification-server"; - public ServerNameProvider(@Value("${spring.application.name:network-modification-server}") String name) { - this.name = name; + public ServerNameProvider() { } @Override diff --git a/src/test/resources/application-default.yml b/src/test/resources/application-default.yml index d2f993e4b..3f2a04d86 100644 --- a/src/test/resources/application-default.yml +++ b/src/test/resources/application-default.yml @@ -1,8 +1,4 @@ spring: - main: - web-application-type: servlet - application: - name: network-modification-server jpa: database: H2 properties: