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 9bead940a..d572b17f6 100644 --- a/src/main/java/org/gridsuite/study/server/controller/StudyController.java +++ b/src/main/java/org/gridsuite/study/server/controller/StudyController.java @@ -285,6 +285,7 @@ public ResponseEntity cutAndPasteNode(@PathVariable("studyUuid") UUID stud @Parameter(description = "The position where the node will be pasted relative to the reference node") @RequestParam(name = "insertMode") InsertMode insertMode, @RequestHeader(HEADER_USER_ID) String userId) { studyService.assertNoBlockedNodeInStudy(studyUuid, nodeToCutUuid); + studyService.assertCanUpdateNodeInStudy(studyUuid, nodeToCutUuid); studyService.moveStudyNode(studyUuid, nodeToCutUuid, referenceNodeUuid, insertMode, userId); return ResponseEntity.ok().build(); } @@ -354,6 +355,7 @@ public ResponseEntity cutAndPasteNodeSubtree(@PathVariable("studyUuid") UU @Parameter(description = "The reference node to where we want to paste") @RequestParam("referenceNodeUuid") UUID referenceNodeUuid, @RequestHeader(HEADER_USER_ID) String userId) { studyService.assertNoBlockedNodeInStudy(studyUuid, subtreeToCutParentNodeUuid); + studyService.assertCanUpdateNodeInStudy(studyUuid, subtreeToCutParentNodeUuid); studyService.moveStudySubtree(studyUuid, subtreeToCutParentNodeUuid, referenceNodeUuid, userId); return ResponseEntity.ok().build(); } @@ -642,7 +644,7 @@ public ResponseEntity moveModification(@PathVariable("studyUuid") UUID stu @PathVariable("modificationUuid") UUID modificationUuid, @Nullable @Parameter(description = "move before, if no value move to end") @RequestParam(value = "beforeUuid") UUID beforeUuid, @RequestHeader(HEADER_USER_ID) String userId) { - studyService.assertCanUpdateModifications(studyUuid, nodeUuid); + studyService.assertCanUpdateNodeInStudy(studyUuid, nodeUuid); studyService.assertNoBlockedNodeInStudy(studyUuid, nodeUuid); rebuildNodeService.moveNetworkModification(studyUuid, nodeUuid, modificationUuid, beforeUuid, userId); return ResponseEntity.ok().build(); @@ -660,7 +662,7 @@ public ResponseEntity moveOrCopyModifications(@PathVariable("studyUuid") U @RequestHeader(HEADER_USER_ID) String userId) { studyService.assertIsStudyAndNodeExist(studyUuid, nodeUuid); studyService.assertIsStudyAndNodeExist(originStudyUuid, originNodeUuid); - studyService.assertCanUpdateModifications(studyUuid, nodeUuid); + studyService.assertCanUpdateNodeInStudy(studyUuid, nodeUuid); switch (action) { case COPY, SPLIT_COMPOSITE, INSERT_COMPOSITE: handleDuplicateOrInsertNetworkModifications(studyUuid, nodeUuid, originStudyUuid, originNodeUuid, modificationsToCopyInfos, userId, action); @@ -1334,7 +1336,7 @@ public ResponseEntity createNetworkModification(@Parameter(description = " @Parameter(description = "Node UUID") @PathVariable("nodeUuid") UUID nodeUuid, @RequestBody String modificationAttributes, @RequestHeader(HEADER_USER_ID) String userId) { - studyService.assertCanUpdateModifications(studyUuid, nodeUuid); + studyService.assertCanUpdateNodeInStudy(studyUuid, nodeUuid); studyService.assertNoBlockedNodeInStudy(studyUuid, nodeUuid); rebuildNodeService.createNetworkModification(studyUuid, nodeUuid, modificationAttributes, userId); return ResponseEntity.ok().build(); @@ -1348,7 +1350,7 @@ public ResponseEntity updateNetworkModification(@Parameter(description = " @Parameter(description = "Network modification UUID") @PathVariable("uuid") UUID networkModificationUuid, @RequestBody String modificationAttributes, @RequestHeader(HEADER_USER_ID) String userId) { - studyService.assertCanUpdateModifications(studyUuid, nodeUuid); + studyService.assertCanUpdateNodeInStudy(studyUuid, nodeUuid); studyService.assertNoBlockedNodeInStudy(studyUuid, nodeUuid); rebuildNodeService.updateNetworkModification(studyUuid, modificationAttributes, nodeUuid, networkModificationUuid, userId); return ResponseEntity.ok().build(); @@ -1361,7 +1363,7 @@ public ResponseEntity deleteNetworkModifications(@Parameter(description = @Parameter(description = "Node UUID") @PathVariable("nodeUuid") UUID nodeUuid, @Parameter(description = "Network modification UUIDs") @RequestParam(name = "uuids", required = false) List networkModificationUuids, @RequestHeader(HEADER_USER_ID) String userId) { - studyService.assertCanUpdateModifications(studyUuid, nodeUuid); + studyService.assertCanUpdateNodeInStudy(studyUuid, nodeUuid); studyService.deleteNetworkModifications(studyUuid, nodeUuid, networkModificationUuids, userId); return ResponseEntity.ok().build(); @@ -1375,7 +1377,7 @@ public ResponseEntity stashNetworkModifications(@Parameter(description = " @Parameter(description = "Network modification UUIDs") @RequestParam("uuids") List networkModificationUuids, @Parameter(description = "Stashed Modification") @RequestParam(name = "stashed", required = true) Boolean stashed, @RequestHeader(HEADER_USER_ID) String userId) { - studyService.assertCanUpdateModifications(studyUuid, nodeUuid); + studyService.assertCanUpdateNodeInStudy(studyUuid, nodeUuid); studyService.assertNoBlockedNodeInStudy(studyUuid, nodeUuid); if (stashed.booleanValue()) { rebuildNodeService.stashNetworkModifications(studyUuid, nodeUuid, networkModificationUuids, userId); @@ -1393,7 +1395,7 @@ public ResponseEntity updateNetworkModificationsMetadata(@Parameter(descri @Parameter(description = "Network modification UUIDs") @RequestParam("uuids") List networkModificationUuids, @RequestBody NetworkModificationMetadata metadata, @RequestHeader(HEADER_USER_ID) String userId) { - studyService.assertCanUpdateModifications(studyUuid, nodeUuid); + studyService.assertCanUpdateNodeInStudy(studyUuid, nodeUuid); studyService.assertNoBlockedNodeInStudy(studyUuid, nodeUuid); rebuildNodeService.updateNetworkModificationsMetadata(studyUuid, nodeUuid, networkModificationUuids, userId, metadata); return ResponseEntity.ok().build(); @@ -1408,8 +1410,7 @@ public ResponseEntity updateNetworkModificationsActivation(@Parameter(desc @Parameter(description = "Network modification UUIDs") @RequestParam("uuids") Set networkModificationUuids, @Parameter(description = "New activated value") @RequestParam(name = "activated") Boolean activated, @RequestHeader(HEADER_USER_ID) String userId) { - studyService.assertCanUpdateModifications(studyUuid, nodeUuid); - studyService.assertNoBuildNoComputationForRootNetworkNode(nodeUuid, rootNetworkUuid); + studyService.assertCanUpdateNodeInStudy(studyUuid, nodeUuid); studyService.assertNoBlockedNodeInTree(nodeUuid, rootNetworkUuid); rebuildNodeService.updateNetworkModificationsActivation(studyUuid, nodeUuid, rootNetworkUuid, networkModificationUuids, userId, activated); return ResponseEntity.ok().build(); @@ -1507,12 +1508,14 @@ public ResponseEntity deleteNode(@Parameter(description = "study uuid") @P @Operation(summary = "Move to trash the node with given id") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "The node has been successfully moved to trash"), + @ApiResponse(responseCode = "403", description = "The node can't be moved to trash"), @ApiResponse(responseCode = "404", description = "The study or the node not found")}) public ResponseEntity stashNode(@Parameter(description = "study uuid") @PathVariable("studyUuid") UUID studyUuid, @Parameter(description = "id of child to delete (move to trash)") @PathVariable("id") UUID nodeId, @Parameter(description = "to stash a node with its children") @RequestParam(value = "stashChildren", defaultValue = "false") boolean stashChildren, @RequestHeader(HEADER_USER_ID) String userId) { studyService.assertNoBlockedNodeInStudy(studyUuid, nodeId); + studyService.assertCanUpdateNodeInStudy(studyUuid, nodeId); studyService.stashNode(studyUuid, nodeId, stashChildren, userId); return ResponseEntity.ok().build(); } @@ -1627,13 +1630,12 @@ public ResponseEntity getUniqueNodeName(@Parameter(description = "Study @Operation(summary = "build a study node") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The study node has been built"), @ApiResponse(responseCode = "404", description = "The study or node doesn't exist"), - @ApiResponse(responseCode = "403", description = "The study node is not a model node")}) + @ApiResponse(responseCode = "403", description = "The study node can't be built")}) public ResponseEntity buildNode(@Parameter(description = "Study uuid") @PathVariable("studyUuid") UUID studyUuid, @Parameter(description = "rootNetworkUuid") @PathVariable("rootNetworkUuid") UUID rootNetworkUuid, @Parameter(description = "nodeUuid") @PathVariable("nodeUuid") UUID nodeUuid, @RequestHeader(HEADER_USER_ID) String userId) { studyService.assertNoBlockedNodeInTree(nodeUuid, rootNetworkUuid); - studyService.assertNoBuildNoComputationForRootNetworkNode(nodeUuid, rootNetworkUuid); studyService.buildNode(studyUuid, nodeUuid, rootNetworkUuid, userId); return ResponseEntity.ok().build(); } @@ -1865,7 +1867,7 @@ public ResponseEntity createDynamicSimulationEvent(@Parameter(description @Parameter(description = "Node UUID") @PathVariable("nodeUuid") UUID nodeUuid, @RequestBody EventInfos event, @RequestHeader(HEADER_USER_ID) String userId) { - studyService.assertCanUpdateModifications(studyUuid, nodeUuid); + studyService.assertCanUpdateNodeInStudy(studyUuid, nodeUuid); studyService.createDynamicSimulationEvent(studyUuid, nodeUuid, userId, event); return ResponseEntity.ok().build(); } @@ -1879,7 +1881,7 @@ public ResponseEntity updateDynamicSimulationEvent(@Parameter(description @Parameter(description = "Node UUID") @PathVariable("nodeUuid") UUID nodeUuid, @RequestBody EventInfos event, @RequestHeader(HEADER_USER_ID) String userId) { - studyService.assertCanUpdateModifications(studyUuid, nodeUuid); + studyService.assertCanUpdateNodeInStudy(studyUuid, nodeUuid); studyService.updateDynamicSimulationEvent(studyUuid, nodeUuid, userId, event); return ResponseEntity.ok().build(); } @@ -1893,7 +1895,7 @@ public ResponseEntity deleteDynamicSimulationEvents(@Parameter(description @Parameter(description = "Node UUID") @PathVariable("nodeUuid") UUID nodeUuid, @Parameter(description = "Dynamic simulation event UUIDs") @RequestParam("eventUuids") List eventUuids, @RequestHeader(HEADER_USER_ID) String userId) { - studyService.assertCanUpdateModifications(studyUuid, nodeUuid); + studyService.assertCanUpdateNodeInStudy(studyUuid, nodeUuid); studyService.deleteDynamicSimulationEvents(studyUuid, nodeUuid, userId, eventUuids); return ResponseEntity.ok().build(); } @@ -2110,7 +2112,7 @@ public ResponseEntity insertVoltageInitModifications(@PathVariable("studyU @PathVariable("nodeUuid") UUID nodeUuid, @RequestHeader(HEADER_USER_ID) String userId) { studyService.assertIsStudyAndNodeExist(studyUuid, nodeUuid); - studyService.assertCanUpdateModifications(studyUuid, nodeUuid); + studyService.assertCanUpdateNodeInStudy(studyUuid, nodeUuid); studyService.assertNoBlockedNodeInStudy(studyUuid, nodeUuid); studyService.insertVoltageInitModifications(studyUuid, nodeUuid, rootNetworkUuid, userId); return ResponseEntity.ok().build(); diff --git a/src/main/java/org/gridsuite/study/server/repository/rootnetwork/RootNetworkNodeInfoRepository.java b/src/main/java/org/gridsuite/study/server/repository/rootnetwork/RootNetworkNodeInfoRepository.java index 3a03c19b5..22a7fb788 100644 --- a/src/main/java/org/gridsuite/study/server/repository/rootnetwork/RootNetworkNodeInfoRepository.java +++ b/src/main/java/org/gridsuite/study/server/repository/rootnetwork/RootNetworkNodeInfoRepository.java @@ -60,15 +60,15 @@ public interface RootNetworkNodeInfoRepository extends JpaRepository findAllByRootNetworkStudyIdAndNodeInfoNodeTypeAndLoadFlowResultUuidNotNull(UUID studyUuid, NetworkModificationNodeType nodeType); - @Query("SELECT count(rnni) > 0 from RootNetworkNodeInfoEntity rnni LEFT JOIN rnni.rootNetwork rn LEFT JOIN rn.study s " + - "where s.id = :studyUuid and (rnni.nodeBuildStatus.globalBuildStatus = :buildStatus or rnni.nodeBuildStatus.localBuildStatus = :buildStatus)") - boolean existsByStudyUuidAndBuildStatus(UUID studyUuid, BuildStatus buildStatus); - List getAllByRootNetworkIdAndNodeInfoIdIn(UUID rootNetworkUuid, List nodesUuids); @Query(value = "SELECT count(rnni) > 0 FROM RootNetworkNodeInfoEntity rnni WHERE rnni.rootNetwork.id = :rootNetworkUuid AND rnni.nodeInfo.idNode IN :nodesUuids AND rnni.blockedNode = true ") boolean existsByNodeUuidsAndBlockedNode(UUID rootNetworkUuid, List nodesUuids); + @Query(value = "SELECT count(rnni) > 0 FROM RootNetworkNodeInfoEntity rnni WHERE rnni.rootNetwork.id = :rootNetworkUuid AND rnni.nodeInfo.idNode IN :nodesUuids AND" + + " (rnni.nodeBuildStatus.globalBuildStatus = :buildStatus or rnni.nodeBuildStatus.localBuildStatus = :buildStatus) ") + boolean existsByNodeUuidsAndBuildStatus(UUID rootNetworkUuid, List nodesUuids, BuildStatus buildStatus); + /** * Finds report UUIDs that are still referenced by other RootNetworkNodeInfo entities. *

diff --git a/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java b/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java index 999a340f9..002b34baf 100644 --- a/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java +++ b/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java @@ -485,15 +485,8 @@ public List getAllByStudyUuidWithLoadFlowResultsNotNu return rootNetworkNodeInfoRepository.findAllByRootNetworkStudyIdAndNodeInfoNodeTypeAndLoadFlowResultUuidNotNull(studyUuid, NetworkModificationNodeType.SECURITY); } - public void assertNoRootNetworkNodeIsBuilding(UUID studyUuid) { - if (rootNetworkNodeInfoRepository.existsByStudyUuidAndBuildStatus(studyUuid, BuildStatus.BUILDING)) { - throw new StudyException(NOT_ALLOWED, "No modification is allowed during a node building."); - } - } - - public void assertNetworkNodeIsNotBuilding(UUID rootNetworkUuid, UUID nodeUuid) { - NodeBuildStatusEmbeddable buildStatusEmbeddable = rootNetworkNodeInfoRepository.findByNodeInfoIdAndRootNetworkId(nodeUuid, rootNetworkUuid).map(RootNetworkNodeInfoEntity::getNodeBuildStatus).orElseThrow(() -> new StudyException(NOT_FOUND, "Root network not found")); - if (buildStatusEmbeddable.getGlobalBuildStatus().isBuilding() || buildStatusEmbeddable.getLocalBuildStatus().isBuilding()) { + public void assertNoBuildingNode(UUID rootNetworkUuid, List nodesUuids) { + if (rootNetworkNodeInfoRepository.existsByNodeUuidsAndBuildStatus(rootNetworkUuid, nodesUuids, BuildStatus.BUILDING)) { throw new StudyException(NOT_ALLOWED, "No modification is allowed during a node building."); } } 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 61fa980b5..1d1bd28ea 100644 --- a/src/main/java/org/gridsuite/study/server/service/StudyService.java +++ b/src/main/java/org/gridsuite/study/server/service/StudyService.java @@ -1131,10 +1131,19 @@ public void assertIsStudyExist(UUID studyUuid) { } } - @Transactional - public void assertCanUpdateModifications(UUID studyUuid, UUID nodeUuid) { + @Transactional(readOnly = true) + public void assertCanUpdateNodeInStudy(UUID studyUuid, UUID nodeUuid) { assertIsNodeNotReadOnly(nodeUuid); - assertNoBuildNoComputationForNode(studyUuid, nodeUuid); + List nodesUuids = networkModificationTreeService.getNodeTreeUuids(nodeUuid); + getStudyRootNetworks(studyUuid).forEach(rootNetwork -> + assertNoBuildNoComputationInTree(rootNetwork.getId(), nodesUuids) + ); + } + + private void assertNoBuildNoComputationInTree(UUID rootNetworkUuid, List nodesUuids) { + // TODO modify computations endpoints to test multiple uuids + nodesUuids.forEach(uuid -> rootNetworkNodeInfoService.assertComputationNotRunning(uuid, rootNetworkUuid)); + rootNetworkNodeInfoService.assertNoBuildingNode(rootNetworkUuid, nodesUuids); } public void assertIsStudyAndNodeExist(UUID studyUuid, UUID nodeUuid) { @@ -1142,11 +1151,6 @@ public void assertIsStudyAndNodeExist(UUID studyUuid, UUID nodeUuid) { assertIsNodeExist(studyUuid, nodeUuid); } - public void assertNoBuildNoComputationForRootNetworkNode(UUID nodeUuid, UUID rootNetworkUuid) { - rootNetworkNodeInfoService.assertComputationNotRunning(nodeUuid, rootNetworkUuid); - rootNetworkNodeInfoService.assertNetworkNodeIsNotBuilding(rootNetworkUuid, nodeUuid); - } - @Transactional(readOnly = true) public void assertNoBlockedNodeInTree(UUID nodeUuid, UUID rootNetworkUuid) { rootNetworkNodeInfoService.assertNoBlockedNode(rootNetworkUuid, networkModificationTreeService.getNodeTreeUuids(nodeUuid)); @@ -1160,13 +1164,6 @@ public void assertNoBlockedNodeInStudy(@NonNull UUID studyUuid, @NonNull UUID no ); } - public void assertNoBuildNoComputationForNode(UUID studyUuid, UUID nodeUuid) { - getStudyRootNetworks(studyUuid).forEach(rootNetwork -> - rootNetworkNodeInfoService.assertComputationNotRunning(nodeUuid, rootNetwork.getId()) - ); - rootNetworkNodeInfoService.assertNoRootNetworkNodeIsBuilding(studyUuid); - } - public void assertRootNodeOrBuiltNode(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid) { if (!(networkModificationTreeService.getStudyRootNodeUuid(studyUuid).equals(nodeUuid) || networkModificationTreeService.getNodeBuildStatus(nodeUuid, rootNetworkUuid).isBuilt())) { diff --git a/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java b/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java index 9c7c2b3ea..27ea698b0 100644 --- a/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java +++ b/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java @@ -814,7 +814,7 @@ void testCreateGenerator() throws Exception { body.replace("minActivePower", "100.0"); body.replace("maxActivePower", "200.0"); String bodyJsonCreateBis = mapper.writeValueAsString(body); - when(rootNetworkNodeInfoRepository.existsByStudyUuidAndBuildStatus(studyNameUserIdUuid, BuildStatus.BUILDING)).thenReturn(true); + when(rootNetworkNodeInfoRepository.existsByNodeUuidsAndBuildStatus(eq(firstRootNetworkUuid), any(List.class), eq(BuildStatus.BUILDING))).thenReturn(true); mockMvc.perform(post(URI_NETWORK_MODIF, studyNameUserIdUuid, modificationNode1Uuid) .content(bodyJsonCreateBis).contentType(MediaType.APPLICATION_JSON) .header(USER_ID_HEADER, userId)) @@ -868,7 +868,7 @@ void testCreateShuntsCompensator() throws Exception { String createShuntCompensatorAttributes2 = "{\"type\":\"" + ModificationType.SHUNT_COMPENSATOR_CREATION + "\",\"shuntCompensatorId\":\"shuntCompensatorId3\",\"shuntCompensatorName\":\"shuntCompensatorName3\",\"voltageLevelId\":\"idVL1\",\"busOrBusbarSectionId\":\"idBus1\"}"; - when(rootNetworkNodeInfoRepository.existsByStudyUuidAndBuildStatus(studyNameUserIdUuid, BuildStatus.BUILDING)).thenReturn(true); + when(rootNetworkNodeInfoRepository.existsByNodeUuidsAndBuildStatus(firstRootNetworkUuid, List.of(modificationNode1Uuid), BuildStatus.BUILDING)).thenReturn(true); // create shunt compensator on building node mockMvc.perform(post(URI_NETWORK_MODIF, studyNameUserIdUuid, modificationNode1Uuid) .content(createShuntCompensatorAttributes2).contentType(MediaType.APPLICATION_JSON) diff --git a/src/test/java/org/gridsuite/study/server/NetworkModificationTreeTest.java b/src/test/java/org/gridsuite/study/server/NetworkModificationTreeTest.java index c5bf30baf..65bac6da3 100644 --- a/src/test/java/org/gridsuite/study/server/NetworkModificationTreeTest.java +++ b/src/test/java/org/gridsuite/study/server/NetworkModificationTreeTest.java @@ -209,7 +209,7 @@ class NetworkModificationTreeTest { @Autowired private RootNetworkNodeInfoRepository rootNetworkNodeInfoRepository; - @Autowired + @MockitoSpyBean private RootNetworkNodeInfoService rootNetworkNodeInfoService; @Autowired private RootNetworkService rootNetworkService; @@ -449,6 +449,7 @@ private void assertForbiddenNodeInsertions(UUID studyId, String userId, NetworkModificationNode security1, NetworkModificationNode security2) throws Exception { // Construction node cannot be inserted before a security node + doNothing().when(rootNetworkNodeInfoService).assertComputationNotRunning(any(), any()); mockMvc.perform(post("/v1/studies/{studyUuid}/tree/nodes?nodeToCutUuid={nodeUuid}&referenceNodeUuid={referenceNodeUuid}&insertMode={insertMode}", studyId, construction2.getId(), security1.getId(), InsertMode.BEFORE) .header(USER_ID_HEADER, userId)) @@ -636,6 +637,7 @@ void testNodeStashAndRestore() throws Exception { assertEquals("not built node", networkModificationNode.getDescription()); //stash 1 node and do the checks + doNothing().when(rootNetworkNodeInfoService).assertComputationNotRunning(any(), any()); stashNode(root.getStudyId(), children.get(0), false, Set.of(children.get(0)), userId); var stashedNode = nodeRepository.findById(children.get(0).getId()).orElseThrow(); assertTrue(stashedNode.isStashed()); @@ -1744,6 +1746,7 @@ void testNodeAliases() throws Exception { checkNodeAliasUpdateMessageReceived(root.getStudyId()); // Stashing node3 (with stashChildren=true) should result in aliases no more associated to nodes node3, node4 and node5 + doNothing().when(rootNetworkNodeInfoService).assertComputationNotRunning(any(), any()); stashNode(root.getStudyId(), node3, true, Set.of(node3, node4, node5), userId); nodeAliases = objectMapper.readValue(mockMvc.perform(get("/v1/studies/{studyUuid}/node-aliases", root.getStudyId())).andExpect(status().isOk()).andReturn() .getResponse() diff --git a/src/test/java/org/gridsuite/study/server/studycontroller/NodeControllerTest.java b/src/test/java/org/gridsuite/study/server/studycontroller/NodeControllerTest.java index cd6fdaf1c..b0744d095 100644 --- a/src/test/java/org/gridsuite/study/server/studycontroller/NodeControllerTest.java +++ b/src/test/java/org/gridsuite/study/server/studycontroller/NodeControllerTest.java @@ -34,6 +34,8 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doNothing; 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.status; @@ -370,6 +372,7 @@ private void cutAndPasteNode(UUID studyUuid, NetworkModificationNode nodeToCopy, boolean wasBuilt = rootNetworkNodeInfoService.getRootNetworkNodeInfo(nodeToCopy.getId(), studyTestUtils.getOneRootNetworkUuid(studyUuid)).get().getNodeBuildStatus().toDto().isBuilt(); UUID deleteModificationIndexStub = wireMockStubs.stubNetworkModificationDeleteIndex(); output.receive(TIMEOUT, studyUpdateDestination); + doNothing().when(rootNetworkNodeInfoService).assertComputationNotRunning(any(), any()); mockMvc.perform(post(STUDIES_URL + "/{studyUuid}/tree/nodes?nodeToCutUuid={nodeUuid}&referenceNodeUuid={referenceNodeUuid}&insertMode={insertMode}", studyUuid, nodeToCopy.getId(), referenceNodeUuid, insertMode) diff --git a/src/test/java/org/gridsuite/study/server/studycontroller/StudyTestBase.java b/src/test/java/org/gridsuite/study/server/studycontroller/StudyTestBase.java index fe1eda1ab..16a814b07 100644 --- a/src/test/java/org/gridsuite/study/server/studycontroller/StudyTestBase.java +++ b/src/test/java/org/gridsuite/study/server/studycontroller/StudyTestBase.java @@ -281,7 +281,7 @@ class StudyTestBase { @Autowired protected NetworkModificationTreeService networkModificationTreeService; - @Autowired + @MockitoSpyBean protected RootNetworkNodeInfoService rootNetworkNodeInfoService; @MockitoBean