diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java index bb5cf2f5d..99849c7cc 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java @@ -149,26 +149,30 @@ public ResponseEntity getNetworkModification( @ApiResponse(responseCode = "200", description = "The network modifications were returned") public ResponseEntity> getAllNetworkModification( @Parameter(description = "Group UUID") @RequestParam("groupUuid") UUID groupUuid, - @Parameter(description = "delete only stashed modifications") @RequestParam(name = "onlyStashed", required = false, defaultValue = "false") Boolean onlyStashed){ - if(!onlyStashed) + @Parameter(description = "delete only stashed modifications") @RequestParam(name = "onlyStashed", required = false, defaultValue = "false") Boolean onlyStashed) { + + if (!onlyStashed) { return ResponseEntity.ok().body(networkModificationService.getAllNetworkModifications(groupUuid)); - else + } else { return ResponseEntity.ok().body(networkModificationService.getAllStashedModifications(groupUuid)); + } } @DeleteMapping(value = "/network-modifications", produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Delete network modifications") @ApiResponse(responseCode = "200", description = "The network modifications were deleted") public ResponseEntity deleteNetworkModifications( - @Parameter(description = "Network modification UUIDs") @RequestParam(name = "uuids", required = false) List networkModificationUuids, + @Parameter(description = "Network modification UUIDs") @RequestParam(name = "uuids", required = false) List networkModificationUuids, @Parameter(description = "Group UUID") @RequestParam("groupUuid") UUID groupUuid, - @Parameter(description = "delete only stashed modifications") @RequestParam(name = "onlyStashed", required = false, defaultValue = "false") Boolean onlyStashed){ - if(networkModificationUuids == null || networkModificationUuids.isEmpty()) + @Parameter(description = "delete only stashed modifications") @RequestParam(name = "onlyStashed", required = false, defaultValue = "false") Boolean onlyStashed) { + + if (onlyStashed && networkModificationUuids == null) { + networkModificationService.deleteAllStashedNetworkModifications(groupUuid); + } else if (networkModificationUuids == null || networkModificationUuids.isEmpty()) { networkModificationService.deleteAllNetworkModifications(groupUuid); - else if(!onlyStashed) + } else { networkModificationService.deleteNetworkModifications(groupUuid, networkModificationUuids); - else - networkModificationService.deleteAllStashedNetworkModifications(groupUuid); + } return ResponseEntity.ok().build(); } @@ -220,23 +224,18 @@ public ResponseEntity createModificationInGroup(@RequestBody ModificationI return ResponseEntity.ok().body(networkModificationService.createModificationInGroup(modificationsInfos)); } - @PostMapping(value = "/network-modifications/stash", produces = MediaType.APPLICATION_JSON_VALUE) - @Operation(summary = "stash network modifications") + @PutMapping(value = "/network-modifications", produces = MediaType.APPLICATION_JSON_VALUE) + @Operation(summary = "stash or unstash network modifications") @ApiResponse(responseCode = "200", description = "The network modifications were stashed") public ResponseEntity stashNetworkModifications( @Parameter(description = "Network modification UUIDs") @RequestParam("uuids") List networkModificationUuids, - @Parameter(description = "Group UUID") @RequestParam("groupUuid") UUID groupUuid) { - networkModificationService.stashNetworkModifications(networkModificationUuids); - return ResponseEntity.ok().build(); - } - - @PostMapping(value = "/network-modifications/restore", produces = MediaType.APPLICATION_JSON_VALUE) - @Operation(summary = "restore network modifications") - @ApiResponse(responseCode = "200", description = "The network modifications were restored") - public ResponseEntity restoreNetworkModifications( - @Parameter(description = "Network modification UUIDs") @RequestParam("uuids") List networkModificationUuids, - @Parameter(description = "Group UUID") @RequestParam("groupUuid") UUID groupUuid) { - networkModificationService.restoreNetworkModifications(networkModificationUuids); + @Parameter(description = "Group UUID") @RequestParam("groupUuid") UUID groupUuid, + @Parameter(description = "stash or unstash network modifications") @RequestParam(name = "stashed", required = true) Boolean stashed) { + if (stashed) { + networkModificationService.stashNetworkModifications(networkModificationUuids); + } else { + networkModificationService.restoreNetworkModifications(networkModificationUuids); + } return ResponseEntity.ok().build(); } diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index 018c2e242..ffc32b247 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -196,6 +196,7 @@ public int deleteAllModifications(UUID groupUuid) { this.modificationRepository.deleteAll(modifications); return count; } + @Transactional public int deleteAllStashedModifications(UUID groupUuid) { ModificationGroupEntity groupEntity = getModificationGroup(groupUuid); 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 8b929df78..9870d2dfd 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -210,16 +210,17 @@ public void stopBuildRequest(String receiver) { } public void deleteAllNetworkModifications(UUID groupUuid) { - if(networkModificationRepository.deleteAllModifications(groupUuid) == 0) { + if (networkModificationRepository.deleteAllModifications(groupUuid) == 0) { throw new NetworkModificationException(NOTHING_TO_DELETE); } } public void deleteAllStashedNetworkModifications(UUID groupUuid) { - if(networkModificationRepository.deleteAllStashedModifications(groupUuid) == 0) { + if (networkModificationRepository.deleteAllStashedModifications(groupUuid) == 0) { throw new NetworkModificationException(NOTHING_TO_DELETE); } } + public void deleteNetworkModifications(UUID groupUuid, List modificationsUuids) { if (networkModificationRepository.deleteModifications(groupUuid, modificationsUuids) == 0) { throw new NetworkModificationException(MODIFICATION_NOT_FOUND); diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index efb10e0ce..8ddcc2086 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -89,7 +89,6 @@ public class ModificationControllerTest { 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_RESTORE_NETWORK_MODIF_BASE = URI_NETWORK_MODIF_BASE + "/restore"; 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=" + TEST_NETWORK_ID + URI_NETWORK_MODIF_PARAMS; private static final String URI_NETWORK_MODIF_BUS_BREAKER = URI_NETWORK_MODIF_BASE + "?networkUuid=" + TEST_NETWORK_BUS_BREAKER_ID + URI_NETWORK_MODIF_PARAMS; @@ -298,9 +297,10 @@ public void testRestoreNetworkModifications() throws Exception { assertEquals(1, modifications.size()); String uuidString = modifications.get(0).getUuid().toString(); - mockMvc.perform(post(URI_RESTORE_NETWORK_MODIF_BASE) + mockMvc.perform(put(URI_NETWORK_MODIF_BASE) .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString)) + .queryParam("uuids", uuidString) + .queryParam("stashed", "false")) .andExpect(status().isOk()); assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, true, true, true).size()); } @@ -324,9 +324,10 @@ public void testStashNetworkModifications() throws Exception { List modifications = modificationRepository.getModifications(TEST_GROUP_ID, false, true); assertEquals(1, modifications.size()); String uuidString = modifications.get(0).getUuid().toString(); - mockMvc.perform(post(URI_NETWORK_MODIF_BASE + "/stash") + mockMvc.perform(put(URI_NETWORK_MODIF_BASE) .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString)) + .queryParam("uuids", uuidString) + .queryParam("stashed", "true")) .andExpect(status().isOk()); assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, false, true, false).size()); } @@ -383,19 +384,21 @@ public void testDeleteAllModification() throws Exception { assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); } -// @Test -// public void testDeleteAllStashedModification() throws Exception { -// List modificationList = createSomeSwitchModifications(TEST_GROUP_ID, 3); -// -// -// assertEquals(3, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); -// mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) -// .queryParam("groupUuid", TEST_GROUP_ID.toString()) -// .queryParam("stashed", "true")) -// .andExpect(status().isOk()); -// assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); -// } - + @Test + public void testDeleteAllStashedModification() throws Exception { + List modificationList = createSomeSwitchModifications(TEST_GROUP_ID, 5); + List modificationToStash = List.of(modificationList.get(0).getUuid(), modificationList.get(1).getUuid(), modificationList.get(2).getUuid()); + modificationRepository.stashNetworkModifications(modificationToStash); + // get stashed modifications + List stashedModificationInfos = modificationRepository.getAllStashedModificationsInfo(TEST_GROUP_ID); + + assertEquals(3, stashedModificationInfos.size()); + mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) + .queryParam("groupUuid", TEST_GROUP_ID.toString()) + .queryParam("onlyStashed", "true")) + .andExpect(status().isOk()); + assertEquals(2, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); + } @Test public void testNetworkModificationsWithErrorOnNetworkFlush() throws Exception { @@ -468,33 +471,32 @@ public void testGetNetworkModification() throws Exception { { MvcResult mvcResult = mockMvc.perform(get("/v1/network-modifications?groupUuid=" + TEST_GROUP_ID)) .andExpect(status().isOk()).andReturn(); - var modificationListResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() {}); + var modificationListResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); var newModificationList = modificationRepository.getAllModificationInfo(TEST_GROUP_ID); assertEquals(modificationUuidList, newModificationList.stream().map(ModificationInfos::getUuid).collect(Collectors.toList())); assertEquals(modificationListResult.size(), modificationUuidList.size()); } { - MvcResult mvcResultStashed = mockMvc.perform(get("/v1/network-modifications?groupUuid=" + TEST_GROUP_ID+ "&onlyStashed=true")) + MvcResult mvcResultStashed = mockMvc.perform(get("/v1/network-modifications?groupUuid=" + TEST_GROUP_ID + "&onlyStashed=true")) .andExpect(status().isOk()).andReturn(); - var stashedModificationListResult = mapper.readValue(mvcResultStashed.getResponse().getContentAsString(), new TypeReference>() {}); + var stashedModificationListResult = mapper.readValue(mvcResultStashed.getResponse().getContentAsString(), new TypeReference>() { }); assertEquals(0, stashedModificationListResult.size()); } { // stash one modification and get stashed modification only UUID modificationUuid = modificationUuidList.get(0); - mockMvc.perform(post("/v1/network-modifications/stash?groupUuid=" + TEST_GROUP_ID + "&uuids=" + modificationUuid)) + mockMvc.perform(put("/v1/network-modifications?groupUuid=" + TEST_GROUP_ID + "&uuids=" + modificationUuid + "&stashed=true")) .andExpect(status().isOk()); - MvcResult mvcResultStashed = mockMvc.perform(get("/v1/network-modifications?groupUuid=" + TEST_GROUP_ID+ "&onlyStashed=true")) + MvcResult mvcResultStashed = mockMvc.perform(get("/v1/network-modifications?groupUuid=" + TEST_GROUP_ID + "&onlyStashed=true")) .andExpect(status().isOk()).andReturn(); - var stashedModificationListResult = mapper.readValue(mvcResultStashed.getResponse().getContentAsString(), new TypeReference>() {}); + var stashedModificationListResult = mapper.readValue(mvcResultStashed.getResponse().getContentAsString(), new TypeReference>() { }); assertEquals(1, stashedModificationListResult.size()); assertEquals(modificationUuid, stashedModificationListResult.get(0).getUuid()); } } - @Test public void testDuplicateModification() throws Exception { // create 3 modifications @@ -825,9 +827,10 @@ public void testDuplicateModificationGroup() throws Exception { //stash the first modification String uuidString = modifications.get(0).getUuid().toString(); - mockMvc.perform(post(URI_NETWORK_MODIF_BASE + "/stash") + mockMvc.perform(put(URI_NETWORK_MODIF_BASE) .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString)) + .queryParam("uuids", uuidString) + .queryParam("stashed", "true")) .andExpect(status().isOk()); List stashedModifications = modificationRepository.getModificationsMetadata(TEST_GROUP_ID, true); List modificationAfterStash = modificationRepository.getModificationsMetadata(TEST_GROUP_ID, false); @@ -1375,9 +1378,10 @@ public void testDeleteStashedNetworkModifications() throws Exception { List modifications = modificationRepository.getModifications(TEST_GROUP_ID, false, true); assertEquals(1, modifications.size()); String uuidString = modifications.get(0).getUuid().toString(); - mockMvc.perform(post(URI_NETWORK_MODIF_BASE + "/stash") + mockMvc.perform(put(URI_NETWORK_MODIF_BASE) .queryParam("groupUuid", TEST_GROUP_ID.toString()) - .queryParam("uuids", uuidString)) + .queryParam("uuids", uuidString) + .queryParam("stashed", "true")) .andExpect(status().isOk()); assertEquals(1, modificationRepository.getModifications(TEST_GROUP_ID, false, true, true).size()); mockMvc.perform(delete("/v1/groups/" + TEST_GROUP_ID + "/stashed-modifications").queryParam("errorOnGroupNotFound", "false")).andExpect(status().isOk());