diff --git a/src/main/java/org/gridsuite/study/server/StudyConstants.java b/src/main/java/org/gridsuite/study/server/StudyConstants.java index d48c545fb..57a9737b6 100644 --- a/src/main/java/org/gridsuite/study/server/StudyConstants.java +++ b/src/main/java/org/gridsuite/study/server/StudyConstants.java @@ -117,7 +117,10 @@ public enum SldDisplayMode { } public enum ModificationsActionType { - MOVE, COPY, INSERT + MOVE, + COPY, + SPLIT_COMPOSITE, // the network modifications contained into the composite modifications are extracted and inserted one by one + INSERT_COMPOSITE // the composite modifications are fully inserted as composite modifications } public enum Severity { diff --git a/src/main/java/org/gridsuite/study/server/controller/StudyController.java b/src/main/java/org/gridsuite/study/server/controller/StudyController.java index 4dece1f10..d2ecd61df 100644 --- a/src/main/java/org/gridsuite/study/server/controller/StudyController.java +++ b/src/main/java/org/gridsuite/study/server/controller/StudyController.java @@ -656,14 +656,14 @@ public ResponseEntity moveOrCopyModifications(@PathVariable("studyUuid") U @RequestParam("action") ModificationsActionType action, @RequestParam("originStudyUuid") UUID originStudyUuid, @RequestParam("originNodeUuid") UUID originNodeUuid, - @RequestBody List modificationsToCopyUuidList, + @RequestBody List modificationsToCopyInfos, @RequestHeader(HEADER_USER_ID) String userId) { studyService.assertIsStudyAndNodeExist(studyUuid, nodeUuid); studyService.assertIsStudyAndNodeExist(originStudyUuid, originNodeUuid); studyService.assertCanUpdateModifications(studyUuid, nodeUuid); switch (action) { - case COPY, INSERT: - handleDuplicateOrInsertNetworkModifications(studyUuid, nodeUuid, originStudyUuid, originNodeUuid, modificationsToCopyUuidList, userId, action); + case COPY, SPLIT_COMPOSITE, INSERT_COMPOSITE: + handleDuplicateOrInsertNetworkModifications(studyUuid, nodeUuid, originStudyUuid, originNodeUuid, modificationsToCopyInfos, userId, action); break; case MOVE: // we don't cut - paste modifications from different studies @@ -672,17 +672,18 @@ public ResponseEntity moveOrCopyModifications(@PathVariable("studyUuid") U } studyService.assertNoBlockedNodeInStudy(studyUuid, originNodeUuid); studyService.assertNoBlockedNodeInStudy(studyUuid, nodeUuid); - rebuildNodeService.moveNetworkModifications(studyUuid, nodeUuid, originNodeUuid, modificationsToCopyUuidList, userId); + List modificationsToCopyInfosUuids = modificationsToCopyInfos.stream().map(ModificationsToCopyInfos::getUuid).toList(); + rebuildNodeService.moveNetworkModifications(studyUuid, nodeUuid, originNodeUuid, modificationsToCopyInfosUuids, userId); break; } return ResponseEntity.ok().build(); } - private void handleDuplicateOrInsertNetworkModifications(UUID targetStudyUuid, UUID targetNodeUuid, UUID originStudyUuid, UUID originNodeUuid, List modificationsToCopyUuidList, String userId, ModificationsActionType action) { + private void handleDuplicateOrInsertNetworkModifications(UUID targetStudyUuid, UUID targetNodeUuid, UUID originStudyUuid, UUID originNodeUuid, List modificationsToCopy, String userId, ModificationsActionType action) { studyService.assertNoBlockedNodeInStudy(targetStudyUuid, targetNodeUuid); studyService.invalidateNodeTreeWithLF(targetStudyUuid, targetNodeUuid); try { - studyService.duplicateOrInsertNetworkModifications(targetStudyUuid, targetNodeUuid, originStudyUuid, originNodeUuid, modificationsToCopyUuidList, userId, action); + studyService.duplicateOrInsertNetworkModifications(targetStudyUuid, targetNodeUuid, originStudyUuid, originNodeUuid, modificationsToCopy, userId, action); } finally { studyService.unblockNodeTree(targetStudyUuid, targetNodeUuid); } diff --git a/src/main/java/org/gridsuite/study/server/dto/ModificationsToCopyInfos.java b/src/main/java/org/gridsuite/study/server/dto/ModificationsToCopyInfos.java new file mode 100644 index 000000000..c925d6a69 --- /dev/null +++ b/src/main/java/org/gridsuite/study/server/dto/ModificationsToCopyInfos.java @@ -0,0 +1,27 @@ +/** + * 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.study.server.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.UUID; + +/** + * @author Mathieu Deharbe + */ +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Builder +public class ModificationsToCopyInfos { + private UUID uuid; + + private String compositeName; +} diff --git a/src/main/java/org/gridsuite/study/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/study/server/service/NetworkModificationService.java index 9d64a031d..911bf0aad 100644 --- a/src/main/java/org/gridsuite/study/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/study/server/service/NetworkModificationService.java @@ -12,6 +12,7 @@ import org.gridsuite.study.server.RemoteServicesProperties; import org.gridsuite.study.server.StudyConstants; import org.gridsuite.study.server.dto.BuildInfos; +import org.gridsuite.study.server.dto.ModificationsToCopyInfos; import org.gridsuite.study.server.dto.NodeReceiver; import org.gridsuite.study.server.dto.modification.ModificationApplicationContext; import org.gridsuite.study.server.dto.modification.NetworkModificationMetadata; @@ -246,7 +247,7 @@ public void stopBuild(@NonNull UUID nodeUuid, @NonNull UUID rootNetworkUuid) { restTemplate.put(getNetworkModificationServerURI(false) + path, null); } - public NetworkModificationsResult moveModifications(UUID originGroupUuid, UUID targetGroupUuid, UUID beforeUuid, Pair, List> modificationContextInfos, boolean buildTargetNode) { + public NetworkModificationsResult moveModifications(UUID originGroupUuid, UUID targetGroupUuid, UUID beforeUuid, Pair, List> modificationContextInfos, boolean buildTargetNode) { var path = UriComponentsBuilder.fromPath(GROUP_PATH) .queryParam(QUERY_PARAM_ACTION, ModificationsActionType.MOVE.name()) .queryParam("originGroupUuid", originGroupUuid) @@ -257,7 +258,7 @@ public NetworkModificationsResult moveModifications(UUID originGroupUuid, UUID t HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - HttpEntity, List>> httpEntity = new HttpEntity<>(modificationContextInfos, headers); + HttpEntity, List>> httpEntity = new HttpEntity<>(modificationContextInfos, headers); return restTemplate.exchange( getNetworkModificationServerURI(false) + path.buildAndExpand(targetGroupUuid).toUriString(), @@ -267,12 +268,12 @@ public NetworkModificationsResult moveModifications(UUID originGroupUuid, UUID t } public NetworkModificationsResult duplicateOrInsertModifications(UUID groupUuid, ModificationsActionType action, - Pair, List> modificationContextInfos) { + Pair, List> modificationContextInfos) { return handleModifications(groupUuid, null, action, modificationContextInfos); } private NetworkModificationsResult handleModifications(UUID groupUuid, UUID originGroupUuid, ModificationsActionType action, - Pair, List> modificationContextInfos) { + Pair, List> modificationContextInfos) { var path = UriComponentsBuilder.fromPath(GROUP_PATH) .queryParam(QUERY_PARAM_ACTION, action.name()); @@ -282,7 +283,7 @@ private NetworkModificationsResult handleModifications(UUID groupUuid, UUID orig HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - HttpEntity, List>> httpEntity = new HttpEntity<>(modificationContextInfos, headers); + HttpEntity, List>> httpEntity = new HttpEntity<>(modificationContextInfos, headers); return restTemplate.exchange( getNetworkModificationServerURI(false) + path.buildAndExpand(groupUuid).toUriString(), @@ -312,7 +313,7 @@ public Map duplicateModificationsGroup(UUID sourceGroupUuid, UUID gr ).getBody(); } - public NetworkModificationsResult duplicateModificationsFromGroup(UUID groupUuid, UUID originGroupUuid, Pair, List> modificationContextInfos) { + public NetworkModificationsResult duplicateModificationsFromGroup(UUID groupUuid, UUID originGroupUuid, Pair, List> modificationContextInfos) { return handleModifications(groupUuid, originGroupUuid, StudyConstants.ModificationsActionType.COPY, modificationContextInfos); } diff --git a/src/main/java/org/gridsuite/study/server/service/StudyService.java b/src/main/java/org/gridsuite/study/server/service/StudyService.java index 53c30cf48..a31716c63 100644 --- a/src/main/java/org/gridsuite/study/server/service/StudyService.java +++ b/src/main/java/org/gridsuite/study/server/service/StudyService.java @@ -2496,7 +2496,8 @@ public void moveNetworkModifications(@NonNull UUID studyUuid, UUID targetNodeUui .map(rootNetworkEntity -> rootNetworkNodeInfoService.getNetworkModificationApplicationContext(rootNetworkEntity.getId(), targetNodeUuid, rootNetworkEntity.getNetworkUuid())) .toList(); - NetworkModificationsResult networkModificationsResult = networkModificationService.moveModifications(originGroupUuid, targetGroupUuid, beforeUuid, Pair.of(modificationUuidList, modificationApplicationContexts), isTargetInDifferentNodeTree); + List modificationsToCopyInfos = modificationUuidList.stream().map(modifUuid -> ModificationsToCopyInfos.builder().uuid(modifUuid).build()).toList(); + NetworkModificationsResult networkModificationsResult = networkModificationService.moveModifications(originGroupUuid, targetGroupUuid, beforeUuid, Pair.of(modificationsToCopyInfos, modificationApplicationContexts), isTargetInDifferentNodeTree); rootNetworkNodeInfoService.moveModificationsToExclude(originNodeUuid, targetNodeUuid, networkModificationsResult.modificationUuids()); // Target node @@ -2525,7 +2526,14 @@ private void emitNetworkModificationImpactsForAllRootNetworks(List modificationsUuis, String userId, StudyConstants.ModificationsActionType action) { + public void duplicateOrInsertNetworkModifications( + UUID targetStudyUuid, + UUID targetNodeUuid, + UUID originStudyUuid, + UUID originNodeUuid, + List modifications, + String userId, + StudyConstants.ModificationsActionType action) { List childrenUuids = networkModificationTreeService.getChildrenUuids(targetNodeUuid); notificationService.emitStartModificationEquipmentNotification(targetStudyUuid, targetNodeUuid, childrenUuids, NotificationService.MODIFICATIONS_UPDATING_IN_PROGRESS); try { @@ -2538,12 +2546,12 @@ public void duplicateOrInsertNetworkModifications(UUID targetStudyUuid, UUID tar .map(rootNetworkEntity -> rootNetworkNodeInfoService.getNetworkModificationApplicationContext(rootNetworkEntity.getId(), targetNodeUuid, rootNetworkEntity.getNetworkUuid())) .toList(); - NetworkModificationsResult networkModificationResults = networkModificationService.duplicateOrInsertModifications(groupUuid, action, Pair.of(modificationsUuis, modificationApplicationContexts)); + NetworkModificationsResult networkModificationResults = networkModificationService.duplicateOrInsertModifications(groupUuid, action, Pair.of(modifications, modificationApplicationContexts)); if (targetStudyUuid.equals(originStudyUuid)) { Map originToDuplicateModificationsUuids = new HashMap<>(); - for (int i = 0; i < modificationsUuis.size(); i++) { - originToDuplicateModificationsUuids.put(modificationsUuis.get(i), networkModificationResults.modificationUuids().get(i)); + for (int i = 0; i < modifications.size(); i++) { + originToDuplicateModificationsUuids.put(modifications.get(i).getUuid(), networkModificationResults.modificationUuids().get(i)); } rootNetworkNodeInfoService.copyModificationsToExclude(originNodeUuid, targetNodeUuid, originToDuplicateModificationsUuids); } diff --git a/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java b/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java index c22dd8a96..18a3c3a1b 100644 --- a/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java +++ b/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java @@ -1917,25 +1917,26 @@ void testReorderModification() throws Exception { UUID.randomUUID(), VARIANT_ID, "node", userId); UUID modificationNodeUuid = modificationNode.getId(); - UUID modification1 = UUID.randomUUID(); - UUID modification2 = UUID.randomUUID(); + UUID modification1Uuid = UUID.randomUUID(); + UUID modification2Uuid = UUID.randomUUID(); + ModificationsToCopyInfos modification1 = ModificationsToCopyInfos.builder().uuid(modification1Uuid).build(); UUID groupStubId = wireMockServer.stubFor(WireMock.any(WireMock.urlPathMatching("/v1/groups/.*")) .withQueryParam("action", WireMock.equalTo("MOVE")) .willReturn(WireMock.ok() - .withBody(mapper.writeValueAsString(new NetworkModificationsResult(Arrays.asList(modification1, modification2), List.of(Optional.empty())))) + .withBody(mapper.writeValueAsString(new NetworkModificationsResult(Arrays.asList(modification1Uuid, modification2Uuid), List.of(Optional.empty())))) .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))).getId(); // switch the 2 modifications order (modification1 is set at the end, after modification2) mockMvc.perform(put("/v1/studies/{studyUuid}/nodes/{nodeUuid}/network-modification/{modificationID}", - studyNameUserIdUuid, modificationNodeUuid, modification1).header(USER_ID_HEADER, "userId")) + studyNameUserIdUuid, modificationNodeUuid, modification1Uuid).header(USER_ID_HEADER, "userId")) .andExpect(status().isOk()); checkUpdateStatusMessagesReceived(studyNameUserIdUuid, modificationNodeUuid, output); checkEquipmentUpdatingMessagesReceived(studyNameUserIdUuid, modificationNodeUuid); checkEquipmentUpdatingFinishedMessagesReceived(studyNameUserIdUuid, modificationNodeUuid); checkElementUpdatedMessageSent(studyNameUserIdUuid, userId); - Pair, List> expectedBody = Pair.of(Collections.singletonList(modification1), List.of(rootNetworkNodeInfoService.getNetworkModificationApplicationContext(firstRootNetworkUuid, modificationNodeUuid, NETWORK_UUID))); + Pair, List> expectedBody = Pair.of(Collections.singletonList(modification1), List.of(rootNetworkNodeInfoService.getNetworkModificationApplicationContext(firstRootNetworkUuid, modificationNodeUuid, NETWORK_UUID))); String expectedBodyStr = mapper.writeValueAsString(expectedBody); String url = "/v1/groups/" + modificationNode.getModificationGroupUuid(); WireMockUtils.verifyPutRequest(wireMockServer, groupStubId, url, true, Map.of( @@ -1946,7 +1947,7 @@ void testReorderModification() throws Exception { // switch back the 2 modifications order (modification1 is set before modification2) mockMvc.perform(put("/v1/studies/{studyUuid}/nodes/{nodeUuid}/network-modification/{modificationID}?beforeUuid={modificationID2}", - studyNameUserIdUuid, modificationNodeUuid, modification1, modification2).header(USER_ID_HEADER, "userId")) + studyNameUserIdUuid, modificationNodeUuid, modification1Uuid, modification2Uuid).header(USER_ID_HEADER, "userId")) .andExpect(status().isOk()); checkUpdateStatusMessagesReceived(studyNameUserIdUuid, modificationNodeUuid, output); checkEquipmentUpdatingMessagesReceived(studyNameUserIdUuid, modificationNodeUuid); @@ -1957,7 +1958,7 @@ void testReorderModification() throws Exception { "action", WireMock.equalTo("MOVE"), "originGroupUuid", WireMock.equalTo(modificationNode.getModificationGroupUuid().toString()), "build", WireMock.equalTo("false"), - "before", WireMock.equalTo(modification2.toString())), + "before", WireMock.equalTo(modification2Uuid.toString())), expectedBodyStr); } @@ -1995,8 +1996,8 @@ void testDuplicateModification() throws Exception { NetworkModificationNode node1 = createNetworkModificationNode(studyUuid, rootNodeUuid, UUID.randomUUID(), VARIANT_ID, "New node 1", "userId"); UUID nodeUuid1 = node1.getId(); - UUID modification1 = UUID.randomUUID(); - UUID modification2 = UUID.randomUUID(); + ModificationsToCopyInfos modification1 = ModificationsToCopyInfos.builder().uuid(UUID.randomUUID()).build(); + ModificationsToCopyInfos modification2 = ModificationsToCopyInfos.builder().uuid(UUID.randomUUID()).build(); String modificationUuidListBody = mapper.writeValueAsString(Arrays.asList(modification1, modification2)); UUID groupStubId = wireMockServer.stubFor(WireMock.any(WireMock.urlPathMatching("/v1/groups/.*")) @@ -2017,7 +2018,7 @@ void testDuplicateModification() throws Exception { checkEquipmentUpdatingFinishedMessagesReceived(studyUuid, nodeUuid1); checkElementUpdatedMessageSent(studyUuid, userId); - Pair, List> modificationBody = Pair.of(List.of(modification1, modification2), List.of(rootNetworkNodeInfoService.getNetworkModificationApplicationContext(firstRootNetworkUuid, node1.getId(), NETWORK_UUID))); + Pair, List> modificationBody = Pair.of(List.of(modification1, modification2), List.of(rootNetworkNodeInfoService.getNetworkModificationApplicationContext(firstRootNetworkUuid, node1.getId(), NETWORK_UUID))); String expectedBody = mapper.writeValueAsString(modificationBody); String url = "/v1/groups/" + node1.getModificationGroupUuid(); WireMockUtils.verifyPutRequest(wireMockServer, groupStubId, url, true, Map.of( @@ -2076,7 +2077,7 @@ void testDuplicateModificationBetweenStudies() throws Exception { .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))).getId(); // Duplicate modification from node2 (study2) to node1 (study1) - List modifications = List.of(UUID.randomUUID()); + List modifications = List.of(ModificationsToCopyInfos.builder().uuid(UUID.randomUUID()).build()); String modificationUuidListBody = mapper.writeValueAsString(modifications); mockMvc.perform(put("/v1/studies/{studyUuid}/nodes/{nodeUuid}?originStudyUuid={originStudyUuid}&originNodeUuid={originNodeUuid}&action=COPY", studyEntity1.getId(), node1.getId(), studyEntity2.getId(), node2.getId()) @@ -2089,7 +2090,7 @@ void testDuplicateModificationBetweenStudies() throws Exception { checkEquipmentUpdatingFinishedMessagesReceived(studyEntity1.getId(), node1.getId()); checkElementUpdatedMessageSent(studyEntity1.getId(), userId); - Pair, List> modificationBody = Pair.of(modifications, List.of(rootNetworkNodeInfoService.getNetworkModificationApplicationContext(studyTestUtils.getOneRootNetworkUuid(studyEntity1.getId()), node1.getId(), NETWORK_UUID))); + Pair, List> modificationBody = Pair.of(modifications, List.of(rootNetworkNodeInfoService.getNetworkModificationApplicationContext(studyTestUtils.getOneRootNetworkUuid(studyEntity1.getId()), node1.getId(), NETWORK_UUID))); String expectedBody = mapper.writeValueAsString(modificationBody); String url = "/v1/groups/" + node1.getModificationGroupUuid(); WireMockUtils.verifyPutRequest(wireMockServer, groupStubId, url, true, Map.of( @@ -2113,8 +2114,8 @@ void testDuplicateModificationErrorCase() throws Exception { UUID studyUuid = studyEntity.getId(); UUID rootNodeUuid = getRootNode(studyUuid).getId(); createNetworkModificationNode(studyUuid, rootNodeUuid, UUID.randomUUID(), VARIANT_ID, "New node 1", "userId"); - UUID modification1 = UUID.randomUUID(); - UUID modification2 = UUID.randomUUID(); + ModificationsToCopyInfos modification1 = ModificationsToCopyInfos.builder().uuid(UUID.randomUUID()).build(); + ModificationsToCopyInfos modification2 = ModificationsToCopyInfos.builder().uuid(UUID.randomUUID()).build(); String modificationUuidListBody = mapper.writeValueAsString(Arrays.asList(modification1, modification2)); // Random/bad studyId error case @@ -2148,28 +2149,31 @@ void testCutAndPasteModification() throws Exception { NetworkModificationNode node2 = createNetworkModificationNode(studyUuid, rootNodeUuid, UUID.randomUUID(), VARIANT_ID, "New node 2", userId); UUID nodeUuid2 = node2.getId(); - UUID modification1 = UUID.randomUUID(); - UUID modification2 = UUID.randomUUID(); - String modificationUuidListBody = mapper.writeValueAsString(Arrays.asList(modification1, modification2)); + UUID modification1Uuid = UUID.randomUUID(); + UUID modification2Uuid = UUID.randomUUID(); + ModificationsToCopyInfos modification1 = ModificationsToCopyInfos.builder().uuid(modification1Uuid).build(); + ModificationsToCopyInfos modification2 = ModificationsToCopyInfos.builder().uuid(modification2Uuid).build(); + String modificationsToCopyInfos = mapper.writeValueAsString(Arrays.asList(modification1, modification2)); UUID groupStubId = wireMockServer.stubFor(WireMock.any(WireMock.urlPathMatching("/v1/groups/.*")) .withQueryParam("action", WireMock.equalTo("MOVE")) .willReturn(WireMock.ok() - .withBody(mapper.writeValueAsString(new NetworkModificationsResult(Arrays.asList(modification1, modification2), List.of(Optional.empty())))) + .withBody(mapper.writeValueAsString(new NetworkModificationsResult(Arrays.asList(modification1Uuid, modification2Uuid), List.of(Optional.empty())))) .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))).getId(); // move 2 modifications within node 1 mockMvc.perform(put("/v1/studies/{studyUuid}/nodes/{nodeUuid}?originStudyUuid={originStudyUuid}&originNodeUuid={originNodeUuid}&action=MOVE", studyUuid, nodeUuid1, studyUuid, nodeUuid1) .contentType(MediaType.APPLICATION_JSON) - .content(modificationUuidListBody) + .content(modificationsToCopyInfos) .header(USER_ID_HEADER, "userId")) .andExpect(status().isOk()); checkUpdateStatusMessagesReceived(studyUuid, nodeUuid1, output); checkEquipmentUpdatingMessagesReceived(studyUuid, nodeUuid1); checkEquipmentUpdatingFinishedMessagesReceived(studyUuid, nodeUuid1); - Pair, List> expectedBody = Pair.of(List.of(modification1, modification2), List.of(rootNetworkNodeInfoService.getNetworkModificationApplicationContext(firstRootNetworkUuid, node1.getId(), NETWORK_UUID))); + Pair, List> expectedBody = Pair.of(List.of(modification1, modification2), List.of(rootNetworkNodeInfoService.getNetworkModificationApplicationContext(firstRootNetworkUuid, node1.getId(), NETWORK_UUID))); + String expectedBodyStr = mapper.writeValueAsString(expectedBody); String url = "/v1/groups/" + node1.getModificationGroupUuid(); WireMockUtils.verifyPutRequest(wireMockServer, groupStubId, url, true, Map.of( @@ -2182,7 +2186,7 @@ void testCutAndPasteModification() throws Exception { mockMvc.perform(put("/v1/studies/{studyUuid}/nodes/{nodeUuid}?originStudyUuid={originStudyUuid}&originNodeUuid={originNodeUuid}&action=MOVE", studyUuid, nodeUuid2, studyUuid, nodeUuid1) .contentType(MediaType.APPLICATION_JSON) - .content(modificationUuidListBody) + .content(modificationsToCopyInfos) .header(USER_ID_HEADER, "userId")) .andExpect(status().isOk()); checkUpdateStatusMessagesReceived(studyUuid, nodeUuid1, output); @@ -2207,7 +2211,7 @@ void testCutAndPasteModification() throws Exception { mockMvc.perform(put("/v1/studies/{studyUuid}/nodes/{nodeUuid}?action=MOVE", studyUuid, nodeUuid1) .contentType(MediaType.APPLICATION_JSON) - .content(modificationUuidListBody) + .content(modificationsToCopyInfos) .header(USER_ID_HEADER, "userId")) .andExpect(status().isBadRequest()); } @@ -2220,8 +2224,8 @@ void testCutAndPasteModificationErrorCase() throws Exception { UUID rootNodeUuid = getRootNode(studyUuid).getId(); createNetworkModificationNode(studyUuid, rootNodeUuid, UUID.randomUUID(), VARIANT_ID, "New node 1", userId); createNetworkModificationNode(studyUuid, rootNodeUuid, UUID.randomUUID(), VARIANT_ID, "New node 2", userId); - UUID modification1 = UUID.randomUUID(); - UUID modification2 = UUID.randomUUID(); + ModificationsToCopyInfos modification1 = ModificationsToCopyInfos.builder().uuid(UUID.randomUUID()).build(); + ModificationsToCopyInfos modification2 = ModificationsToCopyInfos.builder().uuid(UUID.randomUUID()).build(); String modificationUuidListBody = mapper.writeValueAsString(Arrays.asList(modification1, modification2)); // Random/bad studyId error case diff --git a/src/test/java/org/gridsuite/study/server/rootnetworks/ModificationToExcludeTest.java b/src/test/java/org/gridsuite/study/server/rootnetworks/ModificationToExcludeTest.java index 5c9c21ae2..a07bbf0e1 100644 --- a/src/test/java/org/gridsuite/study/server/rootnetworks/ModificationToExcludeTest.java +++ b/src/test/java/org/gridsuite/study/server/rootnetworks/ModificationToExcludeTest.java @@ -307,7 +307,11 @@ void testDuplicateModificationWithModificationsToExclude() { rootNetworkNodeInfoRepository.save(rootNetworkNodeInfoEntity2); // mock duplicateModificationsGroup to return a mapping between origin modification uuid and their duplicate uuid - List modificationsToDuplicate = List.of(MODIFICATION_NEVER_EXCLUDED, MODIFICATION_TO_EXCLUDE_1, MODIFICATION_TO_EXCLUDE_2); + List modificationsToDuplicate = List.of( + ModificationsToCopyInfos.builder().uuid(MODIFICATION_NEVER_EXCLUDED).build(), + ModificationsToCopyInfos.builder().uuid(MODIFICATION_TO_EXCLUDE_1).build(), + ModificationsToCopyInfos.builder().uuid(MODIFICATION_TO_EXCLUDE_2).build() + ); Mockito.doReturn(new NetworkModificationsResult(modificationsToDuplicate.stream().map(ORIGIN_TO_DUPLICATE_MODIFICATION_UUID_MAP::get).toList(), List.of())).when(networkModificationService).duplicateOrInsertModifications(any(), any(), any()); // duplicate (excluded) modification uuids for RH1 diff --git a/src/test/java/org/gridsuite/study/server/studycontroller/StudyControllerRebuildNodeTest.java b/src/test/java/org/gridsuite/study/server/studycontroller/StudyControllerRebuildNodeTest.java index b275e1e6f..624d14278 100644 --- a/src/test/java/org/gridsuite/study/server/studycontroller/StudyControllerRebuildNodeTest.java +++ b/src/test/java/org/gridsuite/study/server/studycontroller/StudyControllerRebuildNodeTest.java @@ -6,6 +6,7 @@ */ package org.gridsuite.study.server.studycontroller; +import org.gridsuite.study.server.dto.ModificationsToCopyInfos; import org.gridsuite.study.server.service.RebuildNodeService; import org.gridsuite.study.server.StudyConstants; import org.gridsuite.study.server.controller.StudyController; @@ -83,10 +84,11 @@ void testMoveNetworkModification() { @Test void testMoveNetworkModifications() { - List modificationUuids = List.of(UUID.randomUUID()); + List modifications = List.of(ModificationsToCopyInfos.builder().uuid(UUID.randomUUID()).build()); UUID originNodeUuid = UUID.randomUUID(); - studyController.moveOrCopyModifications(studyUuid, nodeUuid, StudyConstants.ModificationsActionType.MOVE, studyUuid, originNodeUuid, modificationUuids, userId); + studyController.moveOrCopyModifications(studyUuid, nodeUuid, StudyConstants.ModificationsActionType.MOVE, studyUuid, originNodeUuid, modifications, userId); + List modificationUuids = modifications.stream().map(ModificationsToCopyInfos::getUuid).toList(); verify(rebuildNodeService, times(1)).moveNetworkModifications(studyUuid, nodeUuid, originNodeUuid, modificationUuids, userId); verify(studyService, times(1)).buildNode(eq(studyUuid), eq(nodeUuid), any(), eq(userId)); }