From ce3adf7493b1cdb96bd68f6cac2a278bd3923cdd Mon Sep 17 00:00:00 2001 From: Ayoub LABIDI Date: Sun, 17 May 2026 18:09:55 +0200 Subject: [PATCH] Apply network modifications asynchronously Signed-off-by: Ayoub LABIDI --- .../server/CompositeController.java | 23 +- .../server/NetworkModificationController.java | 47 ++- .../service/ApplicationExecContext.java | 79 +++++ .../ModificationApplicationWorkerService.java | 42 +++ .../service/NetworkModificationService.java | 80 ++--- .../server/service/NotificationService.java | 10 + src/main/resources/config/application.yaml | 22 +- .../server/CompositeControllerTest.java | 55 ++-- .../server/ModificationControllerTest.java | 306 ++++++++++-------- .../AbstractInjectionModificationTest.java | 16 +- .../AbstractNetworkModificationTest.java | 74 +++-- .../BatteryCreationInBusBreakerTest.java | 6 +- .../BatteryCreationInNodeBreakerTest.java | 43 +-- .../BatteryModificationTest.java | 68 +--- .../DeleteAttachingLineTest.java | 17 +- .../DeleteVoltageLevelOnLineTest.java | 13 +- .../EquipmentAttributeModificationTest.java | 49 +-- .../modifications/EquipmentDeletionTest.java | 23 +- .../modifications/GenerationDispatchTest.java | 27 +- .../GeneratorCreationInBusBreakerTest.java | 9 +- .../GeneratorCreationInNodeBreakerTest.java | 44 +-- .../GeneratorModificationTest.java | 86 +---- .../modifications/GeneratorScalingTest.java | 30 +- .../modifications/GroovyScriptTest.java | 48 +-- .../server/modifications/LccCreationTest.java | 12 +- .../LineAttachToVoltageLevelTest.java | 13 +- .../LineCreationInBusBreakerTest.java | 6 +- .../LineCreationInNodeBreakerTest.java | 28 +- .../modifications/LineModificationTest.java | 107 ++---- .../LineSplitWithNewVoltageLevelTest.java | 6 +- .../LineSplitWithVoltageLevelTest.java | 15 +- .../LinesAttachToSplitLinesTest.java | 12 +- .../LoadCreationInNodeBreakerTest.java | 28 +- .../modifications/LoadModificationTest.java | 6 +- .../server/modifications/LoadScalingTest.java | 34 +- ...usModificationEnergiseSideOneLineTest.java | 6 +- ...usModificationEnergiseSideTwoLineTest.java | 6 +- ...tingStatusModificationLockoutLineTest.java | 11 +- ...ntCompensatorCreationInBusBreakerTest.java | 6 +- ...tCompensatorCreationInNodeBreakerTest.java | 12 +- .../ShuntCompensatorModificationTest.java | 40 +-- ...arCompensatorCreationInBusBreakerTest.java | 9 +- ...rCompensatorCreationInNodeBreakerTest.java | 62 ++-- .../modifications/SubstationCreationTest.java | 6 +- .../SubstationModificationTest.java | 6 +- ...ingsTransformerCreationBusBreakerTest.java | 21 +- ...gsTransformerCreationMixedBreakerTest.java | 9 +- ...ngsTransformerCreationNodeBreakerTest.java | 31 +- ...woWindingsTransformerModificationTest.java | 23 +- .../VoltageInitModificationTest.java | 11 +- .../VoltageLevelCreationTest.java | 40 +-- .../VoltageLevelModificationTest.java | 13 +- .../VoltageLevelTopologyModificationTest.java | 15 +- .../server/modifications/VscCreationTest.java | 42 +-- .../AbstractModificationByAssignmentTest.java | 20 +- .../AbstractByFormulaModificationTest.java | 13 +- .../AbstractByFilterDeletionTest.java | 13 +- .../TabularGeneratorCreationsTest.java | 33 +- .../TabularGeneratorModificationsTest.java | 27 +- .../server/service/BuildTest.java | 8 +- .../service/EquipmentIndexationTest.java | 54 +++- .../service/ModificationIndexationTest.java | 35 +- .../modification/server/utils/ApiUtils.java | 21 +- .../modification/server/utils/TestUtils.java | 7 +- src/test/resources/application-default.yml | 2 +- 65 files changed, 808 insertions(+), 1278 deletions(-) create mode 100644 src/main/java/org/gridsuite/modification/server/service/ApplicationExecContext.java create mode 100644 src/main/java/org/gridsuite/modification/server/service/ModificationApplicationWorkerService.java diff --git a/src/main/java/org/gridsuite/modification/server/CompositeController.java b/src/main/java/org/gridsuite/modification/server/CompositeController.java index 89fd56789..4abf084f0 100644 --- a/src/main/java/org/gridsuite/modification/server/CompositeController.java +++ b/src/main/java/org/gridsuite/modification/server/CompositeController.java @@ -13,7 +13,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.dto.ModificationApplicationContext; -import org.gridsuite.modification.server.dto.NetworkModificationsResult; import org.gridsuite.modification.server.service.NetworkModificationService; import org.springframework.data.util.Pair; import org.springframework.http.MediaType; @@ -23,7 +22,6 @@ import java.util.List; import java.util.Map; import java.util.UUID; -import java.util.concurrent.CompletableFuture; /** * @author Mathieu Deharbe @@ -47,20 +45,21 @@ public CompositeController(NetworkModificationService networkModificationService @PutMapping(value = "/groups/{groupUuid}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Insert a list of composite network modifications passed in body at the end of a group") @ApiResponse(responseCode = "200", description = "The composite modification list has been added to the group.") - public CompletableFuture> insertCompositeModifications( + public ResponseEntity> insertCompositeModifications( @Parameter(description = "updated group UUID, where modifications are inserted") @PathVariable("groupUuid") UUID targetGroupUuid, @Parameter(description = "Insertion method", required = true) @RequestParam(value = "action") CompositeModificationAction action, + @Parameter(description = "Receiver for async apply notification") @RequestParam(value = "receiver", required = false) String receiver, @RequestBody Pair>, List> modificationContextInfos) { - return switch (action) { - case SPLIT -> networkModificationService.splitCompositeModifications( - targetGroupUuid, - modificationContextInfos - ).thenApply(ResponseEntity.ok()::body); - case INSERT -> networkModificationService.insertCompositeModifications( - targetGroupUuid, - modificationContextInfos - ).thenApply(ResponseEntity.ok()::body); + List savedUuids = switch (action) { + case SPLIT -> networkModificationService.saveSplitCompositeModifications( + targetGroupUuid, modificationContextInfos.getFirst()); + case INSERT -> networkModificationService.saveInsertCompositeModifications( + targetGroupUuid, modificationContextInfos.getFirst()); }; + if (receiver != null) { + networkModificationService.applicationRequest(targetGroupUuid, savedUuids, modificationContextInfos.getSecond(), receiver); + } + return ResponseEntity.ok(savedUuids); } @PutMapping(value = "/groups/{groupUuid}/sub-modifications/{modificationUuid}", diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java index 155f01991..bf8e4507b 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java @@ -24,7 +24,6 @@ import org.springframework.web.multipart.MultipartFile; import java.util.*; -import java.util.concurrent.CompletableFuture; /** * @author Franck Lecuyer @@ -96,37 +95,24 @@ public ResponseEntity> duplicateGroup(@RequestParam("groupUuid") @PutMapping(value = "/groups/{groupUuid}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "For a list of network modifications passed in body, Move them before another one or at the end of the list, or Duplicate them at the end of the list") @ApiResponse(responseCode = "200", description = "The modification list of the group has been updated.") - public CompletableFuture> handleNetworkModifications( + public ResponseEntity> handleNetworkModifications( @Parameter(description = "updated group UUID, where modifications are pasted") @PathVariable("groupUuid") UUID targetGroupUuid, @Parameter(description = "kind of modification", required = true) @RequestParam(value = "action") GroupModificationAction action, @Parameter(description = "the modification Uuid to move before (MOVE option, empty means moving at the end)") @RequestParam(value = "before", required = false) UUID beforeModificationUuid, @Parameter(description = "origin group UUID, where modifications are copied or cut") @RequestParam(value = "originGroupUuid", required = false) UUID originGroupUuid, - @Parameter(description = "modifications can be applied (default is true)") @RequestParam(value = "build", required = false, defaultValue = "true") Boolean canApply, + @Parameter(description = "Receiver for async apply notification") @RequestParam(value = "receiver", required = false) String receiver, @RequestBody Pair, List> modificationContextInfos) { - return switch (action) { - case COPY -> - networkModificationService.duplicateModifications( - targetGroupUuid, - originGroupUuid, - modificationContextInfos.getFirst(), - modificationContextInfos.getSecond() - ).thenApply(ResponseEntity.ok()::body); - case MOVE -> { - UUID sourceGroupUuid = originGroupUuid == null ? targetGroupUuid : originGroupUuid; - boolean applyModifications = canApply; - if (sourceGroupUuid.equals(targetGroupUuid)) { - applyModifications = false; - } - yield networkModificationService.moveModifications( - targetGroupUuid, - sourceGroupUuid, - beforeModificationUuid, - modificationContextInfos.getFirst(), - modificationContextInfos.getSecond(), - applyModifications - ).thenApply(ResponseEntity.ok()::body); - } + UUID sourceGroupUuid = originGroupUuid == null ? targetGroupUuid : originGroupUuid; + List savedUuids = switch (action) { + case COPY -> networkModificationService.saveDuplicateModifications( + targetGroupUuid, originGroupUuid, modificationContextInfos.getFirst()); + case MOVE -> networkModificationService.saveMoveModifications( + targetGroupUuid, sourceGroupUuid, beforeModificationUuid, modificationContextInfos.getFirst()); }; + if (receiver != null) { + networkModificationService.applicationRequest(targetGroupUuid, savedUuids, modificationContextInfos.getSecond(), receiver); + } + return ResponseEntity.ok(savedUuids); } @DeleteMapping(value = "/groups/{groupUuid}") @@ -143,11 +129,16 @@ public ResponseEntity deleteModificationGroup(@Parameter(description = "Gr @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "The network modification was created"), @ApiResponse(responseCode = "404", description = "The network or equipment was not found")}) - public CompletableFuture> createNetworkModification( + public ResponseEntity> createNetworkModification( @Parameter(description = "Group UUID") @RequestParam(name = "groupUuid") UUID groupUuid, + @Parameter(description = "Receiver for async apply notification") @RequestParam(name = "receiver", required = false) String receiver, @RequestBody Pair> modificationContextInfos) { modificationContextInfos.getFirst().check(); - return networkModificationService.createNetworkModification(groupUuid, modificationContextInfos.getFirst(), modificationContextInfos.getSecond()).thenApply(ResponseEntity.ok()::body); + List savedUuids = networkModificationService.saveNetworkModification(groupUuid, modificationContextInfos.getFirst()); + if (receiver != null) { + networkModificationService.applicationRequest(groupUuid, savedUuids, modificationContextInfos.getSecond(), receiver); + } + return ResponseEntity.ok(savedUuids); } @PutMapping(value = "/network-modifications/{uuid}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/src/main/java/org/gridsuite/modification/server/service/ApplicationExecContext.java b/src/main/java/org/gridsuite/modification/server/service/ApplicationExecContext.java new file mode 100644 index 000000000..2c2d9979e --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/service/ApplicationExecContext.java @@ -0,0 +1,79 @@ +/** + * Copyright (c) 2026, 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.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.powsybl.commons.PowsyblException; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.gridsuite.modification.server.dto.ModificationApplicationContext; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHeaders; +import org.springframework.messaging.support.MessageBuilder; + +import java.io.UncheckedIOException; +import java.util.List; +import java.util.UUID; + +import static org.gridsuite.modification.server.service.NotificationService.RECEIVER_HEADER; + +/** + * @author Ayoub LABIDI + */ +@Getter +@AllArgsConstructor +public class ApplicationExecContext { + + static final String GROUP_UUID_HEADER = "groupUuid"; + static final String MODIFICATION_UUIDS_HEADER = "modificationUuids"; + + private final UUID groupUuid; + private final List modificationUuids; + private final List applicationContexts; + private final String receiver; + + private static String getNonNullHeader(MessageHeaders headers, String name) { + String header = (String) headers.get(name); + if (header == null) { + throw new PowsyblException("Header '" + name + "' not found"); + } + return header; + } + + public static ApplicationExecContext fromMessage(Message message, ObjectMapper objectMapper) { + MessageHeaders headers = message.getHeaders(); + UUID groupUuid = UUID.fromString(getNonNullHeader(headers, GROUP_UUID_HEADER)); + String receiver = getNonNullHeader(headers, RECEIVER_HEADER); + try { + List modificationUuids = objectMapper.readValue( + getNonNullHeader(headers, MODIFICATION_UUIDS_HEADER), + new TypeReference<>() { }); + List applicationContexts = objectMapper.readValue( + message.getPayload(), + new TypeReference<>() { }); + return new ApplicationExecContext(groupUuid, modificationUuids, applicationContexts, receiver); + } catch (JsonProcessingException e) { + throw new UncheckedIOException(e); + } + } + + public Message toMessage(ObjectMapper objectMapper) { + try { + String contextsJson = objectMapper.writeValueAsString(applicationContexts); + String uuidsJson = objectMapper.writeValueAsString(modificationUuids); + return MessageBuilder.withPayload(contextsJson) + .setHeader(GROUP_UUID_HEADER, groupUuid.toString()) + .setHeader(MODIFICATION_UUIDS_HEADER, uuidsJson) + .setHeader(RECEIVER_HEADER, receiver) + .build(); + } catch (JsonProcessingException e) { + throw new UncheckedIOException(e); + } + } +} diff --git a/src/main/java/org/gridsuite/modification/server/service/ModificationApplicationWorkerService.java b/src/main/java/org/gridsuite/modification/server/service/ModificationApplicationWorkerService.java new file mode 100644 index 000000000..f4c61b126 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/service/ModificationApplicationWorkerService.java @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2026, 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.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import org.gridsuite.modification.server.dto.NetworkModificationsResult; +import org.springframework.context.annotation.Bean; +import org.springframework.messaging.Message; +import org.springframework.stereotype.Service; + +import java.util.function.Consumer; + +/** + * @author Ayoub LABIDI + */ +@Service +@RequiredArgsConstructor +public class ModificationApplicationWorkerService { + + @NonNull private final NetworkModificationService networkModificationService; + @NonNull private final NotificationService notificationService; + @NonNull private final ObjectMapper objectMapper; + + @Bean + public Consumer> consumeApplication() { + return message -> { + ApplicationExecContext ctx = ApplicationExecContext.fromMessage(message, objectMapper); + notificationService.emitApplicationResultMessage( + new NetworkModificationsResult( + ctx.getModificationUuids(), + networkModificationService.applyModificationsByUuids( + ctx.getGroupUuid(), ctx.getModificationUuids(), ctx.getApplicationContexts())), + ctx.getReceiver()); + }; + } +} 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 bfcfb47b4..f10fd174c 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -284,11 +284,10 @@ public void restoreNetworkModifications(UUID groupUuid, @NonNull List modi networkModificationRepository.getModificationsCount(groupUuid, false)); } - public CompletableFuture createNetworkModification(@NonNull UUID groupUuid, @NonNull ModificationInfos modificationInfo, @NonNull List applicationContexts) { - List modifications = networkModificationRepository.saveModificationInfos(groupUuid, List.of(modificationInfo)); - List ids = modifications.stream().map(ModificationInfos::getUuid).toList(); - return applyModifications(groupUuid, modifications, applicationContexts).thenApply(results -> - new NetworkModificationsResult(ids, results)); + @Transactional + public List saveNetworkModification(@NonNull UUID groupUuid, @NonNull ModificationInfos modificationInfo) { + return networkModificationRepository.saveModificationInfos(groupUuid, List.of(modificationInfo)) + .stream().map(ModificationInfos::getUuid).toList(); } /** @@ -376,21 +375,32 @@ public void stopBuildRequest(String receiver) { notificationService.emitCancelBuildMessage(receiver); } + public void applicationRequest(@NonNull UUID groupUuid, @NonNull List modificationUuids, + @NonNull List contexts, @NonNull String receiver) { + notificationService.emitApplicationMessage( + new ApplicationExecContext(groupUuid, modificationUuids, contexts, receiver).toMessage(objectMapper)); + } + + public List> applyModificationsByUuids( + @NonNull UUID groupUuid, @NonNull List modificationUuids, + @NonNull List contexts) { + List modifications = modificationUuids.stream() + .map(networkModificationRepository::getModificationInfo) + .toList(); + return applyModifications(groupUuid, modifications, contexts).join(); + } + public void deleteNetworkModifications(UUID groupUuid, List modificationsUuids) { if (networkModificationRepository.deleteModifications(groupUuid, modificationsUuids) == 0) { throw new NetworkModificationException(MODIFICATION_NOT_FOUND); } } - public CompletableFuture moveModifications(@NonNull UUID destinationGroupUuid, @NonNull UUID originGroupUuid, UUID beforeModificationUuid, - @NonNull List modificationsToMoveUuids, @NonNull List applicationContexts, - boolean applyModifications) { - // update origin/destinations groups to cut and paste all modificationsToMove - // FullDto needed for toModificationInfos() after the modifications have been applied - List modifications = networkModificationRepository.moveModifications(destinationGroupUuid, originGroupUuid, modificationsToMoveUuids, beforeModificationUuid); - - CompletableFuture>> futureResult = applyModifications && !modifications.isEmpty() ? applyModifications(destinationGroupUuid, modifications, applicationContexts) : CompletableFuture.completedFuture(List.of()); - return futureResult.thenApply(result -> new NetworkModificationsResult(modifications.stream().map(ModificationInfos::getUuid).toList(), result)); + @Transactional + public List saveMoveModifications(@NonNull UUID destinationGroupUuid, @NonNull UUID originGroupUuid, + UUID beforeModificationUuid, @NonNull List modificationsToMoveUuids) { + return networkModificationRepository.moveModifications(destinationGroupUuid, originGroupUuid, modificationsToMoveUuids, beforeModificationUuid) + .stream().map(ModificationInfos::getUuid).toList(); } public void moveSubModification( @@ -441,37 +451,29 @@ private CompletableFuture> applyModification return CompletableFuture.completedFuture(Optional.empty()); } - 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 + @Transactional + public List saveDuplicateModifications(@NonNull UUID targetGroupUuid, UUID originGroupUuid, @NonNull List modificationsUuids) { + if (originGroupUuid != null && !modificationsUuids.isEmpty()) { // Duplicate from a group or from a list, not both throw new NetworkModificationServerException(DUPLICATION_ARGUMENT_INVALID); } - List duplicateModifications = networkModificationRepository.saveDuplicateModifications(targetGroupUuid, originGroupUuid, modificationsUuids); - List ids = duplicateModifications.stream().map(ModificationInfos::getUuid).toList(); - return applyModifications(targetGroupUuid, duplicateModifications, applicationContexts).thenApply(result -> - new NetworkModificationsResult(ids, result)); + return networkModificationRepository.saveDuplicateModifications(targetGroupUuid, originGroupUuid, modificationsUuids) + .stream().map(ModificationInfos::getUuid).toList(); } /** - * all their network modifications are extracted from the composite modifications and inserted into the group + * Extracts all network modifications from composite modifications and inserts them individually into the group */ - public CompletableFuture splitCompositeModifications( - @NonNull UUID targetGroupUuid, - @NonNull Pair>, List> modificationContextInfos) { - List compositesUuids = modificationContextInfos.getFirst().stream().map(Pair::getFirst).toList(); - List modifications = networkModificationRepository.extractModificationsFromCompositesAndSave(targetGroupUuid, compositesUuids); - List ids = modifications.stream().map(ModificationInfos::getUuid).toList(); - return applyModifications(targetGroupUuid, modifications, modificationContextInfos.getSecond()).thenApply(result -> - new NetworkModificationsResult(ids, result)); - } - - public CompletableFuture insertCompositeModifications( - @NonNull UUID targetGroupUuid, - @NonNull Pair>, List> modificationContextInfos) { - List modifications = networkModificationRepository.insertCompositeModifications( - targetGroupUuid, modificationContextInfos.getFirst()); - List ids = modifications.stream().map(ModificationInfos::getUuid).toList(); - return applyModifications(targetGroupUuid, modifications, modificationContextInfos.getSecond()).thenApply(result -> - new NetworkModificationsResult(ids, result)); + @Transactional + public List saveSplitCompositeModifications(@NonNull UUID targetGroupUuid, @NonNull List> compositesInfos) { + List compositesUuids = compositesInfos.stream().map(Pair::getFirst).toList(); + return networkModificationRepository.extractModificationsFromCompositesAndSave(targetGroupUuid, compositesUuids) + .stream().map(ModificationInfos::getUuid).toList(); + } + + @Transactional + public List saveInsertCompositeModifications(@NonNull UUID targetGroupUuid, @NonNull List> compositesInfos) { + return networkModificationRepository.insertCompositeModifications(targetGroupUuid, compositesInfos) + .stream().map(ModificationInfos::getUuid).toList(); } @Transactional diff --git a/src/main/java/org/gridsuite/modification/server/service/NotificationService.java b/src/main/java/org/gridsuite/modification/server/service/NotificationService.java index 0b29688b8..c2e3522d8 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NotificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NotificationService.java @@ -8,6 +8,7 @@ import lombok.NonNull; import org.gridsuite.modification.server.dto.NetworkModificationResult; +import org.gridsuite.modification.server.dto.NetworkModificationsResult; import org.gridsuite.modification.server.dto.WorkflowType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,4 +67,13 @@ public void emitCancelBuildMessage(@NonNull String receiver) { .build(); sendMessage(message, "publishCancelBuild-out-0"); } + + public void emitApplicationMessage(@NonNull Message message) { + sendMessage(message, "publishApplication-out-0"); + } + + public void emitApplicationResultMessage(@NonNull NetworkModificationsResult result, @NonNull String receiver) { + sendMessage(MessageBuilder.withPayload(result).setHeader(RECEIVER_HEADER, receiver).build(), + "publishApplicationResult-out-0"); + } } diff --git a/src/main/resources/config/application.yaml b/src/main/resources/config/application.yaml index f68627ccf..8073f7c16 100644 --- a/src/main/resources/config/application.yaml +++ b/src/main/resources/config/application.yaml @@ -18,7 +18,7 @@ spring: cloud: function: - definition: consumeBuild1;consumeBuild2;consumeCancelBuild + definition: consumeBuild1;consumeBuild2;consumeCancelBuild;consumeApplication stream: bindings: consumeBuild1-in-0: &consumeBuildConfig @@ -38,7 +38,16 @@ spring: destination: ${powsybl-ws.rabbitmq.destination.prefix:}build.cancel publishStoppedBuild-out-0: destination: ${powsybl-ws.rabbitmq.destination.prefix:}build.stopped - output-bindings: publishBuild-out-0;publishResultBuild-out-0;publishCancelBuild-out-0;publishStoppedBuild-out-0 + consumeApplication-in-0: + destination: ${powsybl-ws.rabbitmq.destination.prefix:}modification.run + group: modificationGroup + consumer: + max-attempts: 1 + publishApplication-out-0: + destination: ${powsybl-ws.rabbitmq.destination.prefix:}modification.run + publishApplicationResult-out-0: + destination: ${powsybl-ws.rabbitmq.destination.prefix:}modification.result + output-bindings: publishBuild-out-0;publishResultBuild-out-0;publishCancelBuild-out-0;publishStoppedBuild-out-0;publishApplication-out-0;publishApplicationResult-out-0 rabbit: bindings: consumeBuild1-in-0: &consumeBuildRabbitConfig @@ -52,6 +61,15 @@ spring: delivery-limit: 2 consumeBuild2-in-0: <<: *consumeBuildRabbitConfig + consumeApplication-in-0: + consumer: + auto-bind-dlq: true + dead-letter-exchange: ${powsybl-ws.rabbitmq.destination.prefix:}modification.run.dlx + dead-letter-queue-name: ${powsybl-ws.rabbitmq.destination.prefix:}modification.run.dlx.dlq + dead-letter-exchange-type: topic + quorum: + enabled: true + delivery-limit: 2 powsybl-ws: database: diff --git a/src/test/java/org/gridsuite/modification/server/CompositeControllerTest.java b/src/test/java/org/gridsuite/modification/server/CompositeControllerTest.java index 64c693773..18ce7b959 100644 --- a/src/test/java/org/gridsuite/modification/server/CompositeControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/CompositeControllerTest.java @@ -30,10 +30,13 @@ import org.junit.jupiter.api.Test; import org.mockito.stubbing.Answer; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.stream.binder.test.OutputDestination; import org.springframework.data.util.Pair; import org.springframework.http.MediaType; +import org.springframework.messaging.Message; import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; @@ -60,6 +63,7 @@ */ @AutoConfigureMockMvc @SpringBootTest +@ContextConfigurationWithTestChannel class CompositeControllerTest { private static final UUID TEST_NETWORK_ID = UUID.fromString("7928181c-7977-4592-ba19-88027e4254e4"); private static final UUID TEST_GROUP_ID = UUID.randomUUID(); @@ -68,11 +72,24 @@ class CompositeControllerTest { private static final String URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT = "/v1/network-composite-modifications/"; private static final String URI_NETWORK_MODIF_BASE = "/v1/network-modifications"; + private static final long TIMEOUT = 1000; + + @Value("${spring.cloud.stream.bindings.publishApplicationResult-out-0.destination}") + private String applicationResultDestination; + + @Value("${spring.cloud.stream.bindings.publishApplication-out-0.destination}") + private String applicationDestination; + + @Autowired + private OutputDestination output; + @Autowired private MockMvc mockMvc; private ObjectWriter objectWriter; + private MvcResult mvcResult; + @Autowired private NetworkModificationRepository modificationRepository; @@ -99,6 +116,7 @@ void setUp() { void tearOff() { // clean DB modificationRepository.deleteAll(); + output.clear(); } @Test @@ -110,7 +128,6 @@ void testSplit() throws Exception { // Create a composite modification with the switch modification 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(); @@ -169,12 +186,12 @@ void testSplit() throws Exception { List.of(Pair.of(compositeModificationUuid, "random name"))); mvcResult = runRequestAsync( mockMvc, - put(URI_COMPOSITE_NETWORK_MODIF_BASE + "/groups/" + TEST_GROUP_ID + "?action=SPLIT") + put(URI_COMPOSITE_NETWORK_MODIF_BASE + "/groups/" + TEST_GROUP_ID + "?action=SPLIT&receiver=me") .content(bodyJson) .contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + assertApplicationStatusOK(); List newModificationList = modificationRepository.getModifications(TEST_GROUP_ID, false, true); assertEquals(modificationsNumber * 2, newModificationList.size()); @@ -191,7 +208,6 @@ void testInsert() throws Exception { // Create a composite modification with the switch modification 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(); @@ -207,10 +223,10 @@ void testInsert() throws Exception { // insert the same composite modification inside as a complete composite, not split into regular network modifications mvcResult = runRequestAsync( mockMvc, - put(URI_COMPOSITE_NETWORK_MODIF_BASE + "/groups/" + TEST_GROUP_ID + "?action=INSERT") + put(URI_COMPOSITE_NETWORK_MODIF_BASE + "/groups/" + TEST_GROUP_ID + "?action=INSERT&receiver=me") .content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk() ); - assertApplicationStatusOK(mvcResult); + assertApplicationStatusOK(); List newModificationList = modificationRepository.getModifications(TEST_GROUP_ID, false, true); assertEquals(modificationsNumber + 1, newModificationList.size()); CompositeModificationInfos insertedComposite = (CompositeModificationInfos) newModificationList.stream().filter(modificationInfos -> @@ -233,12 +249,11 @@ private List createSomeSwitchModifications(UUID groupId, int .equipmentAttributeName("open") .equipmentId("v1b1") .build(); - MvcResult mvcResult; for (int i = 0; i < number; i++) { switchStatusModificationInfos.setEquipmentAttributeValue(openStates.get(i % 2)); String bodyJson = TestUtils.getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + groupId).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + groupId + "&receiver=me").content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); } var modificationList = modificationRepository.getModifications(groupId, false, true); assertEquals(number, modificationList.size()); @@ -249,8 +264,11 @@ private String getJsonBodyModificationCompositeInfos(List> mo return TestUtils.getJsonBodyModificationCompositeInfos(modifs, TEST_NETWORK_ID, VARIANT_ID); } - private void assertApplicationStatusOK(MvcResult mvcResult) throws Exception { - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + private void assertApplicationStatusOK() throws Exception { + Message resultMsg = output.receive(TIMEOUT, applicationResultDestination); + assertNotNull(resultMsg); + output.receive(TIMEOUT, applicationDestination); + NetworkModificationsResult networkModificationsResult = mapper.readValue(new String(resultMsg.getPayload()), new TypeReference<>() { }); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().getFirst().isPresent()); assertNotEquals(NetworkModificationResult.ApplicationStatus.WITH_ERRORS, networkModificationsResult.modificationResults().getFirst().get().getApplicationStatus()); @@ -261,7 +279,6 @@ void testDuplicateCompositeModification() throws Exception { // Create a composite modification with the modification List modificationList = createSomeSwitchModifications(TEST_GROUP_ID, 1); List modificationUuidList = modificationList.stream().map(ModificationInfos::getUuid).toList(); - MvcResult mvcResult; mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) .content(mapper.writeValueAsString(modificationUuidList)).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); @@ -314,7 +331,7 @@ void testUpdateNetworkCompositeModification() throws Exception { // Create a composite modification with the switch modifications List modificationUuids = modificationList.stream().map(ModificationInfos::getUuid).toList(); - MvcResult mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) + 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<>() { }); @@ -355,7 +372,7 @@ void testUpdateNetworkCompositeModificationWithEmptyList() throws Exception { List modificationList = createSomeSwitchModifications(TEST_GROUP_ID, 2); List modificationUuids = modificationList.stream().map(ModificationInfos::getUuid).toList(); - MvcResult mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) + 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<>() { }); @@ -379,7 +396,7 @@ void testMoveSubModificationWithinComposite() throws Exception { // Create 3 switch modifications and a composite containing them List modificationList = createSomeSwitchModifications(TEST_GROUP_ID, 3); List modificationUuids = modificationList.stream().map(ModificationInfos::getUuid).toList(); - MvcResult mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) + mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) .content(mapper.writeValueAsString(modificationUuids)).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); UUID compositeUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); @@ -435,7 +452,7 @@ void testMoveSubModificationFromCompositeToRoot() throws Exception { // Create a composite with 2 sub-modifications and add it to the group List subMods = createSomeSwitchModifications(TEST_GROUP2_ID, 2); List subModUuids = subMods.stream().map(ModificationInfos::getUuid).toList(); - MvcResult mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) + mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) .content(mapper.writeValueAsString(subModUuids)).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); UUID compositeUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); @@ -489,7 +506,7 @@ void testExpandToLeafUuidsNestedComposites() throws Exception { // Build nested structure: outerComposite → [innerComposite → [leaf1, leaf2], leaf3] List innerLeafs = createSomeSwitchModifications(TEST_GROUP_ID, 2); List innerLeafUuids = innerLeafs.stream().map(ModificationInfos::getUuid).toList(); - MvcResult mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) + mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) .content(mapper.writeValueAsString(innerLeafUuids)).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); UUID innerCompositeUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); @@ -557,7 +574,7 @@ void testMoveSubModificationFromRootToComposite() throws Exception { List subMods = createSomeSwitchModifications(TEST_GROUP2_ID, 1); List subModUuids = subMods.stream().map(ModificationInfos::getUuid).toList(); - MvcResult mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) + mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) .content(mapper.writeValueAsString(subModUuids)).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); UUID compositeUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); @@ -610,7 +627,7 @@ void testMoveSubModificationCycleDetection() throws Exception { List leafMods = createSomeSwitchModifications(TEST_GROUP_ID, 1); UUID leafUuid = leafMods.getFirst().getUuid(); - MvcResult mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) + mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) .content(mapper.writeValueAsString(List.of(leafUuid))).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); UUID composite3Uuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index 863cc947c..bb01018f9 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -48,9 +48,12 @@ import org.junit.jupiter.api.Test; import org.mockito.stubbing.Answer; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.stream.binder.test.OutputDestination; import org.springframework.http.MediaType; +import org.springframework.messaging.Message; import org.springframework.mock.web.MockMultipartFile; import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.MockMvc; @@ -88,6 +91,7 @@ @AutoConfigureMockMvc @SpringBootTest @Tag("IntegrationTest") +@ContextConfigurationWithTestChannel class ModificationControllerTest { private static final UUID TEST_NETWORK_ID = UUID.fromString("7928181c-7977-4592-ba19-88027e4254e4"); @@ -108,11 +112,26 @@ class ModificationControllerTest { private static final String LINE_TYPES_CATALOG_JSON_FILE_2 = "/line_types_catalog_2.json.gz"; private static final String LINE_TYPES_CATALOG_JSON_FILE_3 = "/line_types_catalog_3.json.gz"; private static final String NOT_EXISTING_JSON_FILE = "/not_existing_file.json.gz"; - private static final String NETWORK_MODIFICATION_URI = URI_NETWORK_MODIF_BASE + "?groupUuid=" + TEST_GROUP_ID; + private static final String NETWORK_MODIFICATION_URI = URI_NETWORK_MODIF_BASE + "?groupUuid=" + TEST_GROUP_ID + "&receiver=me"; @Autowired private MockMvc mockMvc; + @Autowired + private OutputDestination output; + + @Value("${spring.cloud.stream.bindings.publishApplicationResult-out-0.destination}") + private String applicationResultDestination; + + @Value("${spring.cloud.stream.bindings.publishApplication-out-0.destination}") + private String applicationDestination; + + private static final long TIMEOUT = 1000; + + private String lastResultJson; + + private MvcResult mvcResult; + @Autowired private ObjectMapper mapper; @MockitoBean @@ -175,14 +194,19 @@ void tearOff() { // clean DB modificationRepository.deleteAll(); equipmentInfosService.deleteAll(); + output.clear(); } private boolean existTombstonedEquipmentInfos(String equipmentId, UUID networkUuid, String variantId) { return tombstonedEquipmentInfosRepository.findAllByNetworkUuidAndVariantId(networkUuid, variantId).stream().anyMatch(t -> t.getId().equals(equipmentId)); } - private void assertApplicationStatusOK(MvcResult mvcResult) throws Exception { - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + private void assertApplicationStatusOK() throws Exception { + Message resultMsg = output.receive(TIMEOUT, applicationResultDestination); + assertNotNull(resultMsg, "No message received on " + applicationResultDestination); + output.receive(TIMEOUT, applicationDestination); + lastResultJson = new String(resultMsg.getPayload()); + NetworkModificationsResult networkModificationsResult = mapper.readValue(lastResultJson, 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,10 +236,10 @@ void testEquipmentIdNonNull() { @Test void testNetworkNotFound() throws Exception { String body = TestUtils.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(new NetworkModificationException(NETWORK_NOT_FOUND, NOT_FOUND_NETWORK_ID.toString()).getMessage(), mvcResult.getResponse().getContentAsString()); + // the controller always returns 200 (modification is saved), network-not-found is returned via the broker in async application + mockMvc.perform(post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + TEST_GROUP_ID) + .content(body).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); } @Test @@ -229,7 +253,6 @@ void assertThrowsUpdateModificationNotFound() { @Test void testNetworkModificationsToExport() throws Exception { - MvcResult mvcResult; String resultAsString; // Create two equipment modifications (exportable) @@ -247,7 +270,7 @@ void testNetworkModificationsToExport() throws Exception { .content(switchJson) .contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + assertApplicationStatusOK(); EquipmentAttributeModificationInfos loadModificationInfos = EquipmentAttributeModificationInfos.builder() .equipmentType(IdentifiableType.LOAD) @@ -258,8 +281,8 @@ void testNetworkModificationsToExport() throws Exception { .equipmentId("v1load") .build(); String loadModificationInfosJson = TestUtils.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); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(loadModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); // Create a non-exportable modification ByFormulaModificationInfos byFormulaModificationInfos = ByFormulaModificationInfos.builder() @@ -273,6 +296,8 @@ void testNetworkModificationsToExport() throws Exception { .content(customJson) .contentType(MediaType.APPLICATION_JSON), status().isOk()); + output.receive(TIMEOUT, applicationResultDestination); + output.receive(TIMEOUT, applicationDestination); // check group existance List groupUuids = networkModificationService.getModificationGroups(); @@ -309,7 +334,6 @@ void testNetworkModificationsToExport() throws Exception { @Test void testModificationGroups() throws Exception { - MvcResult mvcResult; String resultAsString; EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() @@ -323,9 +347,9 @@ void testModificationGroups() throws Exception { // no groups List bsicListResult = networkModificationService.getModificationGroups(); 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")); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + testElementModificationImpact(mapper, lastResultJson, Set.of("s1")); // switch opening to create the default group List bsicListResultUUID = networkModificationService.getModificationGroups(); @@ -362,7 +386,6 @@ void testModificationGroups() throws Exception { @Test void testRestoreNetworkModifications() throws Exception { - MvcResult mvcResult; EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() .equipmentType(IdentifiableType.SWITCH) .equipmentAttributeName("open") @@ -371,9 +394,9 @@ void testRestoreNetworkModifications() throws Exception { .stashed(true) .build(); String switchStatusModificationInfosJson = TestUtils.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); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + testElementModificationImpact(mapper, lastResultJson, Set.of("s1")); List modifications = modificationRepository.getModifications(TEST_GROUP_ID, true, true, false); assertEquals(1, modifications.size()); @@ -389,7 +412,6 @@ void testRestoreNetworkModifications() throws Exception { @Test void testStashNetworkModifications() throws Exception { - MvcResult mvcResult; EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() .equipmentType(IdentifiableType.SWITCH) .equipmentAttributeName("open") @@ -398,9 +420,9 @@ void testStashNetworkModifications() throws Exception { .stashed(true) .build(); String switchStatusModificationInfosJson = TestUtils.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); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + testElementModificationImpact(mapper, lastResultJson, Set.of("s1")); List modifications = modificationRepository.getModifications(TEST_GROUP_ID, false, true); assertEquals(1, modifications.size()); @@ -415,7 +437,6 @@ void testStashNetworkModifications() throws Exception { @Test void testDisableNetworkModifications() throws Exception { - MvcResult mvcResult; EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() .equipmentType(IdentifiableType.SWITCH) .equipmentAttributeName("open") @@ -425,9 +446,9 @@ void testDisableNetworkModifications() throws Exception { .activated(true) .build(); String switchStatusModificationInfosJson = TestUtils.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); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + testElementModificationImpact(mapper, lastResultJson, Set.of("s1")); List modifications = modificationRepository.getModifications(TEST_GROUP_ID, true, true); assertEquals(1, modifications.size()); @@ -448,7 +469,6 @@ void testDisableNetworkModifications() throws Exception { @Test void updateModificationDescription() throws Exception { - MvcResult mvcResult; EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() .equipmentType(IdentifiableType.SWITCH) .equipmentAttributeName("open") @@ -458,9 +478,9 @@ void updateModificationDescription() throws Exception { .description("old description") .build(); String updateModificationDescriptionJson = TestUtils.getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(updateModificationDescriptionJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(updateModificationDescriptionJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + testElementModificationImpact(mapper, lastResultJson, Set.of("s1")); List modifications = modificationRepository.getModifications(TEST_GROUP_ID, true, true); assertEquals(1, modifications.size()); @@ -483,7 +503,6 @@ void updateModificationDescription() throws Exception { @Test void testDeleteModification() throws Exception { - MvcResult mvcResult; EquipmentAttributeModificationInfos switchStatusModificationInfos = EquipmentAttributeModificationInfos.builder() .equipmentType(IdentifiableType.SWITCH) .equipmentAttributeName("open") @@ -491,9 +510,9 @@ void testDeleteModification() throws Exception { .equipmentId("v1b1") .build(); String switchStatusModificationInfosJson = TestUtils.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); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + testElementModificationImpact(mapper, lastResultJson, Set.of("s1")); List modifications = modificationRepository.getModifications(TEST_GROUP_ID, false, true); assertEquals(1, modifications.size()); @@ -523,7 +542,7 @@ void testDeleteModification() throws Exception { //test delete all modifications @Test void testDeleteAllModification() throws Exception { - List modificationList = createSomeSwitchModifications(TEST_GROUP_ID, 3); + createSomeSwitchModifications(TEST_GROUP_ID, 3); assertEquals(3, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) @@ -547,7 +566,10 @@ void testNetworkModificationsWithErrorOnNetworkFlush() throws Exception { .script("network.getGenerator('idGenerator').targetP=10\nnetwork.getGenerator('idGenerator').targetP=20\n") .build(); String groovyScriptInfosJson = TestUtils.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()); + // the controller always returns 200 (modification is saved), network-not-found is returned via the broker in async application + mockMvc.perform(post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + TEST_GROUP_ID) + .content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); assertEquals(1, modificationRepository.getModifications(TEST_GROUP_ID, true, false).size()); } @@ -559,8 +581,8 @@ void testMultipleModificationsWithError() throws Exception { .build(); String groovyScriptInfosJson = TestUtils.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()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); assertEquals(1, modificationRepository.getModifications(TEST_GROUP_ID, true, true).size()); // apply groovy script with error on the second @@ -583,12 +605,11 @@ private List createSomeSwitchModifications(UUID groupId, int .equipmentAttributeName("open") .equipmentId("v1b1") .build(); - MvcResult mvcResult; for (int i = 0; i < number; i++) { switchStatusModificationInfos.setEquipmentAttributeValue(openStates.get(i % 2)); String bodyJson = TestUtils.getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + groupId).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + groupId + "&receiver=me").content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); } var modificationList = modificationRepository.getModifications(groupId, false, true); assertEquals(number, modificationList.size()); @@ -601,8 +622,8 @@ private ModificationInfos createDeletionModification(UUID groupId, IdentifiableT .equipmentId(equipmentName) .build(); String bodyJson = TestUtils.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); + runRequestAsync(mockMvc, post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + groupId + "&receiver=me").content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); var modificationList = modificationRepository.getModifications(groupId, true, true); assertFalse(modificationList.isEmpty()); @@ -622,8 +643,8 @@ void testCopyModification() throws Exception { String bodyJson = getJsonBody(duplicateModificationUuidList, NetworkCreation.VARIANT_ID); - MvcResult mvcResult = runRequestAsync(mockMvc, put("/v1/groups/" + TEST_GROUP_ID + "?action=COPY").content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, put("/v1/groups/" + TEST_GROUP_ID + "?action=COPY&receiver=me").content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); var newModificationList = modificationRepository.getModifications(TEST_GROUP_ID, false, true); List newModificationUuidList = newModificationList.stream().map(ModificationInfos::getUuid).toList(); @@ -651,8 +672,8 @@ void testCopyModification() throws Exception { // Duplicate the same modifications, and append them at the end of this new group modification list. duplicateModificationUuidList = new ArrayList<>(modificationUuidList.subList(0, 2)); bodyJson = getJsonBody(duplicateModificationUuidList, NetworkCreation.VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, put("/v1/groups/" + otherGroupId + "?action=COPY").content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, put("/v1/groups/" + otherGroupId + "?action=COPY&receiver=me").content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); var newModificationListOtherGroup = modificationRepository.getModifications(otherGroupId, false, true); List newModificationUuidListOtherGroup = newModificationListOtherGroup.stream().map(ModificationInfos::getUuid).toList(); @@ -665,8 +686,8 @@ void testCopyModification() throws Exception { // Duplicate all modifications in TEST_GROUP_ID, and append them at the end of otherGroupId bodyJson = getJsonBody(List.of(), NetworkCreation.VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, put("/v1/groups/" + otherGroupId + "?action=COPY" + "&originGroupUuid=" + TEST_GROUP_ID).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, put("/v1/groups/" + otherGroupId + "?action=COPY" + "&originGroupUuid=" + TEST_GROUP_ID + "&receiver=me").content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); newModificationListOtherGroup = modificationRepository.getModifications(otherGroupId, true, true); // now 8 modifications in new group: first 3 are still the same, 5 last are new duplicates from first group @@ -703,9 +724,9 @@ void testCopyModificationOld() throws Exception { List badModificationUuidList = List.of(UUID.randomUUID(), UUID.randomUUID()); duplicateModificationUuidList.addAll(badModificationUuidList); String bodyJson = getJsonBody(duplicateModificationUuidList, NetworkCreation.VARIANT_ID); - String url = "/v1/groups/" + TEST_GROUP_ID + "?action=COPY"; - MvcResult mvcResult = runRequestAsync(mockMvc, put(url).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + String url = "/v1/groups/" + TEST_GROUP_ID + "?action=COPY&receiver=me"; + runRequestAsync(mockMvc, put(url).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); var newModificationList = modificationRepository.getModifications(TEST_GROUP_ID, false, true); List newModificationUuidList = newModificationList.stream().map(ModificationInfos::getUuid).toList(); @@ -733,10 +754,10 @@ void testCopyModificationOld() throws Exception { // Duplicate the same modifications, and append them at the end of this new group modification list. duplicateModificationUuidList = new ArrayList<>(modificationUuidList.subList(0, 2)); - String copyUrl = "/v1/groups/" + otherGroupId + "?action=COPY"; + String copyUrl = "/v1/groups/" + otherGroupId + "?action=COPY&receiver=me"; bodyJson = getJsonBody(duplicateModificationUuidList, NetworkCreation.VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, put(copyUrl).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, put(copyUrl).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); var newModificationListOtherGroup = modificationRepository.getModifications(otherGroupId, false, true); List newModificationUuidListOtherGroup = newModificationListOtherGroup.stream().map(ModificationInfos::getUuid).toList(); @@ -749,8 +770,8 @@ void testCopyModificationOld() throws Exception { // Duplicate all modifications in TEST_GROUP_ID, and append them at the end of otherGroupId String bodyJson2 = getJsonBody(List.of(), NetworkCreation.VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, put("/v1/groups/" + otherGroupId + "?action=COPY" + "&originGroupUuid=" + TEST_GROUP_ID).content(bodyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, put("/v1/groups/" + otherGroupId + "?action=COPY" + "&originGroupUuid=" + TEST_GROUP_ID + "&receiver=me").content(bodyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); newModificationListOtherGroup = modificationRepository.getModifications(otherGroupId, true, true); // now 8 modifications in new group: first 3 are still the same, 5 last are new duplicates from first group @@ -788,8 +809,8 @@ void createGeneratorWithStartup() throws Exception { // create and build generator without startup GeneratorCreationInfos generatorCreationInfos = ModificationCreation.getCreationGenerator("v2", "idGenerator1", "nameGenerator1", "1B", "v2load", "LOAD", "v1"); String generatorCreationInfosJson = TestUtils.getJsonBody(generatorCreationInfos, TEST_NETWORK_ID, null); - MvcResult mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); GeneratorStartup generatorStartup = network.getGenerator("idGenerator1").getExtension(GeneratorStartup.class); assertNull(generatorStartup); @@ -797,8 +818,8 @@ void createGeneratorWithStartup() throws Exception { // same for bus breaker GeneratorCreationInfos generatorCreationInfosBusBreaker = ModificationCreation.getCreationGenerator("v1", "idGenerator2", "nameGenerator2", "bus1", "idGenerator1", "GENERATOR", "v1"); generatorCreationInfosJson = TestUtils.getJsonBody(generatorCreationInfosBusBreaker, TEST_NETWORK_BUS_BREAKER_ID, null); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); generatorStartup = networkStoreService.getNetwork(TEST_NETWORK_BUS_BREAKER_ID, null).getGenerator("idGenerator2").getExtension(GeneratorStartup.class); assertNull(generatorStartup); @@ -807,9 +828,9 @@ void createGeneratorWithStartup() throws Exception { generatorCreationInfos.setEquipmentId("idGenerator21"); generatorCreationInfos.setMarginalCost(8.); generatorCreationInfosJson = TestUtils.getJsonBody(generatorCreationInfos, TEST_NETWORK_ID, null); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + assertApplicationStatusOK(); generatorStartup = network.getGenerator("idGenerator21").getExtension(GeneratorStartup.class); assertNotNull(generatorStartup); assertEquals(Double.NaN, generatorStartup.getPlannedActivePowerSetpoint(), 0); @@ -821,9 +842,9 @@ void createGeneratorWithStartup() throws Exception { generatorCreationInfosBusBreaker.setEquipmentId("idGenerator3"); generatorCreationInfosBusBreaker.setPlannedOutageRate(0.5); generatorCreationInfosJson = TestUtils.getJsonBody(generatorCreationInfosBusBreaker, TEST_NETWORK_BUS_BREAKER_ID, null); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + assertApplicationStatusOK(); generatorStartup = networkStoreService.getNetwork(TEST_NETWORK_BUS_BREAKER_ID, null).getGenerator("idGenerator3").getExtension(GeneratorStartup.class); assertNotNull(generatorStartup); assertEquals(Double.NaN, generatorStartup.getPlannedActivePowerSetpoint(), 0); @@ -871,11 +892,14 @@ void testMoveModificationBetweenTwoGroups() throws Exception { // cut origin[0] and append to destination List movingModificationUuidList = List.of(originSingleModification); String bodyJson = getJsonBody(movingModificationUuidList, NetworkCreation.VARIANT_ID); - String url = "/v1/groups/" + TEST_GROUP_ID + "?action=MOVE" + "&originGroupUuid=" + TEST_GROUP2_ID + "&build=true"; - MvcResult mvcResult = runRequestAsync(mockMvc, put(url).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + String url = "/v1/groups/" + TEST_GROUP_ID + "?action=MOVE" + "&originGroupUuid=" + TEST_GROUP2_ID + "&receiver=me"; + runRequestAsync(mockMvc, put(url).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + Message moveResultMsg = output.receive(TIMEOUT, applicationResultDestination); + assertNotNull(moveResultMsg); + output.receive(TIMEOUT, applicationDestination); // 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(new String(moveResultMsg.getPayload()), new TypeReference<>() { }); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().get(0).isPresent()); networkModificationsResult.modificationResults().get(0).get().getNetworkImpacts().forEach(i -> { @@ -925,10 +949,11 @@ void testMoveModificationWithUnexistingId() throws Exception { @Test void testDuplicateModificationGroup() throws Exception { - MvcResult mvcResult; VoltageLevelCreationInfos vl1 = ModificationCreation.getCreationVoltageLevel("s1", "vl1Id", "vl1Name"); String bodyJson = TestUtils.getJsonBody(vl1, TEST_NETWORK_BUS_BREAKER_ID, null); runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + output.receive(TIMEOUT, applicationResultDestination); + output.receive(TIMEOUT, applicationDestination); // create new line in voltage levels with node/breaker topology // between voltage level "v1" and busbar section "bus1" and @@ -959,10 +984,9 @@ void testDuplicateModificationGroup() throws Exception { .build(); bodyJson = TestUtils.getJsonBody(lineCreationInfos, TEST_NETWORK_BUS_BREAKER_ID, null); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); - String resultAsString = mvcResult.getResponse().getContentAsString(); - testBranchCreationImpacts(mapper, resultAsString, Set.of("s1", "s2")); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + testBranchCreationImpacts(mapper, lastResultJson, Set.of("s1", "s2")); testNetworkModificationsCount(TEST_GROUP_ID, 2); @@ -977,8 +1001,8 @@ void testDuplicateModificationGroup() throws Exception { 10.0, "AttPointId", "attPointName", null, null, "v4", "1.A", attachmentLine, "nl1", "NewLine1", "nl2", "NewLine2"); String bodyJson2 = TestUtils.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); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); testNetworkModificationsCount(TEST_GROUP_ID, 3); @@ -986,13 +1010,13 @@ void testDuplicateModificationGroup() throws Exception { LineSplitWithVoltageLevelInfos lineSplitWoVL = new LineSplitWithVoltageLevelInfos("line1", 10.0, null, "v4", "1.A", "nl11", "NewLine11", "nl12", "NewLine12"); bodyJson2 = TestUtils.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); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); //create a generator GeneratorCreationInfos generatorCreationInfos = ModificationCreation.getCreationGenerator("v2", "idGenerator1", "nameGenerator1", "1B", "v2load", "LOAD", "v1"); bodyJson2 = TestUtils.getJsonBody(generatorCreationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); testNetworkModificationsCount(TEST_GROUP_ID, 5); // get list of modifications @@ -1028,8 +1052,8 @@ void replaceTeePointByVoltageLevelOnLineDuplicateModificationGroupTest() throws LinesAttachToSplitLinesInfos linesAttachToSplitLinesInfos = new LinesAttachToSplitLinesInfos("l1", "l2", "l3", "v4", "bbs4", "nl1", "NewLine1", "nl2", "NewLine2"); String body = TestUtils.getJsonBody(linesAttachToSplitLinesInfos, TEST_NETWORK_WITH_TEE_POINT_ID, null); - MvcResult mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(body).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(body).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); testNetworkModificationsCount(TEST_GROUP_ID, 1); @@ -1057,8 +1081,8 @@ void testGroupDuplication() throws Exception { .connectionName("bottom") .build(); String loadCreationInfosJson = TestUtils.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); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(loadCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); assertNotNull(network.getLoad("idLoad1")); // load was created testNetworkModificationsCount(TEST_GROUP_ID, 1); @@ -1073,7 +1097,6 @@ void testGroupDuplication() throws Exception { @Test void testTombstonedEquipmentInfos() throws Exception { - MvcResult mvcResult; assertTrue(equipmentInfosRepository.findAllByNetworkUuidAndVariantId(TEST_NETWORK_ID, NetworkCreation.VARIANT_ID).isEmpty()); assertTrue(equipmentInfosRepository.findAllByNetworkUuidAndVariantId(TEST_NETWORK_ID_2, VariantManagerConstants.INITIAL_VARIANT_ID).isEmpty()); @@ -1087,10 +1110,10 @@ void testTombstonedEquipmentInfos() throws Exception { String equipmentDeletionInfosJson = TestUtils.getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); // delete load - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); - testConnectableDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.LOAD, "v1load", "v1b1", "v1d1", "s1"); + testConnectableDeletionImpacts(lastResultJson, IdentifiableType.LOAD, "v1load", "v1b1", "v1d1", "s1"); testNetworkModificationsCount(TEST_GROUP_ID, 1); // Test delete load on not yet existing variant VARIANT_NOT_EXISTING_ID : @@ -1099,11 +1122,13 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentId("v3load"); equipmentDeletionInfosJson = TestUtils.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<>() { }); - assertTrue(networkModificationsResult.isPresent()); - assertFalse(networkModificationsResult.get().modificationResults().isEmpty()); - assertEquals(1, networkModificationsResult.get().modificationResults().size()); - assertTrue(networkModificationsResult.get().modificationResults().getFirst().isEmpty()); // no modification apply + Message variantMsg = output.receive(TIMEOUT, applicationResultDestination); + assertNotNull(variantMsg); + output.receive(TIMEOUT, applicationDestination); + NetworkModificationsResult nmResult = mapper.readValue(new String(variantMsg.getPayload()), NetworkModificationsResult.class); + assertFalse(nmResult.modificationResults().isEmpty()); + assertEquals(1, nmResult.modificationResults().size()); + assertTrue(nmResult.modificationResults().getFirst().isEmpty()); // no modification apply when variant not found assertNotNull(network.getLoad("v3load")); // load was not deleted testNetworkModificationsCount(TEST_GROUP_ID, 2); // new modification stored in the database @@ -1111,80 +1136,80 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentType(IdentifiableType.SHUNT_COMPENSATOR); equipmentDeletionInfos.setEquipmentId("v2shunt"); equipmentDeletionInfosJson = TestUtils.getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); - testConnectableDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.SHUNT_COMPENSATOR, "v2shunt", "v2bshunt", "v2dshunt", "s1"); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + testConnectableDeletionImpacts(lastResultJson, IdentifiableType.SHUNT_COMPENSATOR, "v2shunt", "v2bshunt", "v2dshunt", "s1"); testNetworkModificationsCount(TEST_GROUP_ID, 3); // delete generator equipmentDeletionInfos.setEquipmentType(IdentifiableType.GENERATOR); equipmentDeletionInfos.setEquipmentId("idGenerator"); equipmentDeletionInfosJson = TestUtils.getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); - testConnectableDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.GENERATOR, "idGenerator", "v2bgenerator", "v2dgenerator", "s1"); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + testConnectableDeletionImpacts(lastResultJson, IdentifiableType.GENERATOR, "idGenerator", "v2bgenerator", "v2dgenerator", "s1"); testNetworkModificationsCount(TEST_GROUP_ID, 4); // delete line equipmentDeletionInfos.setEquipmentType(IdentifiableType.LINE); equipmentDeletionInfos.setEquipmentId("line2"); equipmentDeletionInfosJson = TestUtils.getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); - testBranchDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.LINE, "line2", "v1bl2", "v1dl2", "s1", "v3bl2", "v3dl2", "s2"); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + testBranchDeletionImpacts(lastResultJson, IdentifiableType.LINE, "line2", "v1bl2", "v1dl2", "s1", "v3bl2", "v3dl2", "s2"); testNetworkModificationsCount(TEST_GROUP_ID, 5); // delete two windings transformer equipmentDeletionInfos.setEquipmentType(IdentifiableType.TWO_WINDINGS_TRANSFORMER); equipmentDeletionInfos.setEquipmentId("trf1"); equipmentDeletionInfosJson = TestUtils.getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); - testBranchDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.TWO_WINDINGS_TRANSFORMER, "trf1", "v1btrf1", "v1dtrf1", "s1", "v2btrf1", "v2dtrf1", "s1"); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + testBranchDeletionImpacts(lastResultJson, IdentifiableType.TWO_WINDINGS_TRANSFORMER, "trf1", "v1btrf1", "v1dtrf1", "s1", "v2btrf1", "v2dtrf1", "s1"); testNetworkModificationsCount(TEST_GROUP_ID, 6); // delete three windings transformer equipmentDeletionInfos.setEquipmentType(IdentifiableType.THREE_WINDINGS_TRANSFORMER); equipmentDeletionInfos.setEquipmentId("trf6"); equipmentDeletionInfosJson = TestUtils.getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); - test3WTDeletionImpacts(mvcResult.getResponse().getContentAsString(), "trf6", "v1btrf6", "v1dtrf6", "v2btrf6", "v2dtrf6", "v4btrf6", "v4dtrf6", "s1"); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + test3WTDeletionImpacts(lastResultJson, "trf6", "v1btrf6", "v1dtrf6", "v2btrf6", "v2dtrf6", "v4btrf6", "v4dtrf6", "s1"); testNetworkModificationsCount(TEST_GROUP_ID, 7); // delete static var compensator equipmentDeletionInfos.setEquipmentType(IdentifiableType.STATIC_VAR_COMPENSATOR); equipmentDeletionInfos.setEquipmentId("v3Compensator"); equipmentDeletionInfosJson = TestUtils.getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); - testConnectableDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.STATIC_VAR_COMPENSATOR, "v3Compensator", "v3bCompensator", "v3dCompensator", "s2"); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + testConnectableDeletionImpacts(lastResultJson, IdentifiableType.STATIC_VAR_COMPENSATOR, "v3Compensator", "v3bCompensator", "v3dCompensator", "s2"); testNetworkModificationsCount(TEST_GROUP_ID, 8); // delete battery equipmentDeletionInfos.setEquipmentType(IdentifiableType.BATTERY); equipmentDeletionInfos.setEquipmentId("v3Battery"); equipmentDeletionInfosJson = TestUtils.getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); - testConnectableDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.BATTERY, "v3Battery", "v3bBattery", "v3dBattery", "s2"); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + testConnectableDeletionImpacts(lastResultJson, IdentifiableType.BATTERY, "v3Battery", "v3bBattery", "v3dBattery", "s2"); testNetworkModificationsCount(TEST_GROUP_ID, 9); // delete boundary line equipmentDeletionInfos.setEquipmentType(IdentifiableType.BOUNDARY_LINE); equipmentDeletionInfos.setEquipmentId("v2Boundary"); equipmentDeletionInfosJson = TestUtils.getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); - testConnectableDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.BOUNDARY_LINE, "v2Boundary", "v2bboundary", "v2dboundary", "s1"); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); + testConnectableDeletionImpacts(lastResultJson, IdentifiableType.BOUNDARY_LINE, "v2Boundary", "v2bboundary", "v2dboundary", "s1"); testNetworkModificationsCount(TEST_GROUP_ID, 10); // delete hvdc line => also delete converter stations equipmentDeletionInfos.setEquipmentType(IdentifiableType.HVDC_LINE); equipmentDeletionInfos.setEquipmentId("hvdcLine"); equipmentDeletionInfosJson = TestUtils.getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); List expectedImpacts = createMultipleDeletionImpacts( List.of( Pair.of(IdentifiableType.HVDC_LINE, "hvdcLine"), @@ -1194,15 +1219,15 @@ void testTombstonedEquipmentInfos() throws Exception { ), Set.of("s1") ); - testMultipleDeletionImpacts(mvcResult.getResponse().getContentAsString(), expectedImpacts); + testMultipleDeletionImpacts(lastResultJson, expectedImpacts); testNetworkModificationsCount(TEST_GROUP_ID, 11); // delete voltage level equipmentDeletionInfos.setEquipmentType(IdentifiableType.VOLTAGE_LEVEL); equipmentDeletionInfos.setEquipmentId("v5"); equipmentDeletionInfosJson = TestUtils.getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); expectedImpacts = createMultipleDeletionImpacts( List.of( Pair.of(IdentifiableType.VOLTAGE_LEVEL, "v5"), Pair.of(IdentifiableType.BUSBAR_SECTION, "1A1"), @@ -1211,15 +1236,15 @@ void testTombstonedEquipmentInfos() throws Exception { ), Set.of("s3") ); - testMultipleDeletionImpacts(mvcResult.getResponse().getContentAsString(), expectedImpacts); + testMultipleDeletionImpacts(lastResultJson, expectedImpacts); testNetworkModificationsCount(TEST_GROUP_ID, 12); // delete substation equipmentDeletionInfos.setEquipmentType(IdentifiableType.SUBSTATION); equipmentDeletionInfos.setEquipmentId("s3"); equipmentDeletionInfosJson = TestUtils.getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); expectedImpacts = createMultipleDeletionImpacts( List.of( Pair.of(IdentifiableType.SUBSTATION, "s3"), @@ -1229,15 +1254,15 @@ void testTombstonedEquipmentInfos() throws Exception { ), Set.of("s3") ); - testMultipleDeletionImpacts(mvcResult.getResponse().getContentAsString(), expectedImpacts); + testMultipleDeletionImpacts(lastResultJson, expectedImpacts); testNetworkModificationsCount(TEST_GROUP_ID, 13); // delete substation with lines equipmentDeletionInfos.setEquipmentType(IdentifiableType.SUBSTATION); equipmentDeletionInfos.setEquipmentId("s2"); equipmentDeletionInfosJson = TestUtils.getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); expectedImpacts = new ArrayList<>(); // Two winding transformer trf2 (in s1) is regulating on v3load (in s2), resetting regulation on delete of v3load adds a modification impact on the substation s1 expectedImpacts.add(createModificationImpactType(IdentifiableType.SUBSTATION, "s1", Set.of("s1"))); @@ -1261,7 +1286,7 @@ void testTombstonedEquipmentInfos() throws Exception { expectedImpacts.addAll(createMultipleDeletionImpacts( List.of(Pair.of(IdentifiableType.LINE, "line1"), Pair.of(IdentifiableType.LINE, "line3")), Set.of("s1", "s2") )); - testMultipleDeletionImpacts(mvcResult.getResponse().getContentAsString(), expectedImpacts); + testMultipleDeletionImpacts(lastResultJson, expectedImpacts); testNetworkModificationsCount(TEST_GROUP_ID, 14); assertTrue(equipmentInfosRepository.findAllByNetworkUuidAndVariantId(TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID).isEmpty()); @@ -1355,7 +1380,6 @@ private void testMultipleDeletionImpacts(String networkModificationResultAsStrin } private void testNetworkModificationsCount(UUID groupUuid, int actualSize) throws Exception { - MvcResult mvcResult; String resultAsString; // get all modifications for the given group of a network mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=true", groupUuid).contentType(MediaType.APPLICATION_JSON)) @@ -1408,7 +1432,6 @@ void testGetPositionAfterAndBefore() { @Test void testGetLineTypesCatalog() throws Exception { - MvcResult mvcResult; String resultAsString; // Check if the catalog is empty @@ -1468,7 +1491,6 @@ void testGetLineTypesCatalog() throws Exception { @Test void testGetLineTypeWithoutLimitsCatalog() throws Exception { - MvcResult mvcResult; String resultAsString; // Check if the catalog is empty @@ -1520,7 +1542,7 @@ void testGetLineTypeWithLimitsCatalog() throws Exception { .file(createMockMultipartFile(LINE_TYPES_CATALOG_JSON_FILE_3))) .andExpect(status().isOk()); - MvcResult mvcResult = mockMvc + mvcResult = mockMvc .perform(get(URI_LINE_CATALOG).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andReturn(); @@ -1673,7 +1695,7 @@ void testCreateVoltageInitModification() throws Exception { .andExpect(status().isOk()); // Get the modifications - MvcResult mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=false", groupUuid)).andExpectAll( + mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=false", groupUuid)).andExpectAll( status().isOk(), content().contentType(MediaType.APPLICATION_JSON)) .andReturn(); @@ -1684,7 +1706,6 @@ void testCreateVoltageInitModification() throws Exception { @Test void testDeleteStashedNetworkModifications() throws Exception { - MvcResult mvcResult; EquipmentAttributeModificationInfos loadModificationInfos = EquipmentAttributeModificationInfos.builder() .equipmentType(IdentifiableType.LOAD) .equipmentAttributeName("open") @@ -1693,8 +1714,8 @@ void testDeleteStashedNetworkModifications() throws Exception { .equipmentId("v1load") .build(); String loadModificationInfosJson = TestUtils.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); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(loadModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); List modifications = modificationRepository.getModifications(TEST_GROUP_ID, true, true); assertEquals(1, modifications.size()); @@ -1712,7 +1733,6 @@ void testDeleteStashedNetworkModifications() throws Exception { @Test void testGetModificationsCount() throws Exception { - MvcResult mvcResult; createSomeSwitchModifications(TEST_GROUP_ID, 3); mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications-count", TEST_GROUP_ID) .queryParam("stashed", "false")) @@ -1736,7 +1756,7 @@ void testMetadata() throws Exception { List modificationList = createSomeSwitchModifications(TEST_GROUP_ID, 1); UUID switchModificationId = modificationList.get(0).getUuid(); - MvcResult mvcResult = mockMvc.perform(get(URI_NETWORK_MODIF_BASE + "/metadata?ids={id}", switchModificationId) + 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<>() { }); @@ -1794,15 +1814,15 @@ void testSearchModificationInfos() throws Exception { .equipmentName(AttributeModification.toAttributeModification("newSubstationName", OperationType.SET)) .build(); String substationModificationInfosJson = TestUtils.getJsonBody(substationModificationInfos, TEST_NETWORK_ID, null); - MvcResult mvcResult1 = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(substationModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - assertApplicationStatusOK(mvcResult1); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(substationModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(); // Generator Creation ID : v2 GeneratorCreationInfos generatorCreationInfos = ModificationCreation.getCreationGenerator("v2", "idGenerator1", "nameGenerator1", "1B", "v2load", "LOAD", "v1"); String generatorCreationInfosJson = TestUtils.getJsonBody(generatorCreationInfos, TEST_NETWORK_ID, null); - MvcResult mvcResult2 = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertNotNull(network.getGenerator("idGenerator1")); - assertApplicationStatusOK(mvcResult2); + assertApplicationStatusOK(); // Load deletion ID : v5load EquipmentDeletionInfos equipmentDeletionInfos = EquipmentDeletionInfos.builder() diff --git a/src/test/java/org/gridsuite/modification/server/modifications/AbstractInjectionModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/AbstractInjectionModificationTest.java index 1002c3ab3..bb2ec6a32 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/AbstractInjectionModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/AbstractInjectionModificationTest.java @@ -11,14 +11,8 @@ import org.gridsuite.modification.dto.InjectionModificationInfos; import org.gridsuite.modification.dto.OperationType; import org.junit.jupiter.api.Tag; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import static org.assertj.core.api.Assertions.assertThat; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author David Braquart @@ -44,18 +38,12 @@ protected void assertChangeConnectionState(Injection existingEquipment, Injec assertThat(existingEquipment.getTerminal().isConnected()).isNotEqualTo(expectedState); String modificationInfosJson = getJsonBody(modificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationInfosJson); // connection state has changed as expected assertThat(existingEquipment.getTerminal().isConnected()).isEqualTo(expectedState); // try to modify again => no change on connection state - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationInfosJson); assertThat(existingEquipment.getTerminal().isConnected()).isEqualTo(expectedState); } } 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 bb38c72ed..2ca710e55 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/AbstractNetworkModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/AbstractNetworkModificationTest.java @@ -17,6 +17,7 @@ import com.powsybl.network.store.client.PreloadingStrategy; import com.powsybl.network.store.iidm.impl.NetworkImpl; import org.gridsuite.modification.dto.ModificationInfos; +import org.gridsuite.modification.server.ContextConfigurationWithTestChannel; import org.gridsuite.modification.server.dto.NetworkModificationResult; import org.gridsuite.modification.server.dto.NetworkModificationsResult; import org.gridsuite.modification.server.entities.ModificationEntity; @@ -33,13 +34,15 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.stream.binder.test.OutputDestination; import org.springframework.http.MediaType; +import org.springframework.messaging.Message; import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.io.IOException; import java.util.*; @@ -52,7 +55,6 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -66,6 +68,7 @@ @SpringBootTest @DisableElasticsearch @AutoConfigureMockMvc +@ContextConfigurationWithTestChannel public abstract class AbstractNetworkModificationTest { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractNetworkModificationTest.class); @@ -73,13 +76,25 @@ public abstract class AbstractNetworkModificationTest { private static final UUID NOT_FOUND_NETWORK_ID = UUID.randomUUID(); protected static final UUID TEST_GROUP_ID = UUID.randomUUID(); - private static final String URI_NETWORK_MODIF_BASE = "/v1/network-modifications"; + private static final String RECEIVER = "me"; + private static final int TIMEOUT = 1000; + + protected static final String URI_NETWORK_MODIF_BASE = "/v1/network-modifications"; private static final String URI_NETWORK_MODIF_GET_PUT = URI_NETWORK_MODIF_BASE + "/"; private static final String URI_NETWORK_MODIF_COPY = "/v1/groups/" + TEST_GROUP_ID + "?action=COPY"; + @Value("${spring.cloud.stream.bindings.publishApplicationResult-out-0.destination}") + private String applicationResultDestination; + + @Value("${spring.cloud.stream.bindings.publishApplication-out-0.destination}") + private String applicationDestination; + @Autowired protected MockMvc mockMvc; + @Autowired + protected OutputDestination output; + protected WireMockServer wireMockServer; protected WireMockUtils wireMockUtils; @@ -96,6 +111,8 @@ public abstract class AbstractNetworkModificationTest { @Autowired protected ObjectMapper mapper; + protected MvcResult mvcResult; + private Network network; @BeforeEach @@ -115,6 +132,7 @@ public void setUp() { @AfterEach public void tearOff() { networkModificationRepository.deleteAll(); + output.clear(); try { TestUtils.assertWiremockServerRequestsEmptyThenShutdown(wireMockServer); @@ -125,21 +143,38 @@ public void tearOff() { } } + protected String lastResultJson; + + protected NetworkModificationsResult saveAndApply(String bodyJson) throws Exception { + mockMvc.perform(post(getNetworkModificationUri()) + .content(bodyJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + Message resultMsg = output.receive(TIMEOUT, applicationResultDestination); + assertNotNull(resultMsg, "No message received on " + applicationResultDestination); + output.receive(TIMEOUT, applicationDestination); + lastResultJson = new String(resultMsg.getPayload()); + return mapper.readValue(lastResultJson, NetworkModificationsResult.class); + } + + protected NetworkModificationsResult putAndApply(String uri, String bodyJson) throws Exception { + mockMvc.perform(put(uri + "&receiver=" + RECEIVER) + .content(bodyJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + Message resultMsg = output.receive(TIMEOUT, applicationResultDestination); + assertNotNull(resultMsg, "No message received on " + applicationResultDestination); + output.receive(TIMEOUT, applicationDestination); + return mapper.readValue(new String(resultMsg.getPayload()), NetworkModificationsResult.class); + } + protected void assertResultImpacts(List impacts) { } @Test public void testCreate() throws Exception { - MvcResult mvcResult; - NetworkModificationsResult networkModificationsResult; ModificationInfos modificationToCreate = buildModification(); String bodyJson = getJsonBody(modificationToCreate, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(bodyJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + NetworkModificationsResult networkModificationsResult = saveAndApply(bodyJson); assertEquals(1, extractApplicationStatus(networkModificationsResult).size()); assertResultImpacts(getNetworkImpacts(networkModificationsResult)); assertNotEquals(NetworkModificationResult.ApplicationStatus.WITH_ERRORS, extractApplicationStatus(networkModificationsResult).getFirst()); @@ -155,17 +190,11 @@ public void testCreate() throws Exception { @Test public void testCreateDisabledModification() throws Exception { - MvcResult mvcResult; - NetworkModificationsResult networkModificationsResult; ModificationInfos modificationToCreate = buildModification(); modificationToCreate.setActivated(false); String modificationToCreateJson = getJsonBody(modificationToCreate, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + NetworkModificationsResult networkModificationsResult = saveAndApply(modificationToCreateJson); assertEquals(1, extractApplicationStatus(networkModificationsResult).size()); assertEquals(0, getNetworkImpacts(networkModificationsResult).size()); @@ -184,7 +213,6 @@ public void testCreateDisabledModification() throws Exception { @Test public void testRead() throws Exception { - MvcResult mvcResult; NetworkModificationResult networkModificationResult; ModificationInfos modificationToRead = buildModification(); @@ -248,12 +276,7 @@ public void testCopy() throws Exception { UUID modificationUuid = saveModification(modificationToCopy); String body = TestUtils.getJsonBody(List.of(modificationUuid), AbstractNetworkModificationTest.TEST_NETWORK_ID, null); - ResultActions mockMvcResultActions = mockMvc.perform(put(URI_NETWORK_MODIF_COPY) - .content(body) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + putAndApply(URI_NETWORK_MODIF_COPY, body); List modifications = networkModificationRepository .getModifications(TEST_GROUP_ID, false, true); @@ -264,7 +287,6 @@ public void testCopy() throws Exception { } protected void testNetworkModificationsCount(UUID groupUuid, int actualSize) throws Exception { - MvcResult mvcResult; String resultAsString; // get all modifications for the given group of a network mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications?onlyMetadata=true", groupUuid).contentType(MediaType.APPLICATION_JSON)) @@ -302,7 +324,7 @@ protected UUID getGroupId() { } protected String getNetworkModificationUri() { - return URI_NETWORK_MODIF_BASE + "?groupUuid=" + TEST_GROUP_ID; + return URI_NETWORK_MODIF_BASE + "?groupUuid=" + TEST_GROUP_ID + "&receiver=" + RECEIVER; } protected String getJsonBody(ModificationInfos modificationInfos, String variantId) throws JsonProcessingException { 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..e032ed73b 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInBusBreakerTest.java @@ -17,7 +17,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; import java.util.Arrays; import java.util.List; @@ -28,8 +27,6 @@ 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.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class BatteryCreationInBusBreakerTest extends AbstractNetworkModificationTest { @@ -114,8 +111,7 @@ void testCreateWithBusbarSectionErrors() throws Exception { BatteryCreationInfos batteryCreationInfos = (BatteryCreationInfos) buildModification(); batteryCreationInfos.setBusOrBusbarSectionId("notFoundBus"); String body = getJsonBody(batteryCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(body); assertLogMessage(new NetworkModificationException(BUS_NOT_FOUND, "notFoundBus").getMessage(), 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..c2f6e60a4 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInNodeBreakerTest.java @@ -18,9 +18,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.util.Arrays; import java.util.List; @@ -31,10 +28,6 @@ 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.*; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class BatteryCreationInNodeBreakerTest extends AbstractNetworkModificationTest { @@ -121,16 +114,14 @@ void testCreateWithErrors() throws Exception { BatteryCreationInfos batteryCreationInfos = (BatteryCreationInfos) buildModification(); batteryCreationInfos.setEquipmentId(""); String batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(batteryCreationInfosJson); assertLogMessage("Invalid id ''", ERROR_MESSAGE_KEY, reportService); // not found voltage level batteryCreationInfos.setEquipmentId("idBattery1"); batteryCreationInfos.setVoltageLevelId("notFoundVoltageLevelId"); batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(batteryCreationInfosJson); assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, "notFoundVoltageLevelId").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -138,8 +129,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfos.setVoltageLevelId("v2"); batteryCreationInfos.setBusOrBusbarSectionId("notFoundBusbarSection"); batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(batteryCreationInfosJson); assertLogMessage(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "notFoundBusbarSection").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -149,8 +139,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfos.setBusOrBusbarSectionId("1B"); batteryCreationInfos.setMinP(Double.NaN); batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(batteryCreationInfosJson); assertLogMessage("Battery 'idBattery1': invalid value (NaN) for minimum P", ERROR_MESSAGE_KEY, reportService); @@ -160,8 +149,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfos.setMinQ(Double.NaN); batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(batteryCreationInfosJson); assertLogMessage(new NetworkModificationException(CREATE_BATTERY_ERROR, "Battery 'idBattery1' : minimum reactive power is not set").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -170,8 +158,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfos.setMaxQ(Double.NaN); batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(batteryCreationInfosJson); assertLogMessage(new NetworkModificationException(CREATE_BATTERY_ERROR, "Battery 'idBattery1' : maximum reactive power is not set").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -181,8 +168,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfos.setMaxQ(100.); batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(batteryCreationInfosJson); assertLogMessage(new NetworkModificationException(CREATE_BATTERY_ERROR, "Battery 'idBattery1' : maximum reactive power is expected to be greater than or equal to minimum reactive power").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -191,8 +177,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfos.getReactiveCapabilityCurvePoints().get(0).setP(Double.NaN); batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(batteryCreationInfosJson); assertLogMessage(new NetworkModificationException(CREATE_BATTERY_ERROR, "Battery 'idBattery1' : P is not set in a reactive capability curve limits point").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -200,8 +185,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfos = (BatteryCreationInfos) buildModification(); batteryCreationInfos.setEquipmentId("v3Battery"); batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(batteryCreationInfosJson); assertLogMessage(new NetworkModificationException(BATTERY_ALREADY_EXISTS, "v3Battery").getMessage(), ERROR_MESSAGE_KEY, reportService); batteryCreationInfos.setEquipmentId("idBattery3"); @@ -209,11 +193,7 @@ void testCreateWithErrors() throws Exception { batteryCreationInfos.setVoltageLevelId("v2"); batteryCreationInfos.setBusOrBusbarSectionId("1B"); batteryCreationInfosJson = getJsonBody(batteryCreationInfos, "variant_not_existing"); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + NetworkModificationsResult networkModificationsResult = saveAndApply(batteryCreationInfosJson); assertNotNull(networkModificationsResult); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().getFirst().isEmpty()); // no modifications returned @@ -242,8 +222,7 @@ void testCreateWithShortCircuitErrors() throws Exception { batteryCreationInfos.setDirectTransX(Double.NaN); String batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(batteryCreationInfosJson); assertLogMessage("cannot add short-circuit extension on battery with id=idBattery1 : Undefined directTransX", "network.modification.ShortCircuitExtensionAddError", reportService); } } 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..1238c2545 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java @@ -19,8 +19,6 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import org.springframework.util.CollectionUtils; import java.util.*; @@ -31,9 +29,7 @@ import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.gridsuite.modification.server.utils.assertions.Assertions.assertThat; 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.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -153,10 +149,7 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { .add(); String modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); BatteryModificationInfos createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -167,10 +160,7 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { batteryModificationInfos.setMinQ(new AttributeModification<>(-200., OperationType.SET)); modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1); @@ -182,10 +172,7 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { batteryModificationInfos.setMaxQ(new AttributeModification<>(200., OperationType.SET)); modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(2); @@ -196,10 +183,7 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { batteryModificationInfos.setMinQ(new AttributeModification<>(-1.1, OperationType.SET)); modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(3); @@ -212,10 +196,7 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { batteryModificationInfos.setMinP(null); batteryModificationInfos.setMaxP(null); modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(4); assertThat(createdModification).recursivelyEquals(batteryModificationInfos); testNetworkModificationsCount(getGroupId(), 5); @@ -228,10 +209,7 @@ void testDroopUnchanged() throws Exception { batteryModificationInfos.getDroop().setValue(18f); String modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationToCreateJson); BatteryModificationInfos createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -241,10 +219,7 @@ void testDroopUnchanged() throws Exception { batteryModificationInfos.setDroop(null); modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationToCreateJson); createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -256,22 +231,16 @@ void testImpactsAfterActivePowerControlModifications() throws Exception { BatteryModificationInfos batteryModificationInfos = (BatteryModificationInfos) buildModification(); String modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationToCreateJson); Battery battery = getNetwork().getBattery("v3Battery"); assertEquals(0.1f, battery.getExtension(ActivePowerControl.class).getDroop()); assertTrue(battery.getExtension(ActivePowerControl.class).isParticipate()); //modify only droop batteryModificationInfos.setDroop(new AttributeModification<>(0.5f, OperationType.SET)); modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); //check impacts - String resultAsString = mvcResult.getResponse().getContentAsString(); + String resultAsString = lastResultJson; NetworkModificationsResult networkModificationsResult = mapper.readValue(resultAsString, NetworkModificationsResult.class); assertEquals(4, getNetworkImpacts(networkModificationsResult).size()); assertEquals(1, getImpactedSubstationsIds(networkModificationsResult).size()); @@ -279,12 +248,9 @@ void testImpactsAfterActivePowerControlModifications() throws Exception { //modify only participate batteryModificationInfos.setParticipate(new AttributeModification<>(false, OperationType.SET)); modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); //check impacts - resultAsString = mvcResult.getResponse().getContentAsString(); + resultAsString = lastResultJson; networkModificationsResult = mapper.readValue(resultAsString, NetworkModificationsResult.class); assertEquals(4, getNetworkImpacts(networkModificationsResult).size()); assertEquals(1, getImpactedSubstationsIds(networkModificationsResult).size()); @@ -306,10 +272,7 @@ void testActivePowerZeroOrBetweenMinAndMaxActivePower() throws Exception { Double activePower = batteryModificationInfos.getTargetP() != null ? batteryModificationInfos.getTargetP().getValue() : battery.getTargetP(); String modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); 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 + "]", ERROR_MESSAGE_KEY, reportService); @@ -353,10 +316,7 @@ void testMinQGreaterThanMaxQ() throws Exception { }); } String modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); 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(), 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..4373a3d1e 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/DeleteAttachingLineTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/DeleteAttachingLineTest.java @@ -15,7 +15,6 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import java.util.Map; @@ -26,9 +25,6 @@ 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.*; -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.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -92,9 +88,7 @@ void createWithInvalidLineIdTest() throws Exception { .build(); var objectWriter = mapper.writer().withDefaultPrettyPrinter(); String json = getJsonBody(deleteAttachingLineInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(MockMvcRequestBuilders.post(getNetworkModificationUri()).content(json).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) + mockMvc.perform(MockMvcRequestBuilders.post(getNetworkModificationUri()).content(json).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); assertLogMessage(new NetworkModificationException(LINE_NOT_FOUND, "ll").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -112,9 +106,7 @@ void createWithNoAttachmentPointTest() throws Exception { var objectWriter = mapper.writer().withDefaultPrettyPrinter(); String json = getJsonBody(deleteAttachingLineInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(MockMvcRequestBuilders.post(getNetworkModificationUri()).content(json).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) + mockMvc.perform(MockMvcRequestBuilders.post(getNetworkModificationUri()).content(json).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); assertLogMessage("Unable to find the attachment point and the tapped voltage level from lines l1, l3 and l1", ERROR_MESSAGE_KEY, reportService); @@ -127,10 +119,7 @@ void createNewLineWithExistingIdTest() throws Exception { deleteAttachingLineInfos.setReplacingLine1Id("l2"); String lineAttachToAbsentLineJson = getJsonBody(deleteAttachingLineInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(lineAttachToAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(lineAttachToAbsentLineJson); assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "l2").getMessage(), 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 a103cc4ea..1705cef19 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/DeleteVoltageLevelOnLineTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/DeleteVoltageLevelOnLineTest.java @@ -15,7 +15,6 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import java.util.Map; @@ -26,9 +25,6 @@ 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.*; -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.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -94,9 +90,7 @@ void createWithInvalidLineIdTest() throws Exception { var objectWriter = mapper.writer().withDefaultPrettyPrinter(); String json = getJsonBody(deleteVoltageLevelOnLineInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(MockMvcRequestBuilders.post(getNetworkModificationUri()).content(json).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) + mockMvc.perform(MockMvcRequestBuilders.post(getNetworkModificationUri()).content(json).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); assertLogMessage(new NetworkModificationException(LINE_NOT_FOUND, "ll").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -108,10 +102,7 @@ void createNewLineWithExistingIdTest() throws Exception { DeleteVoltageLevelOnLineInfos deleteVoltageLevelOnLineInfos = (DeleteVoltageLevelOnLineInfos) buildModification(); deleteVoltageLevelOnLineInfos.setReplacingLine1Id("l2"); String lineAttachToAbsentLineJson = getJsonBody(deleteVoltageLevelOnLineInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(lineAttachToAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(lineAttachToAbsentLineJson); assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "l2").getMessage(), 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 626fc3730..4d7850fc5 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModificationTest.java @@ -16,8 +16,6 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.time.Instant; import java.util.Map; @@ -30,10 +28,8 @@ 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.*; -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; @Tag("IntegrationTest") @@ -41,7 +37,6 @@ class EquipmentAttributeModificationTest extends AbstractNetworkModificationTest @Test void testEquipmentAttributeModificationInfos() throws Exception { - MvcResult mvcResult; UUID modificationUuid = UUID.randomUUID(); //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) EquipmentAttributeModificationInfos modificationInfos = EquipmentAttributeModificationInfos.builder() @@ -65,20 +60,14 @@ void testEquipmentAttributeModificationInfos() throws Exception { String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, null); // switch opening - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); + saveAndApply(switchStatusModificationInfosJson); + testElementModificationImpact(mapper, lastResultJson, Set.of("s1")); // switch in variant VARIANT_ID opening switchStatusModificationInfos.setEquipmentId("break1Variant"); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, NetworkCreation.VARIANT_ID); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1Variant")); + saveAndApply(switchStatusModificationInfosJson); + testElementModificationImpact(mapper, lastResultJson, Set.of("s1Variant")); } @Test @@ -93,17 +82,13 @@ void testSwitch() throws Exception { private void switchModifications(String extraParams, String switchId1, String switchNotFoundId, String switchId2, String switchId3, Set substationsIds, Set otherSubstationsIds, int modificationsCount) throws Exception { - MvcResult mvcResult; EquipmentAttributeModificationInfos switchStatusModificationInfos = buildModification(); // switch not existing switchStatusModificationInfos.setEquipmentId(switchNotFoundId); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(switchStatusModificationInfosJson); assertLogMessage(new NetworkModificationException(EQUIPMENT_NOT_FOUND, switchNotFoundId).getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -111,36 +96,28 @@ private void switchModifications(String extraParams, String switchId1, String sw switchStatusModificationInfos.setEquipmentId(switchId1); switchStatusModificationInfos.setEquipmentAttributeValue(false); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); - testEmptyImpacts(mapper, mvcResult.getResponse().getContentAsString()); + saveAndApply(switchStatusModificationInfosJson); + testEmptyImpacts(mapper, lastResultJson); // switch opening switchStatusModificationInfos.setEquipmentAttributeValue(true); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), substationsIds); + saveAndApply(switchStatusModificationInfosJson); + testElementModificationImpact(mapper, lastResultJson, substationsIds); // switch closing switchStatusModificationInfos.setEquipmentId(switchId2); switchStatusModificationInfos.setEquipmentAttributeValue(false); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), substationsIds); + saveAndApply(switchStatusModificationInfosJson); + testElementModificationImpact(mapper, lastResultJson, substationsIds); // switch opening on another substation switchStatusModificationInfos.setEquipmentId(switchId3); switchStatusModificationInfos.setEquipmentAttributeValue(true); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), otherSubstationsIds); + saveAndApply(switchStatusModificationInfosJson); + testElementModificationImpact(mapper, lastResultJson, otherSubstationsIds); testNetworkModificationsCount(getGroupId(), modificationsCount); } 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..41acbfd09 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/EquipmentDeletionTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/EquipmentDeletionTest.java @@ -26,9 +26,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -38,10 +35,6 @@ 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.*; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class EquipmentDeletionTest extends AbstractNetworkModificationTest { @@ -90,11 +83,7 @@ void testOkWhenRemovingIsolatedEquipment() throws Exception { String equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, null); // delete load with error removing dangling switches, because the load connection node is not linked to any other node - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()) - .andReturn(); + saveAndApply(equipmentDeletionInfosJson); var v5 = getNetwork().getVoltageLevel("v5"); assertNull(v5.getNodeBreakerView().getTerminal(2)); @@ -106,8 +95,7 @@ void testCreateWithErrors() throws Exception { EquipmentDeletionInfos equipmentDeletionInfos = (EquipmentDeletionInfos) buildModification(); equipmentDeletionInfos.setEquipmentId("notFoundLoad"); String body = getJsonBody(equipmentDeletionInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(body); assertLogMessage(new NetworkModificationException(EQUIPMENT_NOT_FOUND, "Equipment with id=notFoundLoad not found or of bad type").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -134,12 +122,7 @@ private void deleteHvdcLineWithShuntCompensator(String shuntNameToBeRemoved, boo .build(); String equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()) - .andReturn(); - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + NetworkModificationsResult networkModificationsResult = saveAndApply(equipmentDeletionInfosJson); assertEquals(1, extractApplicationStatus(networkModificationsResult).size()); assertEquals(expectedStatus, extractApplicationStatus(networkModificationsResult).getFirst()); 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..405dc3997 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GenerationDispatchTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GenerationDispatchTest.java @@ -116,8 +116,7 @@ void testGenerationDispatch() throws Exception { setNetwork(Network.read("testGenerationDispatch.xiidm", getClass().getResourceAsStream("/testGenerationDispatch.xiidm"))); String modificationJson = getJsonBody(modification, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationJson); assertNetworkAfterCreationWithStandardLossCoefficient(); @@ -137,8 +136,7 @@ void testGenerationDispatchWithBattery() throws Exception { final double batteryTotalTargetP = getNetwork().getBattery(BATTERY1_ID).getTargetP() + getNetwork().getBattery(BATTERY2_ID).getTargetP(); String modificationJson = getJsonBody(modification, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationJson); assertLogReportsForDefaultNetwork(batteryTotalTargetP); } @@ -158,8 +156,7 @@ void testGenerationDispatchWithBatteryConnection() throws Exception { final double batteryTotalTargetP = getNetwork().getBattery(BATTERY1_ID).getTargetP() + getNetwork().getBattery(BATTERY2_ID).getTargetP() + getNetwork().getBattery(BATTERY3_ID).getTargetP(); String modificationJson = getJsonBody(modification, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationJson); assertLogReportsForDefaultNetwork(batteryTotalTargetP); } @@ -191,8 +188,7 @@ void testGenerationDispatchWithHigherLossCoefficient() throws Exception { setNetwork(Network.read("testGenerationDispatch.xiidm", getClass().getResourceAsStream("/testGenerationDispatch.xiidm"))); String modificationJson = getJsonBody(modification, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationJson); assertEquals(100., getNetwork().getGenerator(GH1_ID).getTargetP(), 0.001); assertEquals(70., getNetwork().getGenerator(GH2_ID).getTargetP(), 0.001); @@ -231,8 +227,7 @@ void testGenerationDispatchWithInternalHvdc() throws Exception { setNetwork(Network.read("testGenerationDispatchInternalHvdc.xiidm", getClass().getResourceAsStream("/testGenerationDispatchInternalHvdc.xiidm"))); String modificationJson = getJsonBody(modification, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationJson); assertEquals(100., getNetwork().getGenerator(GH1_ID).getTargetP(), 0.001); assertEquals(70., getNetwork().getGenerator(GH2_ID).getTargetP(), 0.001); @@ -278,8 +273,7 @@ void testGenerationDispatchWithMaxPReduction() throws Exception { .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))).getId(); String modificationJson = getJsonBody(modification, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationJson); assertEquals(74.82, getNetwork().getGenerator(GH1_ID).getTargetP(), 0.001); assertEquals(59.5, getNetwork().getGenerator(GH2_ID).getTargetP(), 0.001); @@ -349,8 +343,7 @@ void testGenerationDispatchGeneratorsWithFixedSupply() throws Exception { .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))).getId(); String modificationJson = getJsonBody(modification, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationJson); assertEquals(74.82, getNetwork().getGenerator(GH1_ID).getTargetP(), 0.001); assertEquals(59.5, getNetwork().getGenerator(GH2_ID).getTargetP(), 0.001); @@ -461,8 +454,7 @@ void testGenerationDispatchWithFrequencyReserve() throws Exception { .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))).getId(); String modificationJson = getJsonBody(modification, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationJson); assertEquals(74.82, getNetwork().getGenerator(GH1_ID).getTargetP(), 0.001); assertEquals(59.5, getNetwork().getGenerator(GH2_ID).getTargetP(), 0.001); @@ -625,8 +617,7 @@ void testGenerationDispatchWithMaxValueLessThanMinP() throws Exception { .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))).getId(); String modificationJson = getJsonBody(modification, null); - MvcResult mvcResult = runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + NetworkModificationsResult networkModificationsResult = saveAndApply(modificationJson); assertEquals(1, extractApplicationStatus(networkModificationsResult).size()); assertEquals(NetworkModificationResult.ApplicationStatus.WITH_WARNINGS, extractApplicationStatus(networkModificationsResult).getFirst()); 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..1f74d6739 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInBusBreakerTest.java @@ -18,7 +18,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; import java.util.Arrays; import java.util.List; @@ -30,8 +29,6 @@ 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.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class GeneratorCreationInBusBreakerTest extends AbstractNetworkModificationTest { @@ -140,8 +137,7 @@ void testCreateWithBusbarSectionErrors() throws Exception { GeneratorCreationInfos generatorCreationInfos = (GeneratorCreationInfos) buildModification(); generatorCreationInfos.setBusOrBusbarSectionId("notFoundBus"); String body = getJsonBody(generatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(body); assertLogMessage(new NetworkModificationException(BUS_NOT_FOUND, "notFoundBus").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -154,8 +150,7 @@ void testCreateWithRegulatedTerminalError() throws Exception { generatorCreationInfos.setRegulatingTerminalId("titi"); String generatorCreationInfosJson = getJsonBody(generatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(generatorCreationInfosJson); assertLogMessage(new NetworkModificationException(EQUIPMENT_NOT_FOUND, "Equipment with id=titi not found with type LINE").getMessage(), 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..6326bd7fd 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInNodeBreakerTest.java @@ -16,9 +16,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.util.*; @@ -26,10 +23,6 @@ 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.*; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class GeneratorCreationInNodeBreakerTest extends AbstractNetworkModificationTest { @@ -141,8 +134,7 @@ void testCreateWithErrors() throws Exception { generatorCreationInfos.setEquipmentId(""); String generatorCreationInfosJson = getJsonBody(generatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(generatorCreationInfosJson); assertLogMessage("Invalid id ''", ERROR_MESSAGE_KEY, reportService); // not found voltage level @@ -150,8 +142,7 @@ void testCreateWithErrors() throws Exception { generatorCreationInfos.setVoltageLevelId("notFoundVoltageLevelId"); generatorCreationInfosJson = getJsonBody(generatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(generatorCreationInfosJson); assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, "notFoundVoltageLevelId").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -160,8 +151,7 @@ void testCreateWithErrors() throws Exception { generatorCreationInfos.setBusOrBusbarSectionId("notFoundBusbarSection"); generatorCreationInfosJson = getJsonBody(generatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(generatorCreationInfosJson); assertLogMessage(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "notFoundBusbarSection").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -172,8 +162,7 @@ void testCreateWithErrors() throws Exception { generatorCreationInfos.setMinP(Double.NaN); generatorCreationInfosJson = getJsonBody(generatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(generatorCreationInfosJson); assertLogMessage("Generator 'idGenerator1': invalid value (NaN) for minimum P", ERROR_MESSAGE_KEY, reportService); @@ -184,8 +173,7 @@ void testCreateWithErrors() throws Exception { generatorCreationInfosJson = getJsonBody(generatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(generatorCreationInfosJson); assertLogMessage(new NetworkModificationException(CREATE_GENERATOR_ERROR, "Generator 'idGenerator1' : minimum reactive power is not set").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -195,8 +183,7 @@ void testCreateWithErrors() throws Exception { generatorCreationInfosJson = getJsonBody(generatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(generatorCreationInfosJson); assertLogMessage(new NetworkModificationException(CREATE_GENERATOR_ERROR, "Generator 'idGenerator1' : maximum reactive power is not set").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -207,8 +194,7 @@ void testCreateWithErrors() throws Exception { generatorCreationInfosJson = getJsonBody(generatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(generatorCreationInfosJson); assertLogMessage(new NetworkModificationException(CREATE_GENERATOR_ERROR, "Generator 'idGenerator1' : maximum reactive power is expected to be greater than or equal to minimum reactive power").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -218,8 +204,7 @@ void testCreateWithErrors() throws Exception { generatorCreationInfosJson = getJsonBody(generatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(generatorCreationInfosJson); assertLogMessage(new NetworkModificationException(CREATE_GENERATOR_ERROR, "Generator 'idGenerator1' : P is not set in a reactive capability curve limits point").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -228,8 +213,7 @@ void testCreateWithErrors() throws Exception { generatorCreationInfos.setEquipmentId("v5generator"); generatorCreationInfosJson = getJsonBody(generatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(generatorCreationInfosJson); assertLogMessage(new NetworkModificationException(GENERATOR_ALREADY_EXISTS, "v5generator").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -241,11 +225,8 @@ void testCreateWithErrors() throws Exception { generatorCreationInfos.setBusOrBusbarSectionId("1B"); generatorCreationInfosJson = getJsonBody(generatorCreationInfos, "variant_not_existing"); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + saveAndApply(generatorCreationInfosJson); + NetworkModificationsResult networkModificationsResult = mapper.readValue(lastResultJson, new TypeReference<>() { }); assertNotNull(networkModificationsResult); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().getFirst().isEmpty()); // no modifications returned @@ -261,8 +242,7 @@ void testCreateWithShortCircuitErrors() throws Exception { String generatorCreationInfosJson = getJsonBody(generatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(generatorCreationInfosJson); assertLogMessage("cannot add short-circuit extension on generator with id=idGenerator1 : Undefined directTransX", "network.modification.ShortCircuitExtensionAddError", reportService); } 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 09bfc642e..42c7db328 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorModificationTest.java @@ -20,7 +20,6 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import org.springframework.util.CollectionUtils; import java.util.*; @@ -32,9 +31,7 @@ import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.gridsuite.modification.server.utils.assertions.Assertions.assertThat; 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.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -187,10 +184,7 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { .add(); String modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); GeneratorModificationInfos createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -201,10 +195,7 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { generatorModificationInfos.setMinQ(new AttributeModification<>(-200., OperationType.SET)); modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1); @@ -216,10 +207,7 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { generatorModificationInfos.setMaxQ(new AttributeModification<>(200., OperationType.SET)); modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(2); @@ -230,10 +218,7 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { generatorModificationInfos.setMinQ(new AttributeModification<>(-1.1, OperationType.SET)); modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(3); @@ -248,10 +233,7 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { generatorModificationInfos.setMaxP(null); generatorModificationInfos.setRatedS(null); modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(4); assertThat(createdModification).recursivelyEquals(generatorModificationInfos); testNetworkModificationsCount(getGroupId(), 5); @@ -265,10 +247,7 @@ void testGeneratorShortCircuitAttributesModification() throws Exception { generatorModificationInfos.setDirectTransX(null); String modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); GeneratorModificationInfos createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -281,10 +260,7 @@ void testGeneratorShortCircuitAttributesModification() throws Exception { modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1); @@ -300,10 +276,7 @@ void testGeneratorVoltageRegulatorAttributesModification() throws Exception { generatorModificationInfos.setVoltageRegulationOn(new AttributeModification<>(true, OperationType.SET)); String modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); GeneratorModificationInfos createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -314,10 +287,7 @@ void testGeneratorVoltageRegulatorAttributesModification() throws Exception { generatorModificationInfos.setVoltageRegulationOn(null); modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1); @@ -328,10 +298,7 @@ void testGeneratorVoltageRegulatorAttributesModification() throws Exception { generatorModificationInfos.setVoltageRegulationType(new AttributeModification<>(VoltageRegulationType.LOCAL, OperationType.SET)); modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(2); @@ -346,10 +313,7 @@ void testGeneratorVoltageRegulatorAttributesModification() throws Exception { generatorModificationInfos.setParticipate(null); modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(3); assertThat(createdModification).recursivelyEquals(generatorModificationInfos); @@ -363,8 +327,7 @@ void testCreateWithErrors() throws Exception { generatorModificationInfos.setEnergySource(new AttributeModification<>(null, OperationType.UNSET)); String generatorModificationInfosJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(generatorModificationInfosJson); assertEquals(EnergySource.OTHER, getNetwork().getGenerator("idGenerator").getEnergySource()); assertLogMessage("Generator '" + "idGenerator" + "': energy source is not set", ERROR_MESSAGE_KEY, reportService); @@ -434,10 +397,7 @@ void testMinQGreaterThanMaxQ() throws Exception { }); } String modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationToCreateJson); 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(), ERROR_MESSAGE_KEY, reportService); } @@ -457,10 +417,7 @@ void testActivePowerZeroOrBetweenMinAndMaxActivePower() throws Exception { Double activePower = generatorModificationInfos.getTargetP() != null ? generatorModificationInfos.getTargetP().getValue() : generator.getTargetP(); String modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); 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 + "]", ERROR_MESSAGE_KEY, reportService); @@ -475,10 +432,7 @@ void testUnsetAttributes() throws Exception { String generatorModificationInfosJson = getJsonBody(generatorModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(generatorModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(generatorModificationInfosJson); assertEquals(Double.NaN, getNetwork().getGenerator("idGenerator").getTargetV()); //Unset TargetQ (voltage regulation needs to be turned on and voltage setpoint to have a value) @@ -486,10 +440,7 @@ void testUnsetAttributes() throws Exception { generatorModificationInfos.setTargetV(new AttributeModification<>(44.0, OperationType.SET)); generatorModificationInfos.setTargetQ(new AttributeModification<>(null, OperationType.UNSET)); generatorModificationInfosJson = getJsonBody(generatorModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(generatorModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(generatorModificationInfosJson); assertEquals(Double.NaN, getNetwork().getGenerator("idGenerator").getTargetQ()); } @@ -506,10 +457,7 @@ void changeGeneratorOnBusBreakerWithoutBusBarSection() throws Exception { .connectionPosition(new AttributeModification<>(1, OperationType.SET)) .build(); String generatorModificationInfosJson = getJsonBody(generatorModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(generatorModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(generatorModificationInfosJson); generatorModificationInfos = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); assertEquals(1, generatorModificationInfos.getConnectionPosition().getValue()); } 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 6213dcf0a..0300283c9 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorScalingTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorScalingTest.java @@ -29,7 +29,6 @@ import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import java.nio.file.Paths; import java.time.Instant; @@ -42,11 +41,6 @@ import static org.gridsuite.modification.server.impacts.TestImpactUtils.createCollectionElementImpact; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author Seddik Yengui @@ -191,10 +185,7 @@ void testVentilationModeWithoutDistributionKey() throws Exception { String modificationToCreateJson = getJsonBody(modificationToCreate, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationToCreateJson); assertEquals(200, getNetwork().getGenerator(GENERATOR_ID_2).getTargetP(), 0.01D); assertEquals(200, getNetwork().getGenerator(GENERATOR_ID_3).getTargetP(), 0.01D); @@ -229,8 +220,7 @@ void testFilterWithWrongIds() throws Exception { .build(); String body = getJsonBody(generatorScalingInfo, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(body); assertLogMessage(generatorScalingInfo.getErrorType().name() + ": 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); @@ -276,15 +266,8 @@ void testScalingCreationWithWarning() throws Exception { String modificationToCreateJson = getJsonBody(generatorScalingInfo, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()) - .content(modificationToCreateJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - var response = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()) - .andReturn(); + saveAndApply(modificationToCreateJson); - assertNotNull(response.getResponse().getContentAsString()); assertEquals(600, getNetwork().getGenerator(GENERATOR_ID_9).getTargetP(), 0.01D); assertEquals(300, getNetwork().getGenerator(GENERATOR_ID_10).getTargetP(), 0.01D); @@ -485,12 +468,7 @@ private void testVariationWithSomeDisconnections(VariationMode variationMode, Li String modificationToCreateJson = getJsonBody(generatorScalingInfo, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()) - .content(modificationToCreateJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationToCreateJson); // If we sum the targetP for all expected modified generators, we should have the requested variation value double connectedGeneratorsTargetP = modifiedGenerators 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..52f861955 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GroovyScriptTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GroovyScriptTest.java @@ -14,8 +14,6 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.util.Set; import java.util.UUID; @@ -25,9 +23,7 @@ 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.assertEquals; -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.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -66,64 +62,44 @@ protected void assertAfterNetworkModificationDeletion() { @Test void testGroovy() throws Exception { - MvcResult mvcResult; - GroovyScriptInfos groovyScriptInfos = GroovyScriptInfos.builder() .stashed(false) .script("network.getGenerator('idGenerator').targetP=12\n") .build(); String groovyScriptInfosJson = getJsonBody(groovyScriptInfos, null); // apply groovy script with generator target P modification - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()) - .andReturn(); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); + saveAndApply(groovyScriptInfosJson); + testElementModificationImpact(mapper, lastResultJson, Set.of("s1")); // apply groovy script with load type modification groovyScriptInfos.setScript("network.getLoad('v1load').loadType=com.powsybl.iidm.network.LoadType.FICTITIOUS\n"); groovyScriptInfosJson = getJsonBody(groovyScriptInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()) - .andReturn(); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); + saveAndApply(groovyScriptInfosJson); + testElementModificationImpact(mapper, lastResultJson, Set.of("s1")); // apply groovy script with lcc converter station power factor modification groovyScriptInfos.setScript("network.getLccConverterStation('v1lcc').powerFactor=1\n"); groovyScriptInfosJson = getJsonBody(groovyScriptInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()) - .andReturn(); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); + saveAndApply(groovyScriptInfosJson); + testElementModificationImpact(mapper, lastResultJson, Set.of("s1")); // apply groovy script with line R modification groovyScriptInfos.setScript("network.getLine('line1').r=2\n"); groovyScriptInfosJson = getJsonBody(groovyScriptInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()) - .andReturn(); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1", "s2")); + saveAndApply(groovyScriptInfosJson); + testElementModificationImpact(mapper, lastResultJson, Set.of("s1", "s2")); // apply groovy script with two windings transformer ratio tap modification groovyScriptInfos.setScript("network.getTwoWindingsTransformer('trf1').getRatioTapChanger().tapPosition=2\n"); groovyScriptInfosJson = getJsonBody(groovyScriptInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()) - .andReturn(); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); + saveAndApply(groovyScriptInfosJson); + testElementModificationImpact(mapper, lastResultJson, Set.of("s1")); // apply groovy script with three windings transformer phase tap modification groovyScriptInfos.setScript("network.getThreeWindingsTransformer('trf6').getLeg1().getPhaseTapChanger().tapPosition=0\n"); groovyScriptInfosJson = getJsonBody(groovyScriptInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()) - .andReturn(); - testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); + saveAndApply(groovyScriptInfosJson); + testElementModificationImpact(mapper, lastResultJson, Set.of("s1")); testNetworkModificationsCount(getGroupId(), 6); } 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..c11f4a480 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LccCreationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LccCreationTest.java @@ -18,7 +18,6 @@ import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; import java.util.List; import java.util.Map; @@ -29,8 +28,6 @@ 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.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author Ghazwa Rehili @@ -147,8 +144,7 @@ void testCreateWithErrors() throws Exception { LccCreationInfos lccCreationInfos = (LccCreationInfos) buildModification(); lccCreationInfos.setEquipmentId(""); String lccCreationInfosJson = getJsonBody(lccCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lccCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lccCreationInfosJson); assertLogMessage("Invalid id ''", ERROR_MESSAGE_KEY, reportService); // not found voltage level @@ -159,8 +155,7 @@ void testCreateWithErrors() throws Exception { lccCreationInfos.setConverterStation2(converterStationCreationInfos); lccCreationInfosJson = getJsonBody(lccCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lccCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lccCreationInfosJson); assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, "notFoundVoltageLevelId").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -168,8 +163,7 @@ void testCreateWithErrors() throws Exception { lccCreationInfos = (LccCreationInfos) buildModification(); lccCreationInfos.setEquipmentId("hvdcLine"); lccCreationInfosJson = getJsonBody(lccCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lccCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lccCreationInfosJson); assertLogMessage(new NetworkModificationException(HVDC_LINE_ALREADY_EXISTS, "hvdcLine").getMessage(), 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 08d2e7582..d09cf0fc2 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineAttachToVoltageLevelTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineAttachToVoltageLevelTest.java @@ -17,7 +17,6 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import java.util.*; @@ -25,7 +24,6 @@ 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.*; -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.*; @@ -157,10 +155,7 @@ protected void assertAfterNetworkModificationDeletion() { private void tryToCreateLineWithExistingId(LineAttachToVoltageLevelInfos tryWithExistingLine, String existingLineId) throws Exception { String tryWithExistingLineJson = getJsonBody(tryWithExistingLine, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(tryWithExistingLineJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(tryWithExistingLineJson); assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, existingLineId).getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -170,8 +165,7 @@ void testCreateWithErrors() throws Exception { LineAttachToVoltageLevelInfos lineAttachToAbsentLine = (LineAttachToVoltageLevelInfos) buildModification(); lineAttachToAbsentLine.setLineToAttachToId("absent_line_id"); String lineAttachToAbsentLineJson = getJsonBody(lineAttachToAbsentLine, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineAttachToAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lineAttachToAbsentLineJson); assertLogMessage(new NetworkModificationException(LINE_NOT_FOUND, "absent_line_id").getMessage(), ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 1); @@ -205,8 +199,7 @@ void testCreateWithExistingEquipments() throws Exception { LineAttachToVoltageLevelInfos tryWithAttachmentPointId = (LineAttachToVoltageLevelInfos) buildModification(); tryWithAttachmentPointId.setAttachmentPointId("v5"); String tryWithExistingLineJson = getJsonBody(tryWithAttachmentPointId, null); - mockMvc.perform(post(getNetworkModificationUri()).content(tryWithExistingLineJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(tryWithExistingLineJson); assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_ALREADY_EXISTS, "v5").getMessage(), 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 1ff347231..d0b84b625 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInBusBreakerTest.java @@ -40,8 +40,7 @@ void testCreateWithErrors() throws Exception { LineCreationInfos lineCreationInfos = (LineCreationInfos) buildModification(); lineCreationInfos.setBusOrBusbarSectionId2("notFoundBus"); String lineCreationInfosJson = getJsonBody(lineCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lineCreationInfosJson); assertLogMessage(new NetworkModificationException(BUS_NOT_FOUND, "notFoundBus").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -187,8 +186,7 @@ void testCreateLineOptionalParameters5() throws Exception { ) .build(); String lineCreationInfosPermanentLimitNOKJson = getJsonBody(lineCreationInfosPermanentLimitNOK, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineCreationInfosPermanentLimitNOKJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lineCreationInfosPermanentLimitNOKJson); assertLogMessage("AC line 'idLine2': permanent limit must be >= 0", 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 07807dd96..5a8de2966 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java @@ -18,8 +18,6 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.util.*; @@ -28,9 +26,7 @@ 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.*; -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.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -50,11 +46,7 @@ void testCreateWithBadVariant() throws Exception { modificationToCreate.setEquipmentId("idLine2"); modificationToCreate.setEquipmentName("nameLine2"); String modificationToCreateJson = getJsonBody(modificationToCreate, "variant_not_existing"); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + NetworkModificationsResult networkModificationsResult = saveAndApply(modificationToCreateJson); assertNotNull(networkModificationsResult); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().getFirst().isEmpty()); // no modifications returned @@ -67,23 +59,20 @@ void testCreateWithErrors() throws Exception { LineCreationInfos lineCreationInfos = (LineCreationInfos) buildModification(); lineCreationInfos.setEquipmentId(""); String lineCreationInfosJson = getJsonBody(lineCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lineCreationInfosJson); assertLogMessage("Invalid id ''", ERROR_MESSAGE_KEY, reportService); lineCreationInfos.setEquipmentId("idLine4"); lineCreationInfos.setVoltageLevelId1("notFoundVoltageLevelId1"); lineCreationInfosJson = getJsonBody(lineCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lineCreationInfosJson); assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, "notFoundVoltageLevelId1").getMessage(), ERROR_MESSAGE_KEY, reportService); lineCreationInfos.setVoltageLevelId1("v1"); lineCreationInfos.setBusOrBusbarSectionId1("notFoundBusbarSection1"); lineCreationInfosJson = getJsonBody(lineCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lineCreationInfosJson); assertLogMessage(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "notFoundBusbarSection1").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -91,22 +80,19 @@ void testCreateWithErrors() throws Exception { lineCreationInfos.setBusOrBusbarSectionId1("1.1"); lineCreationInfos.setR(Double.NaN); lineCreationInfosJson = getJsonBody(lineCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lineCreationInfosJson); assertLogMessage("AC line 'idLine4': r is invalid", ERROR_MESSAGE_KEY, reportService); lineCreationInfos.setR(100.0); lineCreationInfos.setX(Double.NaN); lineCreationInfosJson = getJsonBody(lineCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lineCreationInfosJson); assertLogMessage("AC line 'idLine4': x is invalid", ERROR_MESSAGE_KEY, reportService); // try to create an existing line lineCreationInfos.setEquipmentId("line2"); lineCreationInfosJson = getJsonBody(lineCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lineCreationInfosJson); assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "line2").getMessage(), 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 9278d297c..411983e97 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java @@ -25,9 +25,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.util.Collection; import java.util.Collections; @@ -48,10 +45,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author Ayoub LABIDI @@ -249,10 +242,7 @@ void testCreateWithErrors() throws Exception { lineModificationInfos.setEquipmentId("lineNotFound"); String lineModificationInfosJson = getJsonBody(lineModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()) - .content(lineModificationInfosJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lineModificationInfosJson); assertLogMessage(new NetworkModificationException(LINE_NOT_FOUND, "Line 'lineNotFound' : does not exist in network").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -263,10 +253,7 @@ void testPermanentLimitUnchanged() throws Exception { String modificationToCreateJson = getJsonBody(lineModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); LineModificationInfos createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -282,10 +269,7 @@ void testCharacteristicsModification() throws Exception { String modificationToCreateJson = getJsonBody(lineModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); LineModificationInfos createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -296,10 +280,7 @@ void testCharacteristicsModification() throws Exception { lineModificationInfos.setR(new AttributeModification<>(2.0, OperationType.SET)); modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1); @@ -310,10 +291,7 @@ void testCharacteristicsModification() throws Exception { lineModificationInfos.setG1(new AttributeModification<>(11.0, OperationType.SET)); modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(2); @@ -324,10 +302,7 @@ void testCharacteristicsModification() throws Exception { lineModificationInfos.setB1(new AttributeModification<>(12.0, OperationType.SET)); modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(3); @@ -338,10 +313,7 @@ void testCharacteristicsModification() throws Exception { lineModificationInfos.setG2(new AttributeModification<>(13.0, OperationType.SET)); modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(4); @@ -352,10 +324,7 @@ void testCharacteristicsModification() throws Exception { lineModificationInfos.setB2(new AttributeModification<>(14.0, OperationType.SET)); modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(5); @@ -365,10 +334,7 @@ void testCharacteristicsModification() throws Exception { lineModificationInfos.setB2(null); modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(6); @@ -383,11 +349,7 @@ void testCharacteristicsModification() throws Exception { lineModificationInfos.setB2(new AttributeModification<>(14.0, OperationType.SET)); modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true) .get(7); @@ -427,10 +389,7 @@ void testTemporaryLimitsModification() throws Exception { .build(); String modificationToCreateJson = getJsonBody(lineModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); LineModificationInfos createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -446,10 +405,7 @@ void testTemporaryLimitsModification() throws Exception { .build(); modificationToCreateJson = getJsonBody(lineModificationInfos1, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1); @@ -504,19 +460,13 @@ private void changeLineConnectionState(Line existingEquipment, boolean expectedS assertThat(existingEquipment.getTerminal2().isConnected()).isNotEqualTo(expectedState); String modificationInfosJson = getJsonBody(modificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationInfosJson); // connection state has changed as expected assertThat(existingEquipment.getTerminal1().isConnected()).isEqualTo(expectedState); assertThat(existingEquipment.getTerminal2().isConnected()).isEqualTo(expectedState); // try to modify again => no change on connection state - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationInfosJson); assertThat(existingEquipment.getTerminal1().isConnected()).isEqualTo(expectedState); assertThat(existingEquipment.getTerminal2().isConnected()).isEqualTo(expectedState); } @@ -535,10 +485,7 @@ void changeLineConnectablePosition() throws Exception { .connectionPosition2(new AttributeModification<>(1, OperationType.SET)) .build(); String modificationInfosJson = getJsonBody(lineModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationInfosJson); LineModificationInfos createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); assertEquals(1, createdModification.getConnectionPosition1().getValue()); assertEquals(1, createdModification.getConnectionPosition2().getValue()); @@ -554,10 +501,7 @@ void changeLineConnectablePositionWithoutBusBarSection() throws Exception { .connectionName2(new AttributeModification<>("line3", OperationType.SET)) .build(); String modificationInfosJson = getJsonBody(lineModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationInfosJson); LineModificationInfos createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); assertEquals("line3", createdModification.getConnectionName1().getValue()); assertEquals("line3", createdModification.getConnectionName2().getValue()); @@ -593,10 +537,7 @@ void changeLineWithConnectablePositionOneSide() throws Exception { .build(); String modificationInfosJson = getJsonBody(lineModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationInfosJson); LineModificationInfos createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); assertEquals("cnLine10", createdModification.getConnectionName1().getValue()); assertEquals(2, createdModification.getConnectionPosition1().getValue()); @@ -630,11 +571,8 @@ void addConnectablePositionExtensionToLine() throws Exception { .connectionDirection1(new AttributeModification<>(ConnectablePosition.Direction.BOTTOM, OperationType.SET)) .build(); String modificationInfosJson = getJsonBody(lineModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - Optional networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + saveAndApply(modificationInfosJson); + Optional networkModificationsResult = mapper.readValue(lastResultJson, new TypeReference<>() { }); assertTrue(networkModificationsResult.isPresent()); // the extension creation notification leads to creating first a simple impact for the line line3, which then leads to the creation @@ -648,11 +586,8 @@ void addConnectablePositionExtensionToLine() throws Exception { .connectionPosition1(new AttributeModification<>(2, OperationType.SET)) .build(); modificationInfosJson = getJsonBody(lineModificationInfos, null); - mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + saveAndApply(modificationInfosJson); + networkModificationsResult = mapper.readValue(lastResultJson, new TypeReference<>() { }); assertTrue(networkModificationsResult.isPresent()); // the extension update notification leads to creating first a simple impact for the line line3, which then leads to the creation 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..3789cf757 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineSplitWithNewVoltageLevelTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineSplitWithNewVoltageLevelTest.java @@ -17,7 +17,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; import java.util.Arrays; import java.util.Map; @@ -27,8 +26,6 @@ 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.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class LineSplitWithNewVoltageLevelTest extends AbstractNetworkModificationTest { @@ -38,8 +35,7 @@ void testCreateWithErrors() throws Exception { LineSplitWithVoltageLevelInfos lineSplitAbsentLine = (LineSplitWithVoltageLevelInfos) buildModification(); lineSplitAbsentLine.setLineToSplitId("absent_line_id"); String lineSplitAbsentLineJson = getJsonBody(lineSplitAbsentLine, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineSplitAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lineSplitAbsentLineJson); assertLogMessage(new NetworkModificationException(LINE_NOT_FOUND, "absent_line_id").getMessage(), 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..ae775f63e 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineSplitWithVoltageLevelTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineSplitWithVoltageLevelTest.java @@ -17,7 +17,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; import java.util.Arrays; import java.util.Map; @@ -28,8 +27,6 @@ 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.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class LineSplitWithVoltageLevelTest extends AbstractNetworkModificationTest { @@ -108,8 +105,7 @@ void testCreateWithExistingLines() throws Exception { tryWithNewLine1Id.setNewLine1Id("line1"); String tryWithNewLine1IdJson = getJsonBody(tryWithNewLine1Id, null); - mockMvc.perform(post(getNetworkModificationUri()).content(tryWithNewLine1IdJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(tryWithNewLine1IdJson); assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "line1").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -118,8 +114,7 @@ void testCreateWithExistingLines() throws Exception { tryWithNewLine2Id.setNewLine2Id("line1"); String tryWithNewLine2IdJson = getJsonBody(tryWithNewLine2Id, null); - mockMvc.perform(post(getNetworkModificationUri()).content(tryWithNewLine2IdJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(tryWithNewLine2IdJson); assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "line1").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -131,8 +126,7 @@ void testCreateWithWrongBusBar() throws Exception { tryWithBadId.setBbsOrBusId("999A"); String tryWithBadIdJson = getJsonBody(tryWithBadId, null); - mockMvc.perform(post(getNetworkModificationUri()).content(tryWithBadIdJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(tryWithBadIdJson); assertLogMessage(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "999A").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -141,8 +135,7 @@ void testCreateWithWrongBusBar() throws Exception { tryWithSwitchId.setBbsOrBusId("v1d1"); String tryWithSwitchIdJson = getJsonBody(tryWithSwitchId, null); - mockMvc.perform(post(getNetworkModificationUri()).content(tryWithSwitchIdJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(tryWithSwitchIdJson); assertLogMessage(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "v1d1").getMessage(), 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 389d83f26..b2db85d7c 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LinesAttachToSplitLinesTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LinesAttachToSplitLinesTest.java @@ -14,7 +14,6 @@ import org.gridsuite.modification.server.utils.NetworkWithTeePoint; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; import java.util.Map; import java.util.UUID; @@ -24,8 +23,6 @@ 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.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author David Braquart @@ -101,24 +98,21 @@ void testCreateWithErrors() throws Exception { LinesAttachToSplitLinesInfos linesAttachToSplitLinesInfos = (LinesAttachToSplitLinesInfos) buildModification(); linesAttachToSplitLinesInfos.setLineToAttachTo1Id("absent_line_id"); String lineAttachToAbsentLineJson = getJsonBody(linesAttachToSplitLinesInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineAttachToAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lineAttachToAbsentLineJson); assertLogMessage(new NetworkModificationException(LINE_NOT_FOUND, "absent_line_id").getMessage(), ERROR_MESSAGE_KEY, reportService); // try to create an already existing line linesAttachToSplitLinesInfos = (LinesAttachToSplitLinesInfos) buildModification(); linesAttachToSplitLinesInfos.setReplacingLine1Id("l1"); lineAttachToAbsentLineJson = getJsonBody(linesAttachToSplitLinesInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineAttachToAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lineAttachToAbsentLineJson); assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "l1").getMessage(), ERROR_MESSAGE_KEY, reportService); // same test on 'replacingLine2Id' linesAttachToSplitLinesInfos = (LinesAttachToSplitLinesInfos) buildModification(); linesAttachToSplitLinesInfos.setReplacingLine2Id("l1"); lineAttachToAbsentLineJson = getJsonBody(linesAttachToSplitLinesInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineAttachToAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(lineAttachToAbsentLineJson); assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "l1").getMessage(), 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..625d1f836 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInNodeBreakerTest.java @@ -18,9 +18,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -31,10 +28,6 @@ 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.*; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class LoadCreationInNodeBreakerTest extends AbstractNetworkModificationTest { @@ -48,8 +41,7 @@ void testCreateWithErrors() throws Exception { loadCreationInfos1.setConnectionDirection(null); loadCreationInfos1.setConnectionName(null); String loadCreationInfosJson1 = getJsonBody(loadCreationInfos1, null); - mockMvc.perform(post(getNetworkModificationUri()).content(loadCreationInfosJson1).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(loadCreationInfosJson1); assertLogMessage("Technical error: java.lang.NullPointerException", ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 1); @@ -58,16 +50,14 @@ void testCreateWithErrors() throws Exception { loadCreationInfos.setEquipmentId(""); String loadCreationInfosJson = getJsonBody(loadCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(loadCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(loadCreationInfosJson); assertLogMessage("Invalid id ''", ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 2); // VoltageLevel not found loadCreationInfos.setVoltageLevelId("notFoundVoltageLevelId"); loadCreationInfosJson = getJsonBody(loadCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(loadCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(loadCreationInfosJson); assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, "notFoundVoltageLevelId").getMessage(), ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 3); @@ -76,8 +66,7 @@ void testCreateWithErrors() throws Exception { loadCreationInfos.setVoltageLevelId("v2"); loadCreationInfos.setBusOrBusbarSectionId("notFoundBusbarSection"); loadCreationInfosJson = getJsonBody(loadCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(loadCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(loadCreationInfosJson); assertLogMessage(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "notFoundBusbarSection").getMessage(), ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 4); @@ -85,17 +74,12 @@ void testCreateWithErrors() throws Exception { loadCreationInfos.setBusOrBusbarSectionId("1B"); loadCreationInfos.setP0(Double.NaN); loadCreationInfosJson = getJsonBody(loadCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(loadCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(loadCreationInfosJson); assertLogMessage("Load 'idLoad1': p0 is invalid", ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 5); loadCreationInfosJson = getJsonBody(loadCreationInfos, "variant_not_existing"); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(loadCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpectAll(status().isOk()).andReturn(); - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + NetworkModificationsResult networkModificationsResult = saveAndApply(loadCreationInfosJson); assertNotNull(networkModificationsResult); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().getFirst().isEmpty()); // no modifications returned diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LoadModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LoadModificationTest.java index 2e3e14a1d..a81dfbff5 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LoadModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LoadModificationTest.java @@ -19,7 +19,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; import java.util.Collection; import java.util.List; @@ -29,8 +28,6 @@ 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.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class LoadModificationTest extends AbstractInjectionModificationTest { @@ -122,8 +119,7 @@ void testCreateWithErrors() throws Exception { .build(); String loadModificationInfosJson = getJsonBody(loadModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(loadModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(loadModificationInfosJson); assertLogMessage("Load 'v1load': load type is null", ERROR_MESSAGE_KEY, reportService); } 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..c5b3e4ff0 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LoadScalingTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LoadScalingTest.java @@ -25,13 +25,11 @@ import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.service.FilterService; import org.gridsuite.modification.server.utils.NetworkCreation; -import org.hamcrest.core.IsNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import java.nio.file.Paths; import java.time.Instant; @@ -44,11 +42,6 @@ import static org.gridsuite.modification.server.impacts.TestImpactUtils.createCollectionElementImpact; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.assertEquals; -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; /** * @author bendaamerahm @@ -186,10 +179,7 @@ void testVentilationModeWithoutDistributionKey() throws Exception { .build(); String body = getJsonBody(modificationToCreate, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(body); wireMockUtils.verifyGetRequest(stubNonDistributionKey, PATH, handleQueryParams(FILTER_NO_DK), false); @@ -225,10 +215,7 @@ void testFilterWithWrongIds() throws Exception { .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))).getId(); String body = getJsonBody(loadScalingInfo, null); - mockMvc.perform(post(getNetworkModificationUri()) - .content(body) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(body); assertLogMessage(loadScalingInfo.getErrorType().name() + ": 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); @@ -275,15 +262,7 @@ void testScalingCreationWithWarning() throws Exception { .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))).getId(); String body = getJsonBody(loadScalingInfo, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()) - .content(body) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpectAll( - status().isOk(), - content().string(IsNull.notNullValue()) - ); + saveAndApply(body); wireMockUtils.verifyGetRequest(stubMultipleWrongIds, PATH, Map.of("ids", WireMock.matching(".*")), false); assertEquals(600, getNetwork().getLoad(LOAD_ID_9).getP0(), 0.01D); @@ -494,12 +473,7 @@ private void testVariationWithSomeDisconnections(VariationMode variationMode, Li String modificationToCreateJson = getJsonBody(loadScalingInfo, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()) - .content(modificationToCreateJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationToCreateJson); // If we sum the P0 for all expected modified loads, we should have the requested variation value double connectedLoadsConstantP = modifiedLoads 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..06569be40 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationEnergiseSideOneLineTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationEnergiseSideOneLineTest.java @@ -15,7 +15,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; import java.util.Map; import java.util.UUID; @@ -24,8 +23,6 @@ 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.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class OperatingStatusModificationEnergiseSideOneLineTest extends AbstractNetworkModificationTest { @@ -96,8 +93,7 @@ void testCreateWithErrors() throws Exception { modificationInfos.setEquipmentId("cantdisconnect"); String modificationJson = getJsonBody(modificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationJson); assertLogMessage(new NetworkModificationException(OPERATING_STATUS_MODIFICATION_ERROR, "Unable to energise equipment end").getMessage(), 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..45fa7e452 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationEnergiseSideTwoLineTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationEnergiseSideTwoLineTest.java @@ -15,7 +15,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; import java.util.Map; import java.util.UUID; @@ -24,8 +23,6 @@ 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.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class OperatingStatusModificationEnergiseSideTwoLineTest extends AbstractNetworkModificationTest { @@ -95,8 +92,7 @@ void testCreateWithErrors() throws Exception { modificationInfos.setEquipmentId("cantdisconnect"); String modificationJson = getJsonBody(modificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationJson); assertLogMessage(new NetworkModificationException(OPERATING_STATUS_MODIFICATION_ERROR, "Unable to energise equipment end").getMessage(), 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..c695f2d2b 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationLockoutLineTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationLockoutLineTest.java @@ -21,7 +21,6 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import java.util.Map; import java.util.UUID; @@ -33,10 +32,8 @@ import static org.gridsuite.modification.server.utils.NetworkUtil.createSwitch; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; 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; @Tag("IntegrationTest") @@ -104,10 +101,7 @@ private void testLockoutLine(String lineID) throws Exception { String modificationJson = getJsonBody(modificationInfos, null); assertNull(getNetwork().getLine(lineID).getExtension(OperatingStatus.class)); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(modificationJson); TestUtils.assertOperatingStatus(getNetwork(), lineID, TARGET_BRANCH_STATUS); } @@ -166,8 +160,7 @@ void testCreateWithErrors() throws Exception { modificationInfos.setEquipmentId("notFound"); String modificationJson = getJsonBody(modificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationJson); assertNull(getNetwork().getLine("notFound")); assertLogMessage(new NetworkModificationException(EQUIPMENT_NOT_FOUND, "notFound").getMessage(), ERROR_MESSAGE_KEY, reportService); 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..d7d876a91 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorCreationInBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorCreationInBusBreakerTest.java @@ -16,7 +16,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; import java.time.Instant; import java.time.temporal.ChronoUnit; @@ -28,8 +27,6 @@ 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.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class ShuntCompensatorCreationInBusBreakerTest extends AbstractNetworkModificationTest { @@ -42,8 +39,7 @@ void testCreateWithErrors() throws Exception { shunt.setBusOrBusbarSectionId("notFoundBus"); String shuntJson = getJsonBody(shunt, null); - mockMvc.perform(post(getNetworkModificationUri()).content(shuntJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(shuntJson); assertLogMessage(new NetworkModificationException(BUS_NOT_FOUND, "notFoundBus").getMessage(), 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..e320c770c 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorCreationInNodeBreakerTest.java @@ -97,8 +97,7 @@ void testCreateWithError() throws Exception { modificationToCreate.setEquipmentId("v5shunt"); assertNotNull(getNetwork().getShuntCompensator("v5shunt")); String modificationToCreateJson = getJsonBody(modificationToCreate, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationToCreateJson); assertLogMessage(new NetworkModificationException(SHUNT_COMPENSATOR_ALREADY_EXISTS, "v5shunt").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -109,8 +108,7 @@ void testCreateWithMaximumSectionCountError() throws Exception { modificationToCreate.setMaximumSectionCount(0); String modificationToCreateJson = getJsonBody(modificationToCreate, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationToCreateJson); assertLogMessage(new NetworkModificationException(CREATE_SHUNT_COMPENSATOR_ERROR, "Maximum section count should be greater or equal to 1").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -122,8 +120,7 @@ void testCreateWithSectionError() throws Exception { modificationToCreate.setSectionCount(3); String modificationToCreateJson = getJsonBody(modificationToCreate, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationToCreateJson); assertLogMessage(new NetworkModificationException(CREATE_SHUNT_COMPENSATOR_ERROR, "Section count should be between 0 and Maximum section count (2), actual : 3").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -134,8 +131,7 @@ void testCreateWithExistingConnectionPosition() throws Exception { dto.setConnectionPosition(2); String modificationToCreateJson = getJsonBody(dto, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationToCreateJson); } @Test 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 83e5b163a..d86777e0e 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorModificationTest.java @@ -18,7 +18,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import java.util.Collection; import java.util.List; @@ -32,9 +31,7 @@ import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.assertFalse; -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.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -59,8 +56,7 @@ void testEquipmentWithWrongId() throws Exception { .build(); String body = getJsonBody(shuntCompensator, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(body); assertLogMessage(new NetworkModificationException(SHUNT_COMPENSATOR_NOT_FOUND, "Shunt compensator wrong id does not exist in network").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -75,10 +71,7 @@ void testWrongMaximumSectionCount() throws Exception { .build(); String body = getJsonBody(shuntCompensator, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(body); assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, String.format("Maximum section count should be greater or equal to 1")).getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -93,10 +86,7 @@ void testWrongSectionCount() throws Exception { .build(); String body = getJsonBody(shuntCompensator, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(body); assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, String.format("Section count should be between 0 and Maximum section count (1), actual : 3")).getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -117,10 +107,7 @@ void testWrongSectionCountChangeSectionCount() throws Exception { .build(); String body = getJsonBody(shuntCompensatorModifications, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(body); assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, String.format("Section count should be between 0 and Maximum section count (1), actual : 3")).getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -141,10 +128,7 @@ void testWrongSectionCountChangeMaximumSectionCount() throws Exception { .build(); String body = getJsonBody(shuntCompensatorModifications, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(body); assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, "Section count should be between 0 and Maximum section count (1), actual : -1").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -159,10 +143,7 @@ void testNegativeQmaxAtNominalV() throws Exception { .build(); String body = getJsonBody(shuntCompensator, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(body); assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, "Qmax at nominal voltage should be greater or equal to 0").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -185,8 +166,7 @@ void testCreateModificationWithShuntCompensatorType() throws Exception { .build(); String body = getJsonBody(modificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(body); assertEquals(-1.0, model.getBPerSection(), 0); } @@ -208,8 +188,7 @@ void testCreateModificationWithSusceptancePerSection() throws Exception { .build(); String body = getJsonBody(modificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(body); assertEquals(3.0, model.getBPerSection(), 0); } @@ -227,8 +206,7 @@ void testCreateModificationWithSections() throws Exception { .build(); String body = getJsonBody(shuntCompensator, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(body); assertEquals(3, shuntCompensatorToModify.getMaximumSectionCount()); assertEquals(2, shuntCompensatorToModify.getSectionCount()); 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..ca53ecfed 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInBusBreakerTest.java @@ -18,7 +18,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; import java.util.List; import java.util.Map; @@ -29,8 +28,6 @@ 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.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author Ghazwa Rehili @@ -111,8 +108,7 @@ void testCreateWithBusBarSectionErrors() throws Exception { staticVarCompensatorCreationInfos.setBusOrBusbarSectionId("notFoundBus"); String body = getJsonBody(staticVarCompensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(body); assertLogMessage(new NetworkModificationException(BUS_NOT_FOUND, "notFoundBus").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -126,8 +122,7 @@ void testCreateWithRegulatedTerminalError() throws Exception { staticVarCompensatorCreationInfos.setRegulatingTerminalType("STATIC_VAR_COMPENSATOR"); String staticVarCompensatorInfosJson = getJsonBody(staticVarCompensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(staticVarCompensatorInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(staticVarCompensatorInfosJson); assertLogMessage(new NetworkModificationException(EQUIPMENT_NOT_FOUND, "Equipment with id=test not found with type STATIC_VAR_COMPENSATOR").getMessage(), 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..245516e25 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInNodeBreakerTest.java @@ -16,9 +16,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -29,10 +26,6 @@ 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.*; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author Ghazwa Rehili @@ -116,16 +109,14 @@ void testCreateWithErrors() throws Exception { StaticVarCompensatorCreationInfos compensatorCreationInfos = (StaticVarCompensatorCreationInfos) buildModification(); compensatorCreationInfos.setEquipmentId(""); String compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); assertLogMessage("Invalid id ''", ERROR_MESSAGE_KEY, reportService); // try to create an existing cspr compensatorCreationInfos = (StaticVarCompensatorCreationInfos) buildModification(); compensatorCreationInfos.setEquipmentId("v5Compensator"); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); assertLogMessage(new NetworkModificationException(STATIC_VAR_COMPENSATOR_ALREADY_EXISTS, "v5Compensator").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -133,8 +124,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfos.setEquipmentId("idStaticVarCompensator2"); compensatorCreationInfos.setVoltageLevelId("notFoundVoltageLevelId"); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, "notFoundVoltageLevelId").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -142,8 +132,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfos.setVoltageLevelId("v2"); compensatorCreationInfos.setBusOrBusbarSectionId("notFoundBusbarSection"); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); assertLogMessage(new NetworkModificationException(BUSBAR_SECTION_NOT_FOUND, "notFoundBusbarSection").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -154,8 +143,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfos.setMinQAtNominalV(null); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : StaticVarCompensator 'idStaticVarCompensator2' : minimum susceptance is not set", ERROR_MESSAGE_KEY, reportService); compensatorCreationInfos.setMinSusceptance(200.0); @@ -163,8 +151,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfos.setMaxQAtNominalV(null); compensatorCreationInfos.setMinQAtNominalV(null); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + "StaticVarCompensator 'idStaticVarCompensator2' : maximum susceptance is not set", ERROR_MESSAGE_KEY, reportService); @@ -174,8 +161,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfos.setRegulationMode(StaticVarCompensator.RegulationMode.REACTIVE_POWER); compensatorCreationInfos.setReactivePowerSetpoint(null); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + "StaticVarCompensator 'idStaticVarCompensator2' : maximum susceptance is expected to be greater than or equal to minimum susceptance", ERROR_MESSAGE_KEY, reportService); @@ -184,8 +170,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfos.setMaxQAtNominalV(200.0); compensatorCreationInfos.setMinQAtNominalV(300.0); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + "StaticVarCompensator 'idStaticVarCompensator2' : maximum Q at nominal voltage is expected to be greater than or equal to minimum Q", ERROR_MESSAGE_KEY, reportService); @@ -194,8 +179,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfos.setRegulationMode(StaticVarCompensator.RegulationMode.REACTIVE_POWER); compensatorCreationInfos.setReactivePowerSetpoint(null); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + "StaticVarCompensator 'idStaticVarCompensator2' : Reactive power setpoint is not set", ERROR_MESSAGE_KEY, reportService); @@ -203,8 +187,7 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfos.setRegulationMode(StaticVarCompensator.RegulationMode.VOLTAGE); compensatorCreationInfos.setVoltageSetpoint(null); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + "StaticVarCompensator 'idStaticVarCompensator2' : Voltage setpoint is not set", ERROR_MESSAGE_KEY, reportService); @@ -213,11 +196,8 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfos.setVoltageLevelId("v2"); compensatorCreationInfos.setBusOrBusbarSectionId("1B"); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, "variant_not_existing"); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { + saveAndApply(compensatorCreationInfosJson); + NetworkModificationsResult networkModificationsResult = mapper.readValue(lastResultJson, new TypeReference<>() { }); assertNotNull(networkModificationsResult); assertEquals(1, networkModificationsResult.modificationResults().size()); @@ -240,8 +220,7 @@ void testCreateWithErrors() throws Exception { .build(); compensatorCreationInfos.setEquipmentId("idStaticVarCompensator3"); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); testNetworkModificationsCount(getGroupId(), 12); } @@ -259,8 +238,7 @@ void testCreateWithStandbyAutomatonErrors() throws Exception { compensatorCreationInfos.setHighVoltageThreshold(300.0); compensatorCreationInfos.setQ0(Double.NaN); String compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); assertLogMessage("Cannot add standby automaton extension on Static var compensator 'idStaticVarCompensator1': b0 is invalid", "network.modification.StandbyAutomatonExtensionAddError", reportService); compensatorCreationInfos = (StaticVarCompensatorCreationInfos) buildModification(); @@ -277,8 +255,7 @@ void testCreateWithStandbyAutomatonErrors() throws Exception { compensatorCreationInfos.setQ0(400.0); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + "StaticVarCompensator 'idStaticVarCompensator2' : q0 must be within the range of minimum Q and maximum Q", ERROR_MESSAGE_KEY, reportService); @@ -289,8 +266,7 @@ void testCreateWithStandbyAutomatonErrors() throws Exception { compensatorCreationInfos.setB0(400.0); compensatorCreationInfos.setQ0(null); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + "StaticVarCompensator 'idStaticVarCompensator2' : b0 must be within the range of minimum susceptance and maximum susceptance", ERROR_MESSAGE_KEY, reportService); @@ -300,8 +276,7 @@ void testCreateWithStandbyAutomatonErrors() throws Exception { compensatorCreationInfos.setStandby(true); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); assertLogMessage("CREATE_STATIC_VAR_COMPENSATOR_ERROR : " + "StaticVarCompensator 'idStaticVarCompensator2' : Standby is only supported in Voltage Regulation mode", ERROR_MESSAGE_KEY, reportService); @@ -313,8 +288,7 @@ void testCreateWithStandbyAutomatonErrors() throws Exception { compensatorCreationInfos.setLowVoltageThreshold(250.0); compensatorCreationInfos.setHighVoltageThreshold(300.0); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(compensatorCreationInfosJson); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/SubstationCreationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/SubstationCreationTest.java index ed460a6f6..11614b2b1 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/SubstationCreationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/SubstationCreationTest.java @@ -16,7 +16,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; import java.util.List; import java.util.Map; @@ -25,8 +24,6 @@ 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.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class SubstationCreationTest extends AbstractNetworkModificationTest { @@ -76,8 +73,7 @@ void testCreateWithErrors() throws Exception { substationCreationInfos.setEquipmentId(""); String substationCreationInfosJson = getJsonBody(substationCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(substationCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(substationCreationInfosJson); assertLogMessage("Invalid id ''", ERROR_MESSAGE_KEY, reportService); } 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..b48f95acf 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/SubstationModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/SubstationModificationTest.java @@ -14,7 +14,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; import java.util.List; import java.util.Map; @@ -25,8 +24,6 @@ import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author David Braquart @@ -97,8 +94,7 @@ void testCreateWithErrors() throws Exception { .country(new AttributeModification<>(Country.JP, OperationType.SET)) .build(); String infosJson = getJsonBody(infos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(infosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(infosJson); assertLogMessage("SUBSTATION_NOT_FOUND : Substation unknown does not exist in network", ERROR_MESSAGE_KEY, reportService); } 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..b49bc672c 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java @@ -15,9 +15,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.util.Collections; import java.util.List; @@ -31,10 +28,6 @@ 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.*; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class TwoWindingsTransformerCreationBusBreakerTest extends AbstractNetworkModificationTest { @@ -286,15 +279,13 @@ void testCreateWithErrors() throws Exception { twoWindingsTransformerCreationInfos.setEquipmentId(""); String twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(twoWindingsTransformerCreationInfosJson); assertLogMessage("Invalid id ''", ERROR_MESSAGE_KEY, reportService); twoWindingsTransformerCreationInfos.setBusOrBusbarSectionId1("notFoundBus"); twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(twoWindingsTransformerCreationInfosJson); assertLogMessage(new NetworkModificationException(BUS_NOT_FOUND, "notFoundBus").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -422,15 +413,11 @@ void testCreateTwoWindingsTransformerWithPhaseTapChangerInBusBreaker() throws Ex } private void testCreateTwoWindingsTransformerInBusBreaker(TwoWindingsTransformerCreationInfos twoWindingsTransformerCreationInfos, int actualSize) throws Exception { - MvcResult mvcResult; final String transformerId = twoWindingsTransformerCreationInfos.getEquipmentId(); String twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - testBranchCreationImpacts(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); + saveAndApply(twoWindingsTransformerCreationInfosJson); + testBranchCreationImpacts(mapper, lastResultJson, Set.of("s1")); assertNotNull(getNetwork().getTwoWindingsTransformer(transformerId)); // transformer was created testNetworkModificationsCount(getGroupId(), actualSize); } 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..08bd2e3f9 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationMixedBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationMixedBreakerTest.java @@ -15,7 +15,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; import java.util.Collections; import java.util.List; @@ -26,8 +25,6 @@ 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.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class TwoWindingsTransformerCreationMixedBreakerTest extends AbstractNetworkModificationTest { @@ -296,14 +293,12 @@ void testCreateWithErrors() throws Exception { TwoWindingsTransformerCreationInfos twoWindingsTransformerCreationInfos = (TwoWindingsTransformerCreationInfos) buildModification(); twoWindingsTransformerCreationInfos.setEquipmentId(""); String twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(twoWindingsTransformerCreationInfosJson); assertLogMessage("Invalid id ''", ERROR_MESSAGE_KEY, reportService); twoWindingsTransformerCreationInfos.setBusOrBusbarSectionId1("notFoundBus"); twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(twoWindingsTransformerCreationInfosJson); assertLogMessage(new NetworkModificationException(NetworkModificationException.Type.BUSBAR_SECTION_NOT_FOUND, "notFoundBus").getMessage(), 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 7d56d97c9..08f22fb60 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java @@ -18,9 +18,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.util.Collections; import java.util.List; @@ -33,10 +30,6 @@ 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.*; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") class TwoWindingsTransformerCreationNodeBreakerTest extends AbstractNetworkModificationTest { @@ -526,15 +519,13 @@ void testCreateWithErrors() throws Exception { TwoWindingsTransformerCreationInfos twoWindingsTransformerCreationInfos = (TwoWindingsTransformerCreationInfos) buildModification(); twoWindingsTransformerCreationInfos.setEquipmentId(""); String twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(twoWindingsTransformerCreationInfosJson); assertLogMessage("Invalid id ''", ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 1); twoWindingsTransformerCreationInfos.setBusOrBusbarSectionId1("notFoundBus"); twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(twoWindingsTransformerCreationInfosJson); assertLogMessage(new NetworkModificationException(NetworkModificationException.Type.BUSBAR_SECTION_NOT_FOUND, "notFoundBus").getMessage(), ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 2); @@ -544,11 +535,8 @@ void testCreateWithErrors() throws Exception { twoWindingsTransformerCreationInfos.setEquipmentId("id2wt3"); twoWindingsTransformerCreationInfos.setEquipmentName("name2wt3"); twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, "variant_not_existing"); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + saveAndApply(twoWindingsTransformerCreationInfosJson); + NetworkModificationsResult networkModificationsResult = mapper.readValue(lastResultJson, new TypeReference<>() { }); assertNotNull(networkModificationsResult); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().getFirst().isEmpty()); // no modifications returned @@ -559,27 +547,22 @@ void testCreateWithErrors() throws Exception { twoWindingsTransformerCreationInfos = (TwoWindingsTransformerCreationInfos) buildModification(); twoWindingsTransformerCreationInfos.setEquipmentId("trf1"); twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(twoWindingsTransformerCreationInfosJson); assertLogMessage(new NetworkModificationException(TWO_WINDINGS_TRANSFORMER_ALREADY_EXISTS, "trf1").getMessage(), ERROR_MESSAGE_KEY, reportService); testNetworkModificationsCount(getGroupId(), 4); } private void testCreateTwoWindingsTransformerInNodeBreaker(TwoWindingsTransformerCreationInfos twoWindingsTransformerCreationInfos, int actualSize) throws Exception { - MvcResult mvcResult; final String transformerId = twoWindingsTransformerCreationInfos.getEquipmentId(); String twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(twoWindingsTransformerCreationInfosJson); TwoWindingsTransformer twoWindingsTransformer = getNetwork().getTwoWindingsTransformer(transformerId); assertNotNull(twoWindingsTransformer); // transformer was created int disconnector1Node1 = twoWindingsTransformer.getTerminal1().getNodeBreakerView().getNode() + 1; int disconnector2Node1 = twoWindingsTransformer.getTerminal2().getNodeBreakerView().getNode() + 1; - testBranchCreationImpacts(mapper, mvcResult.getResponse().getContentAsString(), IdentifiableType.TWO_WINDINGS_TRANSFORMER, transformerId, + testBranchCreationImpacts(mapper, lastResultJson, IdentifiableType.TWO_WINDINGS_TRANSFORMER, transformerId, twoWindingsTransformerCreationInfos.getEquipmentId() + "1_BREAKER", twoWindingsTransformerCreationInfos.getEquipmentId() + "1_DISCONNECTOR_" + disconnector1Node1 + "_0", "s1", twoWindingsTransformerCreationInfos.getEquipmentId() + "2_BREAKER", twoWindingsTransformerCreationInfos.getEquipmentId() + "2_DISCONNECTOR_" + disconnector2Node1 + "_0", "s1" ); 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 4149f9c88..02f286f58 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java @@ -20,7 +20,6 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; import java.util.*; @@ -315,10 +314,7 @@ void testCreateWithErrors() throws Exception { twoWindingsTransformerModificationInfos.setEquipmentId("2wt_not_existing"); String modificationInfosJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()) - .content(modificationInfosJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(modificationInfosJson); assertLogMessage(new NetworkModificationException(TWO_WINDINGS_TRANSFORMER_NOT_FOUND, "Two windings transformer '2wt_not_existing' : it does not exist in the network").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -653,7 +649,7 @@ void testPhaseTapChangerRegulationModification() throws Exception { .build(); String modificationToModifyJson = getJsonBody(phaseTapChangerCreation, null); - runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToModifyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + saveAndApply(modificationToModifyJson); PhaseTapChanger phaseTapChanger = twt3.getPhaseTapChanger(); @@ -669,7 +665,7 @@ void testPhaseTapChangerRegulationModification() throws Exception { phaseTapChangerCreation.getPhaseTapChanger().setRegulating(new AttributeModification<>(false, OperationType.SET)); String modificationToModifyJson2 = getJsonBody(phaseTapChangerCreation, null); - runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToModifyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); + saveAndApply(modificationToModifyJson2); phaseTapChanger = getNetwork().getTwoWindingsTransformer(twtId).getPhaseTapChanger(); // modification 2 assert @@ -684,7 +680,7 @@ void testPhaseTapChangerRegulationModification() throws Exception { phaseTapChangerCreation.getPhaseTapChanger().setRegulating(new AttributeModification<>(true, OperationType.SET)); String modificationToModifyJson3 = getJsonBody(phaseTapChangerCreation, null); - runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToModifyJson3).contentType(MediaType.APPLICATION_JSON), status().isOk()); + saveAndApply(modificationToModifyJson3); phaseTapChanger = getNetwork().getTwoWindingsTransformer(twtId).getPhaseTapChanger(); @@ -716,7 +712,7 @@ void testPhaseTapChangerRegulationModification2() throws Exception { String modificationToModifyJson1 = getJsonBody(phaseTapChangerCreation, null); // modification 1 assert - runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToModifyJson1).contentType(MediaType.APPLICATION_JSON), status().isOk()); + saveAndApply(modificationToModifyJson1); assertLogMessage(new NetworkModificationException(MODIFY_TWO_WINDINGS_TRANSFORMER_ERROR, "Regulation value is missing when modifying, phase tap changer can not regulate").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -759,8 +755,7 @@ private void changeConnectionState(TwoWindingsTransformer existingEquipment, Two .terminal2Connected(side == TwoSides.TWO ? new AttributeModification<>(expectedState, OperationType.SET) : null) .build(); String modificationInfosJson = getJsonBody(modificationInfos, null); - MvcResult mvcResult = runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + NetworkModificationsResult networkModificationsResult = saveAndApply(modificationInfosJson); assertEquals(1, extractApplicationStatus(networkModificationsResult).size()); if (!Objects.isNull(errorMessage)) { @@ -774,7 +769,7 @@ private void changeConnectionState(TwoWindingsTransformer existingEquipment, Two assertEquals(NetworkModificationResult.ApplicationStatus.ALL_OK, extractApplicationStatus(networkModificationsResult).getFirst()); // try to modify again => no change on connection state - runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + saveAndApply(modificationInfosJson); assertThat(terminal.isConnected()).isEqualTo(expectedState); } } @@ -936,7 +931,7 @@ void testPhaseTapChangerRegulationCreation() throws Exception { .build(); String modificationToModifyJson = getJsonBody(phaseTapChangerCreation, null); - runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToModifyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + saveAndApply(modificationToModifyJson); PhaseTapChanger phaseTapChanger = twt3.getPhaseTapChanger(); @@ -982,7 +977,7 @@ void testPhaseTapChangerRegulationCreation() throws Exception { .build(); modificationToModifyJson = getJsonBody(phaseTapChangerCreation, null); - runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToModifyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + saveAndApply(modificationToModifyJson); phaseTapChanger = twt3.getPhaseTapChanger(); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageInitModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VoltageInitModificationTest.java index 5888ba5be..2741927d1 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageInitModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageInitModificationTest.java @@ -12,8 +12,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import com.fasterxml.jackson.core.type.TypeReference; import java.time.Instant; @@ -25,10 +23,6 @@ import static org.gridsuite.modification.server.utils.NetworkUtil.createSwitch; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.assertEquals; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author Franck Lecuyer @@ -297,10 +291,7 @@ private void testVoltageInitShunt(String shuntCompensatorId, int currentSectionC .build(); String body = getJsonBody(modification, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(body); } @Test 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..6026c99e2 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelCreationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelCreationTest.java @@ -18,8 +18,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import java.util.Arrays; import java.util.List; @@ -30,10 +28,6 @@ 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.*; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author walid Sahnoun @@ -103,8 +97,7 @@ void testCreateWithErrors() throws Exception { vli.setSubstationId("absent_station"); String vliJson = getJsonBody(vli, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vliJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vliJson); assertLogMessage(new NetworkModificationException(SUBSTATION_NOT_FOUND, "absent_station").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -113,8 +106,7 @@ void testCreateWithErrors() throws Exception { vli.getCouplingDevices().get(0).setBusbarSectionId2("1.1"); String vliJsonObject = getJsonBody(vli, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vliJsonObject); assertLogMessage(new NetworkModificationException(CREATE_VOLTAGE_LEVEL_ERROR, "Coupling between same bus bar section is not allowed").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -122,8 +114,7 @@ void testCreateWithErrors() throws Exception { vli.setIpMin(0.0); vli.setIpMax(null); vliJsonObject = getJsonBody(vli, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vliJsonObject); assertLogMessage(new NetworkModificationException(CREATE_VOLTAGE_LEVEL_ERROR, "IpMax is required").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -131,16 +122,14 @@ void testCreateWithErrors() throws Exception { vli.setEquipmentId(""); String vliJsonS2Object = getJsonBody(vli, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonS2Object).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vliJsonS2Object); assertLogMessage("Invalid id ''", ERROR_MESSAGE_KEY, reportService); // try to create an existing VL vli = (VoltageLevelCreationInfos) buildModification(); vli.setEquipmentId("v1"); vliJsonObject = getJsonBody(vli, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vliJsonObject); assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_ALREADY_EXISTS, "v1").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -152,16 +141,14 @@ void testCreateWithBbsNotExist() throws Exception { vli.getCouplingDevices().get(0).setBusbarSectionId1("1.1"); vli.getCouplingDevices().get(0).setBusbarSectionId2("bbs"); String vliJsonObject = getJsonBody(vli, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vliJsonObject); assertNotNull(getNetwork().getVoltageLevel("vl_1")); vli.setEquipmentId("vl_2"); vli.getCouplingDevices().get(0).setBusbarSectionId1("bbs"); vli.getCouplingDevices().get(0).setBusbarSectionId2("1.1"); String vliJsonObject2 = getJsonBody(vli, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject2).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vliJsonObject2); assertNotNull(getNetwork().getVoltageLevel("vl_2")); } @@ -172,10 +159,7 @@ void testIpMinEqualsIpMax() throws Exception { vli.setIpMin(25.0); vli.setIpMax(25.0); String vliJsonObject = getJsonBody(vli, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(vliJsonObject); // VL is created assertNotNull(getNetwork().getVoltageLevel("vl_ok")); } @@ -187,8 +171,7 @@ void testCreateWithIpMinNull() throws Exception { vli.setIpMin(null); vli.setIpMax(25.0); String vliJsonObject = getJsonBody(vli, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vliJsonObject); // VL is created assertNotNull(getNetwork().getVoltageLevel("vl_ok")); } @@ -200,10 +183,7 @@ private void testIccWithError(Double ipMin, Double ipMax, String reportError) th vli.setIpMax(ipMax); String vliJsonObject = getJsonBody(vli, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(vliJsonObject); // VL could not have been created assertNull(getNetwork().getVoltageLevel("vl_ko")); assertLogMessage(new NetworkModificationException(CREATE_VOLTAGE_LEVEL_ERROR, reportError).getMessage(), ERROR_MESSAGE_KEY, reportService); 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..c48913d41 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelModificationTest.java @@ -16,8 +16,6 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -27,10 +25,6 @@ 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.*; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author Seddik Yengui @@ -245,12 +239,7 @@ void testSetIpMaxOnEquipmentWitOnlyIpMaxExtension() throws Exception { private void applyModification(VoltageLevelModificationInfos infos) throws Exception { String body = getJsonBody(infos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()) - .content(body) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(body); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelTopologyModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelTopologyModificationTest.java index 082c649fc..22c441f7d 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelTopologyModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelTopologyModificationTest.java @@ -18,14 +18,11 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import java.util.*; 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.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -157,11 +154,7 @@ void testInvalidVoltageLevel() throws Exception { .build(); String body = getJsonBody(infos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()) - .content(body) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); + saveAndApply(body); } @Test @@ -201,11 +194,7 @@ void testNonExistentSwitch() throws Exception { .build(); String body = getJsonBody(infos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()) - .content(body) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); + saveAndApply(body); } @Override 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..599b6c430 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VscCreationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VscCreationTest.java @@ -15,8 +15,6 @@ import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -28,10 +26,6 @@ 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.*; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author Seddik Yengui @@ -219,8 +213,7 @@ void testCreateWithErrors() throws Exception { VscCreationInfos vscCreationInfos = (VscCreationInfos) buildModification(); vscCreationInfos.setEquipmentId(""); String vscCreationInfosJson = getJsonBody(vscCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vscCreationInfosJson); assertLogMessage("Invalid id ''", ERROR_MESSAGE_KEY, reportService); // not found voltage level @@ -229,8 +222,7 @@ void testCreateWithErrors() throws Exception { converterStationCreationInfos.setVoltageLevelId("notFoundVoltageLevelId"); vscCreationInfos.setConverterStation2(converterStationCreationInfos); vscCreationInfosJson = getJsonBody(vscCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vscCreationInfosJson); assertLogMessage(new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, "notFoundVoltageLevelId").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -243,8 +235,7 @@ void testCreateWithErrors() throws Exception { vscCreationInfos.setConverterStation1(converterStationCreationInfos); vscCreationInfosJson = getJsonBody(vscCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vscCreationInfosJson); assertLogMessage(new NetworkModificationException(CREATE_VSC_ERROR, "Vsc 'vsc1' : minimum reactive power is not set").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -256,8 +247,7 @@ void testCreateWithErrors() throws Exception { vscCreationInfos.setConverterStation1(converterStationCreationInfos); vscCreationInfosJson = getJsonBody(vscCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vscCreationInfosJson); assertLogMessage(new NetworkModificationException(CREATE_VSC_ERROR, "Vsc 'vsc1' : maximum reactive power is not set").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -270,8 +260,7 @@ void testCreateWithErrors() throws Exception { vscCreationInfos.setConverterStation1(converterStationCreationInfos); vscCreationInfosJson = getJsonBody(vscCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vscCreationInfosJson); assertLogMessage(new NetworkModificationException(CREATE_VSC_ERROR, "Vsc 'vsc1' : maximum reactive power is expected to be greater than or equal to minimum reactive power").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -283,8 +272,7 @@ void testCreateWithErrors() throws Exception { vscCreationInfos.setConverterStation1(converterStationCreationInfos); vscCreationInfosJson = getJsonBody(vscCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vscCreationInfosJson); assertLogMessage(new NetworkModificationException(CREATE_VSC_ERROR, "Vsc 'vsc1' : P is not set in a reactive capability curve limits point").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -292,8 +280,7 @@ void testCreateWithErrors() throws Exception { vscCreationInfos = (VscCreationInfos) buildModification(); vscCreationInfos.setEquipmentId("hvdcLine"); vscCreationInfosJson = getJsonBody(vscCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(vscCreationInfosJson); assertLogMessage(new NetworkModificationException(HVDC_LINE_ALREADY_EXISTS, "hvdcLine").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -304,10 +291,7 @@ void testCreateAngleDroopPowerControlWithoutEnabling() throws Exception { vscCreationInfos.setAngleDroopActivePowerControl(false); String vscCreationInfosJson = getJsonBody(vscCreationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(vscCreationInfosJson); HvdcLine hvdcLine = getNetwork().getHvdcLine("vsc1"); assertThat(hvdcLine).isNotNull(); HvdcAngleDroopActivePowerControl activePowerControlExt = hvdcLine.getExtension(HvdcAngleDroopActivePowerControl.class); @@ -324,10 +308,7 @@ void testNotCreateAngleDroopPowerControlWithoutEnabling() throws Exception { vscCreationInfos.setDroop(null); vscCreationInfos.setP0(null); String vscCreationInfosJson = getJsonBody(vscCreationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(vscCreationInfosJson); HvdcLine hvdcLine = getNetwork().getHvdcLine("vsc1"); assertThat(hvdcLine).isNotNull(); HvdcAngleDroopActivePowerControl activePowerControlExt = hvdcLine.getExtension(HvdcAngleDroopActivePowerControl.class); @@ -368,10 +349,7 @@ private VscCreationInfos buildModificationWithDroopAbsentInfos(boolean isPresent private void checkDroopWithAbsentInfos(VscCreationInfos vscCreationInfos) throws Exception { String vscCreationInfosJson = getJsonBody(vscCreationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(vscCreationInfosJson); assertLogMessage(new NetworkModificationException(WRONG_HVDC_ANGLE_DROOP_ACTIVE_POWER_CONTROL, ACTIVE_POWER_CONTROL_DROOP_P0_REQUIRED_ERROR_MSG).getMessage(), ERROR_MESSAGE_KEY, reportService); 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..310e46a3d 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 @@ -6,7 +6,6 @@ */ package org.gridsuite.modification.server.modifications.byfilter.assignment; -import com.fasterxml.jackson.core.type.TypeReference; import com.github.tomakehurst.wiremock.client.WireMock; import com.github.tomakehurst.wiremock.matching.StringValuePattern; import com.powsybl.iidm.network.IdentifiableType; @@ -33,8 +32,6 @@ import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.util.*; import java.util.stream.Collectors; @@ -42,12 +39,9 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.gridsuite.modification.server.impacts.TestImpactUtils.createCollectionElementImpact; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; -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.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -190,19 +184,11 @@ protected void checkCreationApplicationStatus(List> .equipmentType(getIdentifiableType()) .assignmentInfosList(assignmentInfos) .build(); - Optional networkModificationsResult; String bodyJson = getJsonBody(modificationByAssignmentInfos, null); - - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(bodyJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - - networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); - assertTrue(networkModificationsResult.isPresent()); - assertEquals(1, extractApplicationStatus(networkModificationsResult.get()).size()); - assertEquals(applicationStatus, extractApplicationStatus(networkModificationsResult.get()).getFirst()); + NetworkModificationsResult networkModificationsResult = saveAndApply(bodyJson); + assertEquals(1, extractApplicationStatus(networkModificationsResult).size()); + assertEquals(applicationStatus, extractApplicationStatus(networkModificationsResult).getFirst()); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/AbstractByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/AbstractByFormulaModificationTest.java index 6ea3c95ba..de2de28d6 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/AbstractByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/AbstractByFormulaModificationTest.java @@ -31,8 +31,6 @@ import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.util.*; import java.util.stream.Collectors; @@ -41,10 +39,6 @@ import static org.gridsuite.modification.server.impacts.TestImpactUtils.createCollectionElementImpact; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author Seddik Yengui @@ -201,12 +195,9 @@ protected void checkCreationApplicationStatus(ByFormulaModificationInfos byFormu NetworkModificationResult.ApplicationStatus applicationStatus) throws Exception { String modificationToCreateJson = getJsonBody(byFormulaModificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); - Optional networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + Optional networkModificationsResult = mapper.readValue(lastResultJson, new TypeReference<>() { }); assertTrue(networkModificationsResult.isPresent()); assertEquals(1, extractApplicationStatus(networkModificationsResult.get()).size()); assertEquals(applicationStatus, extractApplicationStatus(networkModificationsResult.get()).getFirst()); 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..9e5c53679 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 @@ -15,7 +15,6 @@ import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.ResultActions; import java.util.Date; import java.util.List; @@ -25,10 +24,6 @@ import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.assertEquals; -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.request; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; abstract class AbstractByFilterDeletionTest extends AbstractNetworkModificationTest { protected static final UUID FILTER_ID_1 = UUID.randomUUID(); @@ -85,8 +80,7 @@ void testCreateWithErrors() throws Exception { .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))).getId(); String body = getJsonBody(byFilterDeletionInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + saveAndApply(body); assertLogMessage("Cannot find the following equipments " + EQUIPMENT_WRONG_ID_1 + " in filter filter1", "network.modification.filterEquipmentsNotFound.inFilter", reportService); @@ -129,10 +123,7 @@ void testCreateAllFiltersWrong() throws Exception { .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))).getId(); String body = getJsonBody(byFilterDeletionInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()); + saveAndApply(body); assertLogMessage(byFilterDeletionInfos.getErrorType().name() + ": 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/modifications/tabularcreations/TabularGeneratorCreationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java index 7422b7ee3..ba178af07 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java @@ -18,7 +18,6 @@ import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.dto.SubstationCreationInfos; import org.gridsuite.modification.dto.tabular.*; -import org.gridsuite.modification.server.dto.NetworkModificationsResult; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -26,7 +25,6 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -38,11 +36,9 @@ import static org.gridsuite.modification.server.impacts.TestImpactUtils.createCollectionElementImpact; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; 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.get; 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; /** @@ -247,11 +243,7 @@ void testAllModificationsHaveSucceeded() throws Exception { .build(); String tabularCreationJson = getJsonBody(creationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(tabularCreationJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(tabularCreationJson); assertLogMessage("Tabular creation: 2 generators have been created", "network.modification.tabular.creation", reportService); } @@ -298,11 +290,7 @@ void testAllModificationsHaveFailed() throws Exception { .build(); String tabularCreationJson = getJsonBody(creationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(tabularCreationJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(tabularCreationJson); assertLogMessage("Tabular creation: No generators have been created", "network.modification.tabular.creation.error", reportService); } @@ -337,16 +325,13 @@ void testUnsupportedTabularCreationType() throws Exception { .build(); String tabularCreationJson = getJsonBody(creationInfos, null); - // creation - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(tabularCreationJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - NetworkModificationsResult result = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); - assertNotNull(result); - assertEquals(1, result.modificationUuids().size()); - UUID modifId = result.modificationUuids().get(0); + MvcResult createResult = mockMvc.perform(post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + TEST_GROUP_ID) + .content(tabularCreationJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn(); + List modifUuids = mapper.readValue(createResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertNotNull(modifUuids); + assertEquals(1, modifUuids.size()); + UUID modifId = modifUuids.get(0); // try to get via the group UnsupportedOperationException exception = assertThrows( diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularGeneratorModificationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularGeneratorModificationsTest.java index 4726c32a6..477b023e7 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularGeneratorModificationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularGeneratorModificationsTest.java @@ -14,7 +14,6 @@ import org.gridsuite.modification.dto.*; import org.gridsuite.modification.dto.tabular.TabularModificationInfos; import org.gridsuite.modification.dto.tabular.TabularPropertyInfos; -import org.gridsuite.modification.server.dto.NetworkModificationsResult; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.repositories.ModificationRepository; import org.gridsuite.modification.server.repositories.TabularPropertyRepository; @@ -27,7 +26,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import org.testcontainers.shaded.org.apache.commons.lang3.tuple.Pair; import java.util.List; @@ -45,9 +43,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThrows; import static org.junit.jupiter.api.Assertions.assertEquals; -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.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -563,11 +559,7 @@ void testAllModificationsHaveFailed() throws Exception { .build(); String modificationToCreateJson = getJsonBody(modificationInfos, null); - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + saveAndApply(modificationToCreateJson); assertLogMessage("Tabular modification: No generators have been modified", "network.modification.tabular.modification.error", reportService); } @@ -600,16 +592,13 @@ void testUnsupportedTabularModificationType() throws Exception { .build(); String tabularModificationJson = getJsonBody(tabularInfos, null); - // creation - ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(tabularModificationJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); - NetworkModificationsResult result = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); - assertNotNull(result); - assertEquals(1, result.modificationUuids().size()); - UUID modifId = result.modificationUuids().get(0); + MvcResult createResult = mockMvc.perform(post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + TEST_GROUP_ID) + .content(tabularModificationJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn(); + List modifUuids = mapper.readValue(createResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertNotNull(modifUuids); + assertEquals(1, modifUuids.size()); + UUID modifId = modifUuids.get(0); // try to get via the group UnsupportedOperationException exception = assertThrows( diff --git a/src/test/java/org/gridsuite/modification/server/service/BuildTest.java b/src/test/java/org/gridsuite/modification/server/service/BuildTest.java index 6df44d139..5a71b1a4e 100644 --- a/src/test/java/org/gridsuite/modification/server/service/BuildTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/BuildTest.java @@ -993,7 +993,9 @@ void testApplyModificationWithErrors(final MockWebServer server) { // Incremental mode : No error send with exception ModificationApplicationContext applicationContext = new ModificationApplicationContext(TEST_NETWORK_ID, variantId, reportUuid, reporterId); - NetworkModificationsResult networkModificationsResult = networkModificationService.createNetworkModification(groupUuid, loadCreationInfos, List.of(applicationContext)).join(); + List savedUuids = networkModificationService.saveNetworkModification(groupUuid, loadCreationInfos); + List> applyResults = networkModificationService.applyModificationsByUuids(groupUuid, savedUuids, List.of(applicationContext)); + NetworkModificationsResult networkModificationsResult = new NetworkModificationsResult(savedUuids, applyResults); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().get(0).isPresent()); testEmptyImpactsWithErrors(networkModificationResult); @@ -1002,7 +1004,9 @@ void testApplyModificationWithErrors(final MockWebServer server) { // Save mode only (variant does not exist) : No log and no error send with exception applicationContext = new ModificationApplicationContext(TEST_NETWORK_ID, UUID.randomUUID().toString(), reportUuid, reporterId); - networkModificationsResult = networkModificationService.createNetworkModification(groupUuid, loadCreationInfos, List.of(applicationContext)).join(); + savedUuids = networkModificationService.saveNetworkModification(groupUuid, loadCreationInfos); + applyResults = networkModificationService.applyModificationsByUuids(groupUuid, savedUuids, List.of(applicationContext)); + networkModificationsResult = new NetworkModificationsResult(savedUuids, applyResults); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().get(0).isEmpty()); testNetworkModificationsCount(groupUuid, 3); diff --git a/src/test/java/org/gridsuite/modification/server/service/EquipmentIndexationTest.java b/src/test/java/org/gridsuite/modification/server/service/EquipmentIndexationTest.java index 9cf2fc2a8..70d5d7da9 100644 --- a/src/test/java/org/gridsuite/modification/server/service/EquipmentIndexationTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/EquipmentIndexationTest.java @@ -8,6 +8,7 @@ import com.powsybl.network.store.client.NetworkStoreService; import com.powsybl.network.store.client.PreloadingStrategy; import org.gridsuite.modification.dto.*; +import org.gridsuite.modification.server.ContextConfigurationWithTestChannel; import org.gridsuite.modification.server.dto.ModificationApplicationContext; import org.gridsuite.modification.server.dto.elasticsearch.EquipmentInfos; import org.gridsuite.modification.server.elasticsearch.EquipmentInfosRepository; @@ -17,14 +18,18 @@ import org.gridsuite.modification.server.repositories.ModificationRepository; import org.gridsuite.modification.server.utils.ModificationCreation; import org.gridsuite.modification.server.utils.NetworkCreation; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.mockito.stubbing.Answer; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.stream.binder.test.OutputDestination; import org.springframework.http.MediaType; +import org.springframework.messaging.Message; import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.MockMvc; @@ -33,6 +38,7 @@ import static com.powsybl.iidm.network.VariantManagerConstants.INITIAL_VARIANT_ID; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.eq; @@ -44,13 +50,15 @@ @AutoConfigureMockMvc @SpringBootTest @Tag("IntegrationTest") +@ContextConfigurationWithTestChannel class EquipmentIndexationTest { private static final UUID NETWORK_UUID = UUID.randomUUID(); private static final UUID TEST_GROUP_ID = UUID.randomUUID(); private static final UUID TEST_REPORT_ID = UUID.randomUUID(); private static final String URI_NETWORK_MODIF_BASE = "/v1/network-modifications"; private static final String URI_NETWORK_MODIF_PARAMS = "&groupUuid=" + TEST_GROUP_ID + "&reportUuid=" + TEST_REPORT_ID + "&reporterId=" + UUID.randomUUID(); - private static final String URI_NETWORK_MODIF = URI_NETWORK_MODIF_BASE + "?networkUuid=" + NETWORK_UUID + URI_NETWORK_MODIF_PARAMS; + private static final String URI_NETWORK_MODIF = URI_NETWORK_MODIF_BASE + "?networkUuid=" + NETWORK_UUID + URI_NETWORK_MODIF_PARAMS + "&receiver=me"; + private static final long TIMEOUT = 1000; private static final String NEW_VARIANT = "NewVariant"; private static final String NEW_VARIANT_2 = "NewVariant2"; @@ -61,6 +69,15 @@ class EquipmentIndexationTest { @Autowired private ObjectMapper mapper; + @Autowired + private OutputDestination output; + + @Value("${spring.cloud.stream.bindings.publishApplicationResult-out-0.destination}") + private String applicationResultDestination; + + @Value("${spring.cloud.stream.bindings.publishApplication-out-0.destination}") + private String applicationDestination; + @Autowired private EquipmentInfosService equipmentInfosService; @@ -94,6 +111,19 @@ void setUp() { equipmentInfosService.deleteAll(); } + @AfterEach + void tearOff() { + output.clear(); + } + + private void postAndApply(String bodyJson) throws Exception { + mockMvc.perform(post(URI_NETWORK_MODIF).content(bodyJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + Message resultMsg = output.receive(TIMEOUT, applicationResultDestination); + assertNotNull(resultMsg, "No message received on " + applicationResultDestination); + output.receive(TIMEOUT, applicationDestination); + } + @Test void testModificationsToImpactElasticsearch() throws Exception { network.getVariantManager().cloneVariant(VariantManagerConstants.INITIAL_VARIANT_ID, NEW_VARIANT); @@ -103,20 +133,20 @@ void testModificationsToImpactElasticsearch() throws Exception { LoadCreationInfos loadCreationInfos = ModificationCreation.getCreationLoad("v1", "v1Load", "v1load_name", "1.1", LoadType.UNDEFINED); String loadCreationJson = mapper.writeValueAsString(org.springframework.data.util.Pair.of(loadCreationInfos, List.of(getNetworkModificationContext(NEW_VARIANT)))); - mockMvc.perform(post(URI_NETWORK_MODIF).content(loadCreationJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + postAndApply(loadCreationJson); assertEquals("v1load_name", equipmentInfosRepository.findByIdInAndNetworkUuidAndVariantId(List.of("v1Load"), NETWORK_UUID, NEW_VARIANT).get(0).getName()); assertTrue(equipmentInfosRepository.findByIdInAndNetworkUuidAndVariantId(List.of("v1Load"), NETWORK_UUID, NEW_VARIANT).get(0).getVoltageLevels().stream().anyMatch(vl -> vl.getName().equals("v1"))); // load modification - assert name modification LoadModificationInfos loadModification = ModificationCreation.getModificationLoad("v1Load", null, "v1load_newname", null, null, null, null); String loadModificationJson = mapper.writeValueAsString(org.springframework.data.util.Pair.of(loadModification, List.of(getNetworkModificationContext(NEW_VARIANT)))); - mockMvc.perform(post(URI_NETWORK_MODIF).content(loadModificationJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + postAndApply(loadModificationJson); assertEquals("v1load_newname", equipmentInfosRepository.findByIdInAndNetworkUuidAndVariantId(List.of("v1Load"), NETWORK_UUID, NEW_VARIANT).get(0).getName()); // load modification - assert voltage level modification loadModification = ModificationCreation.getModificationLoad("v1Load", "v2", null, "1A", null, null, null); loadModificationJson = mapper.writeValueAsString(org.springframework.data.util.Pair.of(loadModification, List.of(getNetworkModificationContext(NEW_VARIANT)))); - mockMvc.perform(post(URI_NETWORK_MODIF).content(loadModificationJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + postAndApply(loadModificationJson); List equipmentInfos = equipmentInfosRepository.findByIdInAndNetworkUuidAndVariantId(List.of("v1Load"), NETWORK_UUID, NEW_VARIANT); assertEquals(1, equipmentInfos.size()); assertEquals("v2", equipmentInfos.getFirst().getVoltageLevels().stream().findFirst().get().getId()); @@ -128,7 +158,7 @@ void testModificationsNotIndexed() throws Exception { // load creation in INITIAL_VARIANT_ID LoadCreationInfos loadCreationInfos = ModificationCreation.getCreationLoad("v1", "v1Load", "v1load_name", "1.1", LoadType.UNDEFINED); String loadCreationJson = mapper.writeValueAsString(org.springframework.data.util.Pair.of(loadCreationInfos, List.of(getNetworkModificationContext(INITIAL_VARIANT_ID)))); - mockMvc.perform(post(URI_NETWORK_MODIF).content(loadCreationJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + postAndApply(loadCreationJson); assertEquals("v1load_name", equipmentInfosRepository.findByIdInAndNetworkUuidAndVariantId(List.of("v1Load"), NETWORK_UUID, INITIAL_VARIANT_ID).get(0).getName()); assertTrue(equipmentInfosRepository.findByIdInAndNetworkUuidAndVariantId(List.of("v1Load"), NETWORK_UUID, INITIAL_VARIANT_ID).get(0).getVoltageLevels().stream().anyMatch(vl -> vl.getName().equals("v1"))); @@ -138,13 +168,13 @@ void testModificationsNotIndexed() throws Exception { // load modification that modify load type is not indexed LoadModificationInfos loadModification = ModificationCreation.getModificationLoad("v1Load", null, null, null, LoadType.FICTITIOUS, null, null); String loadModificationJson = mapper.writeValueAsString(org.springframework.data.util.Pair.of(loadModification, List.of(getNetworkModificationContext(NEW_VARIANT)))); - mockMvc.perform(post(URI_NETWORK_MODIF).content(loadModificationJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + postAndApply(loadModificationJson); assertTrue(equipmentInfosRepository.findAllByNetworkUuidAndVariantId(NETWORK_UUID, NEW_VARIANT).isEmpty()); // voltage level name modification modifies only equipments indexed contained in the voltage level (not switch, bbs, etc) VoltageLevelModificationInfos vlModification = ModificationCreation.getModificationVoltageLevel("v1", "newVlName"); String vlModificationJson = mapper.writeValueAsString(org.springframework.data.util.Pair.of(vlModification, List.of(getNetworkModificationContext(NEW_VARIANT)))); - mockMvc.perform(post(URI_NETWORK_MODIF).content(vlModificationJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + postAndApply(vlModificationJson); List equipmentsIndexedAfterVlModif = equipmentInfosRepository.findAllByNetworkUuidAndVariantId(NETWORK_UUID, NEW_VARIANT); assertEquals(11, equipmentsIndexedAfterVlModif.size()); assertTrue(equipmentsIndexedAfterVlModif.stream() @@ -171,7 +201,7 @@ void testEquipmentTypesCreationNotIndexed() throws Exception { VoltageLevelCreationInfos volageLevelCreationInfos = ModificationCreation.getCreationVoltageLevel("s1", "v1test", "v1test"); String voltageLevelCreationJson = mapper.writeValueAsString(org.springframework.data.util.Pair.of(volageLevelCreationInfos, List.of(getNetworkModificationContext(NEW_VARIANT)))); - mockMvc.perform(post(URI_NETWORK_MODIF).content(voltageLevelCreationJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + postAndApply(voltageLevelCreationJson); List equipmentIndexedAfterVlCreation = equipmentInfosRepository.findAllByNetworkUuidAndVariantId(NETWORK_UUID, NEW_VARIANT); assertEquals(1, equipmentIndexedAfterVlCreation.size()); assertEquals(IdentifiableType.VOLTAGE_LEVEL.name(), equipmentIndexedAfterVlCreation.getFirst().getType()); @@ -186,14 +216,14 @@ void testModifyGenThenDeleteVl() throws Exception { GeneratorModificationInfos generatorModificationInfos = ModificationCreation.getModificationGenerator("idGenerator", "modifiedGeneratorName"); String generatorModificationJson = mapper.writeValueAsString(org.springframework.data.util.Pair.of(generatorModificationInfos, List.of(getNetworkModificationContext(NEW_VARIANT)))); - mockMvc.perform(post(URI_NETWORK_MODIF).content(generatorModificationJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + postAndApply(generatorModificationJson); assertEquals("modifiedGeneratorName", equipmentInfosRepository.findByIdInAndNetworkUuidAndVariantId(List.of("idGenerator"), NETWORK_UUID, NEW_VARIANT).get(0).getName()); assertTrue(equipmentInfosRepository.findByIdInAndNetworkUuidAndVariantId(List.of("idGenerator"), NETWORK_UUID, NEW_VARIANT).get(0).getVoltageLevels().stream().anyMatch(vl -> vl.getName().equals("v2"))); //then delete the voltage level containing the generator we just modified EquipmentDeletionInfos voltageLevelDeletionInfos = EquipmentDeletionInfos.builder().stashed(false).equipmentType(IdentifiableType.VOLTAGE_LEVEL).equipmentId("v2").build(); String substationDeletionJson = mapper.writeValueAsString(org.springframework.data.util.Pair.of(voltageLevelDeletionInfos, List.of(getNetworkModificationContext(NEW_VARIANT)))); - mockMvc.perform(post(URI_NETWORK_MODIF).content(substationDeletionJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + postAndApply(substationDeletionJson); assertTrue(equipmentInfosRepository.findByIdInAndNetworkUuidAndVariantId(List.of("v2"), NETWORK_UUID, NEW_VARIANT).isEmpty()); //check that the generator is also deleted and that it's present in the tombstonedEquipment in elastic @@ -211,7 +241,7 @@ void testVLModificationsToImpactElasticsearch() throws Exception { VoltageLevelModificationInfos vlModification = ModificationCreation.getModificationVoltageLevel("v1", "v1_newname"); String vlModificationJson = mapper.writeValueAsString(org.springframework.data.util.Pair.of(vlModification, List.of(getNetworkModificationContext(NEW_VARIANT)))); - mockMvc.perform(post(URI_NETWORK_MODIF).content(vlModificationJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + postAndApply(vlModificationJson); checkSomeEquipmentsVoltageLevel(NETWORK_UUID, NEW_VARIANT, "v1_newname"); @@ -222,7 +252,7 @@ void testVLModificationsToImpactElasticsearch() throws Exception { VoltageLevelModificationInfos vlModification2 = ModificationCreation.getModificationVoltageLevel("v1", "v1_newname_2"); String vlModification2Json = mapper.writeValueAsString(org.springframework.data.util.Pair.of(vlModification2, List.of(getNetworkModificationContext(NEW_VARIANT_2)))); - mockMvc.perform(post(URI_NETWORK_MODIF).content(vlModification2Json).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + postAndApply(vlModification2Json); checkSomeEquipmentsVoltageLevel(NETWORK_UUID, NEW_VARIANT, "v1_newname"); checkSomeEquipmentsVoltageLevel(NETWORK_UUID, NEW_VARIANT_2, "v1_newname_2"); diff --git a/src/test/java/org/gridsuite/modification/server/service/ModificationIndexationTest.java b/src/test/java/org/gridsuite/modification/server/service/ModificationIndexationTest.java index 893e13b5b..7d19ae119 100644 --- a/src/test/java/org/gridsuite/modification/server/service/ModificationIndexationTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/ModificationIndexationTest.java @@ -204,12 +204,10 @@ void testDuplicateModifications() { Duplicate this modification to group 2, variant 2 */ UUID groupUuid2 = UUID.randomUUID(); - NetworkModificationsResult modificationsResult = networkModificationService.duplicateModifications( - groupUuid2, - null, - modifications.stream().map(ModificationInfos::getUuid).toList(), - List.of(new ModificationApplicationContext(networkInfos.getNetworkUuuid(), variant2, UUID.randomUUID(), UUID.randomUUID())) - ).join(); + List dupContexts = List.of(new ModificationApplicationContext(networkInfos.getNetworkUuuid(), variant2, UUID.randomUUID(), UUID.randomUUID())); + List dupUuids = networkModificationService.saveDuplicateModifications(groupUuid2, null, modifications.stream().map(ModificationInfos::getUuid).toList()); + networkModificationService.applyModificationsByUuids(groupUuid2, dupUuids, dupContexts); + NetworkModificationsResult modificationsResult = new NetworkModificationsResult(dupUuids, List.of()); /* check results in database and in elasticsearch @@ -253,14 +251,10 @@ void testMoveModifications() { Move this modification to group 2, variant 2 */ UUID groupUuid2 = UUID.randomUUID(); - NetworkModificationsResult modificationsResult = networkModificationService.moveModifications( - groupUuid2, - groupUuid1, - null, - modifications.stream().map(ModificationInfos::getUuid).toList(), - List.of(new ModificationApplicationContext(networkInfos.getNetworkUuuid(), variant2, UUID.randomUUID(), UUID.randomUUID())), - true - ).join(); + List moveContexts = List.of(new ModificationApplicationContext(networkInfos.getNetworkUuuid(), variant2, UUID.randomUUID(), UUID.randomUUID())); + List moveUuids = networkModificationService.saveMoveModifications(groupUuid2, groupUuid1, null, modifications.stream().map(ModificationInfos::getUuid).toList()); + networkModificationService.applyModificationsByUuids(groupUuid2, moveUuids, moveContexts); + NetworkModificationsResult modificationsResult = new NetworkModificationsResult(moveUuids, List.of()); /* check results in database and in elasticsearch @@ -308,14 +302,11 @@ void testInsertCompositeModifications() { Split this composite and insert the contained modifications to group 2, variant 2 */ UUID groupUuid2 = UUID.randomUUID(); - Pair>, List> modificationContextInfos = Pair.of( - List.of(Pair.of(compositeUuid, "")), - List.of(new ModificationApplicationContext(networkInfos.getNetworkUuuid(), variant2, UUID.randomUUID(), UUID.randomUUID())) - ); - NetworkModificationsResult modificationsResult = networkModificationService.splitCompositeModifications( - groupUuid2, - modificationContextInfos - ).join(); + List splitContexts = List.of(new ModificationApplicationContext(networkInfos.getNetworkUuuid(), variant2, UUID.randomUUID(), UUID.randomUUID())); + List> compositesInfos = List.of(Pair.of(compositeUuid, "")); + List splitUuids = networkModificationService.saveSplitCompositeModifications(groupUuid2, compositesInfos); + networkModificationService.applyModificationsByUuids(groupUuid2, splitUuids, splitContexts); + NetworkModificationsResult modificationsResult = new NetworkModificationsResult(splitUuids, List.of()); /* check results in database and in elasticsearch diff --git a/src/test/java/org/gridsuite/modification/server/utils/ApiUtils.java b/src/test/java/org/gridsuite/modification/server/utils/ApiUtils.java index 58d55602b..c92072b8f 100644 --- a/src/test/java/org/gridsuite/modification/server/utils/ApiUtils.java +++ b/src/test/java/org/gridsuite/modification/server/utils/ApiUtils.java @@ -16,13 +16,11 @@ import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; import java.util.*; 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.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -59,19 +57,15 @@ public static void postGroups(MockMvc mockMvc, UUID originGroupUuid, UUID target public static Optional putGroupsDuplications(MockMvc mockMvc, UUID originGroupUuid, UUID targetGroupUuid, UUID networkUuid) throws Exception { ModificationApplicationContext applicationContext = new ModificationApplicationContext(networkUuid, UUID.randomUUID().toString(), UUID.randomUUID(), UUID.randomUUID(), Set.of()); String bodyJson = getObjectMapper().writeValueAsString(org.springframework.data.util.Pair.of(List.of(), List.of(applicationContext))); - ResultActions mockMvcResultActions = mockMvc.perform( + mockMvc.perform( put("/v1/groups/{groupUuid}", targetGroupUuid) .param("action", "COPY") .param("originGroupUuid", originGroupUuid.toString()) .content(bodyJson) .contentType(MediaType.APPLICATION_JSON) ) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpectAll(status().isOk()) - .andReturn(); - NetworkModificationsResult result = getObjectMapper().readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); - return result.modificationResults().isEmpty() ? Optional.empty() : result.modificationResults().get(0); + .andExpectAll(status().isOk()); + return Optional.empty(); } public static NetworkModificationsResult putGroupsWithCopy(MockMvc mockMvc, UUID targetGroupUuid, List modificationUuids, UUID networkUuid) throws Exception { @@ -79,17 +73,14 @@ public static NetworkModificationsResult putGroupsWithCopy(MockMvc mockMvc, UUID String body = getObjectMapper().writeValueAsString(org.springframework.data.util.Pair.of(modificationUuids, List.of(applicationContext))); - ResultActions mockMvcResultActions = mockMvc.perform( + mockMvc.perform( put("/v1/groups/{groupUuid}", targetGroupUuid) .param("action", "COPY") .contentType("application/json") .content(body) ) - .andExpect(request().asyncStarted()); - MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpectAll(status().isOk()) - .andReturn(); - return getObjectMapper().readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + .andExpectAll(status().isOk()); + return new NetworkModificationsResult(List.of(), List.of()); } public static Map postNetworkModificationsDuplicate(MockMvc mockMvc, List modificationUuids) throws Exception { diff --git a/src/test/java/org/gridsuite/modification/server/utils/TestUtils.java b/src/test/java/org/gridsuite/modification/server/utils/TestUtils.java index d9971e2f8..5dff775ec 100644 --- a/src/test/java/org/gridsuite/modification/server/utils/TestUtils.java +++ b/src/test/java/org/gridsuite/modification/server/utils/TestUtils.java @@ -41,8 +41,6 @@ import static com.vladmihalcea.sql.SQLStatementCountValidator.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; /** * @author Slimane Amar @@ -56,10 +54,7 @@ private TestUtils() { } public static MvcResult runRequestAsync(MockMvc mockMvc, RequestBuilder requestBuilder, ResultMatcher... matchers) throws Exception { - ResultActions mockMvcResultActions = mockMvc.perform(requestBuilder).andExpect(request().asyncStarted()); - return mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpectAll(matchers) - .andReturn(); + return mockMvc.perform(requestBuilder).andExpectAll(matchers).andReturn(); } public static Set getRequestsDone(int n, MockWebServer server) throws UncheckedInterruptedException { diff --git a/src/test/resources/application-default.yml b/src/test/resources/application-default.yml index 64281ab8c..40962b84b 100644 --- a/src/test/resources/application-default.yml +++ b/src/test/resources/application-default.yml @@ -13,7 +13,7 @@ spring: cloud: function: # disable all #2 consumers during test - all messages are consumed multiple times otherwise - definition: consumeBuild1;consumeCancelBuild + definition: consumeBuild1;consumeCancelBuild;consumeApplication logging: level: org.springframework.orm.jpa: INFO