From 6fe5596c84832e373cc1d684a5ca98ea5141ef0c Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Thu, 22 Jan 2026 20:31:06 +0100 Subject: [PATCH 1/6] user profil, pcc min parameters Signed-off-by: SOUISSI Maissa (Externe) --- .../server/controller/StudyController.java | 3 +-- .../study/server/dto/UserProfileInfos.java | 2 ++ .../study/server/service/ConsumerService.java | 15 +++++++++-- .../study/server/service/StudyService.java | 26 ++++++++++++++++--- 4 files changed, 39 insertions(+), 7 deletions(-) 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 e22b15bcca..638d20190b 100644 --- a/src/main/java/org/gridsuite/study/server/controller/StudyController.java +++ b/src/main/java/org/gridsuite/study/server/controller/StudyController.java @@ -2523,8 +2523,7 @@ public ResponseEntity setPccMinParameters( @PathVariable("studyUuid") UUID studyUuid, @RequestBody(required = false) String pccMinParametersInfos, @RequestHeader(HEADER_USER_ID) String userId) { - studyService.setPccMinParameters(studyUuid, pccMinParametersInfos, userId); - return ResponseEntity.ok().build(); + return studyService.setPccMinParameters(studyUuid, pccMinParametersInfos, userId) ? ResponseEntity.noContent().build() : ResponseEntity.ok().build(); } @PostMapping(value = "/studies/{studyUuid}/nad-configs", consumes = MediaType.APPLICATION_JSON_VALUE) diff --git a/src/main/java/org/gridsuite/study/server/dto/UserProfileInfos.java b/src/main/java/org/gridsuite/study/server/dto/UserProfileInfos.java index e24769027b..1f97b1fcc8 100644 --- a/src/main/java/org/gridsuite/study/server/dto/UserProfileInfos.java +++ b/src/main/java/org/gridsuite/study/server/dto/UserProfileInfos.java @@ -32,6 +32,8 @@ public class UserProfileInfos { private UUID shortcircuitParameterId; + private UUID pccminParameterId; + // note: this parameter is not managed by user-admin-server yet private UUID dynamicSecurityAnalysisParameterId; diff --git a/src/main/java/org/gridsuite/study/server/service/ConsumerService.java b/src/main/java/org/gridsuite/study/server/service/ConsumerService.java index 4ece406120..19463e47ad 100644 --- a/src/main/java/org/gridsuite/study/server/service/ConsumerService.java +++ b/src/main/java/org/gridsuite/study/server/service/ConsumerService.java @@ -292,7 +292,7 @@ private void insertStudy(UUID studyUuid, String userId, NetworkInfos networkInfo UUID voltageInitParametersUuid = createDefaultVoltageInitParameters(userId, userProfileInfos); UUID dynamicSecurityAnalysisParametersUuid = createDefaultDynamicSecurityAnalysisParameters(userId, userProfileInfos); UUID stateEstimationParametersUuid = createDefaultStateEstimationParameters(); - UUID pccMinParametersUuid = createDefaultPccMinParameters(); + UUID pccMinParametersUuid = createDefaultPccMinParameters(userId, userProfileInfos); UUID spreadsheetConfigCollectionUuid = createDefaultSpreadsheetConfigCollection(userId, userProfileInfos); UUID diagramGridLayoutUuid = studyService.createGridLayoutFromNadDiagram(userId, userProfileInfos); @@ -452,7 +452,18 @@ private UUID createDefaultStateEstimationParameters() { } } - private UUID createDefaultPccMinParameters() { + private UUID createDefaultPccMinParameters(String userId, UserProfileInfos userProfileInfos) { + if (userProfileInfos != null && userProfileInfos.getPccminParameterId() != null) { + // try to access/duplicate the user profile pccmin parameters + try { + return pccMinService.duplicatePccMinParameters(userProfileInfos.getPccminParameterId()); + } catch (Exception e) { + // TODO try to report a log in Root subreporter ? + LOGGER.error(String.format("Could not duplicate pccmin parameters with id '%s' from user/profile '%s/%s'. Using default parameters", + userProfileInfos.getPccminParameterId(), userId, userProfileInfos.getName()), e); + } + } + // no profile, or no/bad shortcircuit parameters in profile => use default values try { return pccMinService.createDefaultPccMinParameters(); } catch (final Exception e) { 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 dc725d5cd2..8ea3d94dbc 100644 --- a/src/main/java/org/gridsuite/study/server/service/StudyService.java +++ b/src/main/java/org/gridsuite/study/server/service/StudyService.java @@ -3465,23 +3465,43 @@ public String getPccMinParameters(UUID studyUuid) { } @Transactional - public void setPccMinParameters(UUID studyUuid, String parameters, String userId) { + public boolean setPccMinParameters(UUID studyUuid, String parameters, String userId) { StudyEntity studyEntity = getStudy(studyUuid); - createOrUpdatePccMinParameters(studyEntity, parameters); + boolean userProfileIssue = createOrUpdatePccMinParameters(studyEntity, parameters, userId); + invalidatePccMinStatusOnAllNodes(studyEntity.getId()); notificationService.emitStudyChanged(studyUuid, null, null, NotificationService.UPDATE_TYPE_PCC_MIN_STATUS); notificationService.emitElementUpdated(studyUuid, userId); notificationService.emitComputationParamsChanged(studyUuid, PCC_MIN); + return userProfileIssue; } - public void createOrUpdatePccMinParameters(StudyEntity studyEntity, String parameters) { + public boolean createOrUpdatePccMinParameters(StudyEntity studyEntity, String parameters, String userId) { UUID existingPccMinParametersUuid = studyEntity.getPccMinParametersUuid(); + boolean userProfileIssue = false; + + UserProfileInfos userProfileInfos = parameters == null ? userAdminService.getUserProfile(userId) : null; + if (parameters == null && userProfileInfos.getPccminParameterId() != null) { + // reset case, with existing profile, having default pcc min params + try { + UUID pccMinParametersFromProfileUuid = pccMinService.duplicatePccMinParameters(userProfileInfos.getPccminParameterId()); + studyEntity.setPccMinParametersUuid(pccMinParametersFromProfileUuid); + removePccMinParameters(existingPccMinParametersUuid); + return userProfileIssue; + } catch (Exception e) { + userProfileIssue = true; + LOGGER.error(String.format("Could not duplicate pcc min parameters with id '%s' from user/profile '%s/%s'. Using default parameters", + userProfileInfos.getPccminParameterId(), userId, userProfileInfos.getName()), e); + // in case of duplication error (ex: wrong/dangling uuid in the profile), move on with default params below + } + } if (existingPccMinParametersUuid == null) { existingPccMinParametersUuid = pccMinService.createPccMinParameters(parameters); studyEntity.setPccMinParametersUuid(existingPccMinParametersUuid); } else { pccMinService.updatePccMinParameters(existingPccMinParametersUuid, parameters); } + return userProfileIssue; } @Transactional From b0defc3ce0fca8f2cfb3fdb4bfc03dafb585238f Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Mon, 26 Jan 2026 11:52:20 +0100 Subject: [PATCH 2/6] TU Signed-off-by: SOUISSI Maissa (Externe) --- .../gridsuite/study/server/PccMinTest.java | 150 ++++++++++++++++-- 1 file changed, 133 insertions(+), 17 deletions(-) diff --git a/src/test/java/org/gridsuite/study/server/PccMinTest.java b/src/test/java/org/gridsuite/study/server/PccMinTest.java index 3a3a68a115..1eea4976b7 100644 --- a/src/test/java/org/gridsuite/study/server/PccMinTest.java +++ b/src/test/java/org/gridsuite/study/server/PccMinTest.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.tomakehurst.wiremock.client.WireMock; +import com.github.tomakehurst.wiremock.stubbing.ServeEvent; import lombok.AllArgsConstructor; import org.gridsuite.study.server.dto.ComputationType; import org.gridsuite.study.server.dto.NodeReceiver; @@ -27,6 +28,7 @@ import org.gridsuite.study.server.utils.ResultParameters; import org.gridsuite.study.server.utils.TestUtils; import org.gridsuite.study.server.utils.wiremock.ComputationServerStubs; +import org.gridsuite.study.server.utils.wiremock.UserAdminServerStubs; import org.gridsuite.study.server.utils.wiremock.WireMockStubs; import org.gridsuite.study.server.utils.elasticsearch.DisableElasticsearch; import org.gridsuite.study.server.utils.wiremock.WireMockUtilsCriteria; @@ -57,8 +59,7 @@ import org.springframework.web.client.HttpClientErrorException; import static org.gridsuite.study.server.StudyConstants.*; -import static org.gridsuite.study.server.notification.NotificationService.HEADER_UPDATE_TYPE; -import static org.gridsuite.study.server.notification.NotificationService.UPDATE_TYPE_COMPUTATION_PARAMETERS; +import static org.gridsuite.study.server.notification.NotificationService.*; import static org.junit.jupiter.api.Assertions.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -70,7 +71,6 @@ class PccMinTest { private static final String PCC_MIN_URL_BASE = "/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/pcc-min/"; - private static final UUID CASE_LOADFLOW_UUID = UUID.fromString("11a91c11-2c2d-83bb-b45f-20b83e4ef00c"); private static final String NETWORK_UUID_STRING = "38400000-8cf0-11bd-b23e-10b96e4ef00d"; private static final String PCC_MIN_RESULT_UUID = "cf203721-6150-4203-8960-d61d815a9d16"; private static final String PCC_MIN_ERROR_RESULT_UUID = "25222222-9994-4e55-8ec7-07ea965d24eb"; @@ -78,6 +78,8 @@ class PccMinTest { private static final String PCC_MIN_STATUS_JSON = "{\"status\":\"COMPLETED\"}"; private static final String ELEMENT_UPDATE_DESTINATION = "element.update"; + private static final String CASE_UUID_STRING = "00000000-8cf0-11bd-b23e-10b96e4ef00d"; + private static final UUID CASE_UUID = UUID.fromString(CASE_UUID_STRING); private static final String VARIANT_ID = "variant_1"; private static final String VARIANT_ID_2 = "variant_2"; private static final long TIMEOUT = 1000; @@ -88,6 +90,24 @@ class PccMinTest { private static final String PCC_MIN_FAILED_DESTINATION = "pccmin.run.dlx"; private static final byte[] PCC_MIN_RESULTS_AS_ZIPPED_CSV = {0x00, 0x01}; + private static final String NO_PROFILE_USER_ID = "noProfileUser"; + private static final String NO_PARAMS_IN_PROFILE_USER_ID = "noParamInProfileUser"; + private static final String INVALID_PARAMS_IN_PROFILE_USER_ID = "invalidParamInProfileUser"; + private static final String USER_PROFILE_NO_PARAMS_JSON = "{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile No params\"}"; + + private static final String PCC_MIN_PARAMETERS_UUID_STRING = "0c0f1efd-bd22-4a75-83d3-9e530245c7f4"; + private static final UUID PCC_MIN_PARAMETERS_UUID = UUID.fromString(PCC_MIN_PARAMETERS_UUID_STRING); + private static final String PCC_MIN_PROFILE_PARAMETERS_JSON = "{\"uuid\":\"7cce52fd-2aca-4d93-9b7b-6a2b4c0c2c11\",\"filters\":[{\"filterId\":\"b5fafd19-25f4-45b9-b5c8-3af51fdc9d1c\",\"filterName\":\"filterName\"}]}"; + + private static final String PROFILE_PCC_MIN_DUPLICATED_PARAMETERS_UUID_STRING = "a4ce25e1-59a7-401d-abb1-04425fe24587"; + private static final String PROFILE_PCC_MIN_INVALID_PARAMETERS_UUID_STRING = "f09f5282-8e34-48b5-b66e-7ef9f3f36c4f"; + private static final String VALID_PARAMS_IN_PROFILE_USER_ID = "validParamInProfileUser"; + private static final String PROFILE_PCC_MIN_VALID_PARAMETERS_UUID_STRING = "1cec4a7b-ab7e-4d78-9dd7-ce73c5ef11d9"; + + private static final String USER_PROFILE_VALID_PARAMS_JSON = "{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile with valid pcc min params\",\"pccminParameterId\":\"" + PROFILE_PCC_MIN_VALID_PARAMETERS_UUID_STRING + "\",\"allParametersLinksValid\":true}"; + private static final String USER_PROFILE_INVALID_PARAMS_JSON = "{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile with broken pcc min params\",\"pccminParameterId\":\"" + PROFILE_PCC_MIN_INVALID_PARAMETERS_UUID_STRING + "\",\"allParametersLinksValid\":false}"; + private static final String DUPLICATED_PARAMS_JSON = "\"" + PROFILE_PCC_MIN_DUPLICATED_PARAMETERS_UUID_STRING + "\""; + @Autowired private MockMvc mockMvc; @Autowired @@ -118,6 +138,7 @@ class PccMinTest { private WireMockServer wireMockServer; private WireMockStubs wireMockStubs; private ComputationServerStubs computationServerStubs; + private UserAdminServerStubs userAdminServerStubs; @BeforeEach void setup() { @@ -125,6 +146,7 @@ void setup() { wireMockServer.start(); wireMockStubs = new WireMockStubs(wireMockServer); computationServerStubs = new ComputationServerStubs(wireMockServer); + userAdminServerStubs = new UserAdminServerStubs(wireMockServer); configureFor("localhost", wireMockServer.port()); String baseUrl = wireMockServer.baseUrl(); @@ -154,7 +176,7 @@ private static final class StudyNodeIds { private StudyNodeIds createStudyAndNode(String variantId, String nodeName, UUID pccMinParametersUuid) throws Exception { StudyEntity studyEntity = TestUtils.createDummyStudy(UUID.fromString(NETWORK_UUID_STRING), - "netId", CASE_LOADFLOW_UUID, "", "", null, null, null, null, null, null, pccMinParametersUuid); + "netId", CASE_UUID, "", "", null, null, null, null, null, null, pccMinParametersUuid); studyRepository.save(studyEntity); networkModificationTreeService.createRoot(studyEntity); @@ -221,8 +243,8 @@ private void consumePccMinResult(StudyNodeIds ids, String resultUuid) throws Jso MessageHeaders headers = new MessageHeaders(Map.of("resultUuid", resultUuid, HEADER_RECEIVER, resultUuidJson)); consumerService.consumePccMinResult().accept(MessageBuilder.createMessage("", headers)); - checkPccMinMessagesReceived(ids.studyId, NotificationService.UPDATE_TYPE_PCC_MIN_STATUS); - checkPccMinMessagesReceived(ids.studyId, NotificationService.UPDATE_TYPE_PCC_MIN_STATUS); + checkPccMinMessagesReceived(ids.studyId, UPDATE_TYPE_PCC_MIN_STATUS); + checkPccMinMessagesReceived(ids.studyId, UPDATE_TYPE_PCC_MIN_STATUS); checkPccMinMessagesReceived(ids.studyId, NotificationService.UPDATE_TYPE_PCC_MIN_RESULT); wireMockServer.verify(postRequestedFor(urlPathMatching( @@ -270,7 +292,7 @@ void testStop() throws Exception { runPccMin(ids); wireMockServer.stubFor(put(urlPathMatching("/v1/results/" + PCC_MIN_RESULT_UUID + "/stop.*")) - .willReturn(ok())); + .willReturn(ok())); // stop pcc min mockMvc.perform(put(PCC_MIN_URL_BASE + "stop", ids.studyId, ids.rootNetworkUuid, ids.nodeId)) @@ -282,7 +304,7 @@ void testStop() throws Exception { .setHeader("resultUuid", PCC_MIN_RESULT_UUID) .build(); consumerService.consumePccMinStopped().accept(stoppedMessage); - checkPccMinMessagesReceived(ids.studyId, NotificationService.UPDATE_TYPE_PCC_MIN_STATUS); + checkPccMinMessagesReceived(ids.studyId, UPDATE_TYPE_PCC_MIN_STATUS); computationServerStubs.verifyComputationStop(PCC_MIN_RESULT_UUID, Map.of("receiver", WireMock.matching(".*"))); } @@ -303,12 +325,106 @@ void testFailure() throws Exception { .build(); consumerService.consumePccMinFailed().accept(failedMessage); - checkPccMinMessagesReceived(ids.studyId, NotificationService.UPDATE_TYPE_PCC_MIN_STATUS); + checkPccMinMessagesReceived(ids.studyId, UPDATE_TYPE_PCC_MIN_STATUS); checkPccMinMessagesReceived(ids.studyId, NotificationService.UPDATE_TYPE_PCC_MIN_FAILED); wireMockStubs.verifyPccMinFail(stubFail, NETWORK_UUID_STRING, VARIANT_ID_2); } + @Test + void testResetPccMinParametersUserHasValidParamsInProfileButNoExistingPccMinParams() throws Exception { + StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, null); + UUID studyUuid = studyEntity.getId(); + + userAdminServerStubs.stubUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_VALID_PARAMS_JSON); + wireMockServer.stubFor(post(urlPathEqualTo("/v1/parameters")) + .withQueryParam("duplicateFrom", equalTo(PROFILE_PCC_MIN_VALID_PARAMETERS_UUID_STRING)) + .willReturn(WireMock.ok() + .withBody(DUPLICATED_PARAMS_JSON) + .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + )); + + createOrUpdateParametersAndDoChecks(studyUuid, "", VALID_PARAMS_IN_PROFILE_USER_ID, HttpStatus.OK); + + userAdminServerStubs.verifyUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID); + wireMockServer.verify(postRequestedFor(urlPathEqualTo("/v1/parameters")) + .withQueryParam("duplicateFrom", equalTo(PROFILE_PCC_MIN_VALID_PARAMETERS_UUID_STRING)) + ); + } + + @Test + void testResetPccMinParametersUserHasNoProfile() throws Exception { + StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), UUID.randomUUID(), PCC_MIN_PARAMETERS_UUID); + UUID studyNameUserIdUuid = studyEntity.getId(); + userAdminServerStubs.stubUserProfile(NO_PROFILE_USER_ID, USER_PROFILE_NO_PARAMS_JSON); + computationServerStubs.stubParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING, PCC_MIN_PROFILE_PARAMETERS_JSON); + createOrUpdateParametersAndDoChecks(studyNameUserIdUuid, "", NO_PROFILE_USER_ID, HttpStatus.OK); + computationServerStubs.verifyParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING); + } + + @Test + void testResetPccMinParametersUserHasNoParamsInProfile() throws Exception { + StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, PCC_MIN_PARAMETERS_UUID); + UUID studyUuid = studyEntity.getId(); + + userAdminServerStubs.stubUserProfile(NO_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_NO_PARAMS_JSON); + computationServerStubs.stubParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING, PCC_MIN_PROFILE_PARAMETERS_JSON); + createOrUpdateParametersAndDoChecks(studyUuid, "", NO_PARAMS_IN_PROFILE_USER_ID, HttpStatus.OK); + + userAdminServerStubs.verifyUserProfile(NO_PARAMS_IN_PROFILE_USER_ID); + computationServerStubs.verifyParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING); + } + + @Test + void testResetPccMinParametersUserHasInvalidParamsInProfile() throws Exception { + StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, PCC_MIN_PARAMETERS_UUID); + UUID studyUuid = studyEntity.getId(); + + userAdminServerStubs.stubUserProfile(INVALID_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_INVALID_PARAMS_JSON); + computationServerStubs.stubParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING, PCC_MIN_PROFILE_PARAMETERS_JSON); + computationServerStubs.stubParametersDuplicateFromNotFound(PROFILE_PCC_MIN_INVALID_PARAMETERS_UUID_STRING); + createOrUpdateParametersAndDoChecks(studyUuid, "", INVALID_PARAMS_IN_PROFILE_USER_ID, HttpStatus.NO_CONTENT); + + // --- Verify WireMock requests --- + userAdminServerStubs.verifyUserProfile(INVALID_PARAMS_IN_PROFILE_USER_ID); + computationServerStubs.verifyParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING); + computationServerStubs.verifyParametersDuplicateFrom(PROFILE_PCC_MIN_INVALID_PARAMETERS_UUID_STRING); + } + + @Test + void testResetPccMinParametersUserHasValidParamsInProfile() throws Exception { + StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, PCC_MIN_PARAMETERS_UUID); + UUID studyUuid = studyEntity.getId(); + UUID rootNodeUuid = getRootNode(studyUuid).getId(); + UUID firstRootNetworkUuid = studyTestUtils.getOneRootNetworkUuid(studyUuid); + NetworkModificationNode modificationNode1 = createNetworkModificationNode(studyUuid, rootNodeUuid, UUID.randomUUID(), VARIANT_ID, "node 1"); + wireMockServer.stubFor(post(urlPathMatching("/v1/networks/" + NETWORK_UUID_STRING + "/run-and-save.*")) + .willReturn(ok())); + userAdminServerStubs.stubUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_VALID_PARAMS_JSON); + computationServerStubs.stubParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING, PCC_MIN_PROFILE_PARAMETERS_JSON); + computationServerStubs.stubParametersDuplicateFrom(PROFILE_PCC_MIN_VALID_PARAMETERS_UUID_STRING, DUPLICATED_PARAMS_JSON); + wireMockServer.stubFor(put(urlPathMatching("/v1/results/invalidate-status.*")) + .withQueryParam("resultUuid", matching(".*")) + .willReturn(ok())); + computationServerStubs.stubComputationRun(NETWORK_UUID_STRING, null, PCC_MIN_RESULT_UUID); + mockMvc.perform(post(PCC_MIN_URL_BASE + "run", studyUuid, firstRootNetworkUuid, modificationNode1.getId()) + .contentType(MediaType.APPLICATION_JSON) + .header("userId", "userId")) + .andExpect(status().isOk()); + + Message message = output.receive(TIMEOUT, STUDY_UPDATE_DESTINATION); + assertEquals(UPDATE_TYPE_PCC_MIN_STATUS, message.getHeaders().get(HEADER_UPDATE_TYPE)); + + createOrUpdateParametersAndDoChecks(studyUuid, "", VALID_PARAMS_IN_PROFILE_USER_ID, HttpStatus.OK); + userAdminServerStubs.verifyUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID); + computationServerStubs.verifyComputationRun(NETWORK_UUID_STRING, Map.of("reportUuid", WireMock.matching(".*"))); + computationServerStubs.verifyParametersDuplicateFrom(PROFILE_PCC_MIN_VALID_PARAMETERS_UUID_STRING); + List invalidateCalls = wireMockServer.getAllServeEvents().stream() + .filter(e -> e.getRequest().getUrl().startsWith("/v1/results/invalidate-status")) + .toList(); + assertTrue(invalidateCalls.size() <= 1); + } + @Test void testResultsDeletion() throws Exception { StudyNodeIds ids = createStudyAndNode(VARIANT_ID, "node 1", PCCMIN_PARAMETERS_UUID); @@ -385,24 +501,24 @@ void testGetPccMinResults() throws Exception { wireMockServer.verify(0, WireMock.getRequestedFor(WireMock.urlMatching("/v1/pcc-min/results/.*"))); } - private void createOrUpdateParametersAndDoChecks(UUID studyNameUserIdUuid, String parameters, HttpStatusCode status) throws Exception { + private void createOrUpdateParametersAndDoChecks(UUID studyUuid, String parameters, String userId, HttpStatusCode status) throws Exception { mockMvc.perform( - post("/v1/studies/{studyUuid}/pcc-min/parameters", studyNameUserIdUuid) - .header("userId", "userId") + post("/v1/studies/{studyUuid}/pcc-min/parameters", studyUuid) + .header("userId", userId) .contentType(MediaType.ALL) .content(parameters)) .andExpect(status().is(status.value())); Message message = output.receive(TIMEOUT, STUDY_UPDATE_DESTINATION); - assertEquals(studyNameUserIdUuid, message.getHeaders().get(NotificationService.HEADER_STUDY_UUID)); - assertEquals(NotificationService.UPDATE_TYPE_PCC_MIN_STATUS, message.getHeaders().get(NotificationService.HEADER_UPDATE_TYPE)); + assertEquals(studyUuid, message.getHeaders().get(NotificationService.HEADER_STUDY_UUID)); + assertEquals(UPDATE_TYPE_PCC_MIN_STATUS, message.getHeaders().get(NotificationService.HEADER_UPDATE_TYPE)); message = output.receive(TIMEOUT, STUDY_UPDATE_DESTINATION); - assertEquals(studyNameUserIdUuid, message.getHeaders().get(NotificationService.HEADER_STUDY_UUID)); + assertEquals(studyUuid, message.getHeaders().get(NotificationService.HEADER_STUDY_UUID)); assertEquals(UPDATE_TYPE_COMPUTATION_PARAMETERS, message.getHeaders().get(NotificationService.HEADER_UPDATE_TYPE)); message = output.receive(TIMEOUT, ELEMENT_UPDATE_DESTINATION); - assertEquals(studyNameUserIdUuid, message.getHeaders().get(NotificationService.HEADER_ELEMENT_UUID)); + assertEquals(studyUuid, message.getHeaders().get(NotificationService.HEADER_ELEMENT_UUID)); } private StudyEntity insertDummyStudy(UUID networkUuid, UUID caseUuid, UUID pccMinParametersUuid) { @@ -454,7 +570,7 @@ void testSetPccMinParameters() throws Exception { .willReturn(ok())); UUID studyUuid = insertDummyStudy(UUID.randomUUID(), UUID.randomUUID(), PCCMIN_PARAMETERS_UUID).getId(); - createOrUpdateParametersAndDoChecks(studyUuid, parameterToUpdate, HttpStatus.OK); + createOrUpdateParametersAndDoChecks(studyUuid, parameterToUpdate, "userId", HttpStatus.OK); wireMockServer.verify(putRequestedFor(urlPathEqualTo("/v1/parameters/" + PCCMIN_PARAMETERS_UUID))); // Fail case From 5e371a7286b45d478f09daca913fc5beaf0329f6 Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Wed, 28 Jan 2026 16:36:41 +0100 Subject: [PATCH 3/6] prettiers Signed-off-by: SOUISSI Maissa (Externe) --- .../study/server/service/ConsumerService.java | 2 +- .../org/gridsuite/study/server/PccMinTest.java | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/gridsuite/study/server/service/ConsumerService.java b/src/main/java/org/gridsuite/study/server/service/ConsumerService.java index b7332951ab..b1f83b0311 100644 --- a/src/main/java/org/gridsuite/study/server/service/ConsumerService.java +++ b/src/main/java/org/gridsuite/study/server/service/ConsumerService.java @@ -469,7 +469,7 @@ private UUID createDefaultPccMinParameters(String userId, UserProfileInfos userP userProfileInfos.getPccminParameterId(), userId, userProfileInfos.getName()), e); } } - // no profile, or no/bad shortcircuit parameters in profile => use default values + // no profile, or no/bad pcc min parameters in profile => use default values try { return pccMinService.createDefaultPccMinParameters(); } catch (final Exception e) { diff --git a/src/test/java/org/gridsuite/study/server/PccMinTest.java b/src/test/java/org/gridsuite/study/server/PccMinTest.java index 1eea4976b7..cfabf6a218 100644 --- a/src/test/java/org/gridsuite/study/server/PccMinTest.java +++ b/src/test/java/org/gridsuite/study/server/PccMinTest.java @@ -336,7 +336,7 @@ void testResetPccMinParametersUserHasValidParamsInProfileButNoExistingPccMinPara StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, null); UUID studyUuid = studyEntity.getId(); - userAdminServerStubs.stubUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_VALID_PARAMS_JSON); + userAdminServerStubs.stubGetUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_VALID_PARAMS_JSON); wireMockServer.stubFor(post(urlPathEqualTo("/v1/parameters")) .withQueryParam("duplicateFrom", equalTo(PROFILE_PCC_MIN_VALID_PARAMETERS_UUID_STRING)) .willReturn(WireMock.ok() @@ -346,7 +346,7 @@ void testResetPccMinParametersUserHasValidParamsInProfileButNoExistingPccMinPara createOrUpdateParametersAndDoChecks(studyUuid, "", VALID_PARAMS_IN_PROFILE_USER_ID, HttpStatus.OK); - userAdminServerStubs.verifyUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID); + userAdminServerStubs.verifyGetUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID); wireMockServer.verify(postRequestedFor(urlPathEqualTo("/v1/parameters")) .withQueryParam("duplicateFrom", equalTo(PROFILE_PCC_MIN_VALID_PARAMETERS_UUID_STRING)) ); @@ -356,7 +356,7 @@ void testResetPccMinParametersUserHasValidParamsInProfileButNoExistingPccMinPara void testResetPccMinParametersUserHasNoProfile() throws Exception { StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), UUID.randomUUID(), PCC_MIN_PARAMETERS_UUID); UUID studyNameUserIdUuid = studyEntity.getId(); - userAdminServerStubs.stubUserProfile(NO_PROFILE_USER_ID, USER_PROFILE_NO_PARAMS_JSON); + userAdminServerStubs.stubGetUserProfile(NO_PROFILE_USER_ID, USER_PROFILE_NO_PARAMS_JSON); computationServerStubs.stubParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING, PCC_MIN_PROFILE_PARAMETERS_JSON); createOrUpdateParametersAndDoChecks(studyNameUserIdUuid, "", NO_PROFILE_USER_ID, HttpStatus.OK); computationServerStubs.verifyParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING); @@ -367,11 +367,11 @@ void testResetPccMinParametersUserHasNoParamsInProfile() throws Exception { StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, PCC_MIN_PARAMETERS_UUID); UUID studyUuid = studyEntity.getId(); - userAdminServerStubs.stubUserProfile(NO_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_NO_PARAMS_JSON); + userAdminServerStubs.stubGetUserProfile(NO_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_NO_PARAMS_JSON); computationServerStubs.stubParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING, PCC_MIN_PROFILE_PARAMETERS_JSON); createOrUpdateParametersAndDoChecks(studyUuid, "", NO_PARAMS_IN_PROFILE_USER_ID, HttpStatus.OK); - userAdminServerStubs.verifyUserProfile(NO_PARAMS_IN_PROFILE_USER_ID); + userAdminServerStubs.verifyGetUserProfile(NO_PARAMS_IN_PROFILE_USER_ID); computationServerStubs.verifyParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING); } @@ -380,13 +380,13 @@ void testResetPccMinParametersUserHasInvalidParamsInProfile() throws Exception { StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, PCC_MIN_PARAMETERS_UUID); UUID studyUuid = studyEntity.getId(); - userAdminServerStubs.stubUserProfile(INVALID_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_INVALID_PARAMS_JSON); + userAdminServerStubs.stubGetUserProfile(INVALID_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_INVALID_PARAMS_JSON); computationServerStubs.stubParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING, PCC_MIN_PROFILE_PARAMETERS_JSON); computationServerStubs.stubParametersDuplicateFromNotFound(PROFILE_PCC_MIN_INVALID_PARAMETERS_UUID_STRING); createOrUpdateParametersAndDoChecks(studyUuid, "", INVALID_PARAMS_IN_PROFILE_USER_ID, HttpStatus.NO_CONTENT); // --- Verify WireMock requests --- - userAdminServerStubs.verifyUserProfile(INVALID_PARAMS_IN_PROFILE_USER_ID); + userAdminServerStubs.verifyGetUserProfile(INVALID_PARAMS_IN_PROFILE_USER_ID); computationServerStubs.verifyParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING); computationServerStubs.verifyParametersDuplicateFrom(PROFILE_PCC_MIN_INVALID_PARAMETERS_UUID_STRING); } @@ -400,7 +400,7 @@ void testResetPccMinParametersUserHasValidParamsInProfile() throws Exception { NetworkModificationNode modificationNode1 = createNetworkModificationNode(studyUuid, rootNodeUuid, UUID.randomUUID(), VARIANT_ID, "node 1"); wireMockServer.stubFor(post(urlPathMatching("/v1/networks/" + NETWORK_UUID_STRING + "/run-and-save.*")) .willReturn(ok())); - userAdminServerStubs.stubUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_VALID_PARAMS_JSON); + userAdminServerStubs.stubGetUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_VALID_PARAMS_JSON); computationServerStubs.stubParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING, PCC_MIN_PROFILE_PARAMETERS_JSON); computationServerStubs.stubParametersDuplicateFrom(PROFILE_PCC_MIN_VALID_PARAMETERS_UUID_STRING, DUPLICATED_PARAMS_JSON); wireMockServer.stubFor(put(urlPathMatching("/v1/results/invalidate-status.*")) @@ -416,7 +416,7 @@ void testResetPccMinParametersUserHasValidParamsInProfile() throws Exception { assertEquals(UPDATE_TYPE_PCC_MIN_STATUS, message.getHeaders().get(HEADER_UPDATE_TYPE)); createOrUpdateParametersAndDoChecks(studyUuid, "", VALID_PARAMS_IN_PROFILE_USER_ID, HttpStatus.OK); - userAdminServerStubs.verifyUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID); + userAdminServerStubs.verifyGetUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID); computationServerStubs.verifyComputationRun(NETWORK_UUID_STRING, Map.of("reportUuid", WireMock.matching(".*"))); computationServerStubs.verifyParametersDuplicateFrom(PROFILE_PCC_MIN_VALID_PARAMETERS_UUID_STRING); List invalidateCalls = wireMockServer.getAllServeEvents().stream() From 50e04e221aa11db043d5720796c8612c5f4eb2b9 Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Wed, 28 Jan 2026 16:55:17 +0100 Subject: [PATCH 4/6] renaming Signed-off-by: SOUISSI Maissa (Externe) --- .../org/gridsuite/study/server/dto/UserProfileInfos.java | 2 +- .../org/gridsuite/study/server/service/ConsumerService.java | 6 +++--- .../org/gridsuite/study/server/service/StudyService.java | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/gridsuite/study/server/dto/UserProfileInfos.java b/src/main/java/org/gridsuite/study/server/dto/UserProfileInfos.java index 1f97b1fcc8..fbad4869a5 100644 --- a/src/main/java/org/gridsuite/study/server/dto/UserProfileInfos.java +++ b/src/main/java/org/gridsuite/study/server/dto/UserProfileInfos.java @@ -32,7 +32,7 @@ public class UserProfileInfos { private UUID shortcircuitParameterId; - private UUID pccminParameterId; + private UUID pccMinParameterId; // note: this parameter is not managed by user-admin-server yet private UUID dynamicSecurityAnalysisParameterId; diff --git a/src/main/java/org/gridsuite/study/server/service/ConsumerService.java b/src/main/java/org/gridsuite/study/server/service/ConsumerService.java index b1f83b0311..45c25911df 100644 --- a/src/main/java/org/gridsuite/study/server/service/ConsumerService.java +++ b/src/main/java/org/gridsuite/study/server/service/ConsumerService.java @@ -459,14 +459,14 @@ private UUID createDefaultStateEstimationParameters() { } private UUID createDefaultPccMinParameters(String userId, UserProfileInfos userProfileInfos) { - if (userProfileInfos != null && userProfileInfos.getPccminParameterId() != null) { + if (userProfileInfos != null && userProfileInfos.getPccMinParameterId() != null) { // try to access/duplicate the user profile pccmin parameters try { - return pccMinService.duplicatePccMinParameters(userProfileInfos.getPccminParameterId()); + return pccMinService.duplicatePccMinParameters(userProfileInfos.getPccMinParameterId()); } catch (Exception e) { // TODO try to report a log in Root subreporter ? LOGGER.error(String.format("Could not duplicate pccmin parameters with id '%s' from user/profile '%s/%s'. Using default parameters", - userProfileInfos.getPccminParameterId(), userId, userProfileInfos.getName()), e); + userProfileInfos.getPccMinParameterId(), userId, userProfileInfos.getName()), e); } } // no profile, or no/bad pcc min parameters in profile => use default values 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 8dd7ea48a8..e493620e7d 100644 --- a/src/main/java/org/gridsuite/study/server/service/StudyService.java +++ b/src/main/java/org/gridsuite/study/server/service/StudyService.java @@ -3513,17 +3513,17 @@ public boolean createOrUpdatePccMinParameters(StudyEntity studyEntity, String pa boolean userProfileIssue = false; UserProfileInfos userProfileInfos = parameters == null ? userAdminService.getUserProfile(userId) : null; - if (parameters == null && userProfileInfos.getPccminParameterId() != null) { + if (parameters == null && userProfileInfos.getPccMinParameterId() != null) { // reset case, with existing profile, having default pcc min params try { - UUID pccMinParametersFromProfileUuid = pccMinService.duplicatePccMinParameters(userProfileInfos.getPccminParameterId()); + UUID pccMinParametersFromProfileUuid = pccMinService.duplicatePccMinParameters(userProfileInfos.getPccMinParameterId()); studyEntity.setPccMinParametersUuid(pccMinParametersFromProfileUuid); removePccMinParameters(existingPccMinParametersUuid); return userProfileIssue; } catch (Exception e) { userProfileIssue = true; LOGGER.error(String.format("Could not duplicate pcc min parameters with id '%s' from user/profile '%s/%s'. Using default parameters", - userProfileInfos.getPccminParameterId(), userId, userProfileInfos.getName()), e); + userProfileInfos.getPccMinParameterId(), userId, userProfileInfos.getName()), e); // in case of duplication error (ex: wrong/dangling uuid in the profile), move on with default params below } } From 775dfbd72997d5869366b3a615bfb01ca141bb1f Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Thu, 29 Jan 2026 16:16:42 +0100 Subject: [PATCH 5/6] TU fixex Signed-off-by: SOUISSI Maissa (Externe) --- .../gridsuite/study/server/PccMinTest.java | 146 +++++++----------- 1 file changed, 52 insertions(+), 94 deletions(-) diff --git a/src/test/java/org/gridsuite/study/server/PccMinTest.java b/src/test/java/org/gridsuite/study/server/PccMinTest.java index cfabf6a218..0b19390082 100644 --- a/src/test/java/org/gridsuite/study/server/PccMinTest.java +++ b/src/test/java/org/gridsuite/study/server/PccMinTest.java @@ -60,6 +60,7 @@ import static org.gridsuite.study.server.StudyConstants.*; import static org.gridsuite.study.server.notification.NotificationService.*; +import static org.gridsuite.study.server.utils.TestUtils.USER_DEFAULT_PROFILE_JSON; import static org.junit.jupiter.api.Assertions.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -331,100 +332,6 @@ void testFailure() throws Exception { wireMockStubs.verifyPccMinFail(stubFail, NETWORK_UUID_STRING, VARIANT_ID_2); } - @Test - void testResetPccMinParametersUserHasValidParamsInProfileButNoExistingPccMinParams() throws Exception { - StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, null); - UUID studyUuid = studyEntity.getId(); - - userAdminServerStubs.stubGetUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_VALID_PARAMS_JSON); - wireMockServer.stubFor(post(urlPathEqualTo("/v1/parameters")) - .withQueryParam("duplicateFrom", equalTo(PROFILE_PCC_MIN_VALID_PARAMETERS_UUID_STRING)) - .willReturn(WireMock.ok() - .withBody(DUPLICATED_PARAMS_JSON) - .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - )); - - createOrUpdateParametersAndDoChecks(studyUuid, "", VALID_PARAMS_IN_PROFILE_USER_ID, HttpStatus.OK); - - userAdminServerStubs.verifyGetUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID); - wireMockServer.verify(postRequestedFor(urlPathEqualTo("/v1/parameters")) - .withQueryParam("duplicateFrom", equalTo(PROFILE_PCC_MIN_VALID_PARAMETERS_UUID_STRING)) - ); - } - - @Test - void testResetPccMinParametersUserHasNoProfile() throws Exception { - StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), UUID.randomUUID(), PCC_MIN_PARAMETERS_UUID); - UUID studyNameUserIdUuid = studyEntity.getId(); - userAdminServerStubs.stubGetUserProfile(NO_PROFILE_USER_ID, USER_PROFILE_NO_PARAMS_JSON); - computationServerStubs.stubParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING, PCC_MIN_PROFILE_PARAMETERS_JSON); - createOrUpdateParametersAndDoChecks(studyNameUserIdUuid, "", NO_PROFILE_USER_ID, HttpStatus.OK); - computationServerStubs.verifyParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING); - } - - @Test - void testResetPccMinParametersUserHasNoParamsInProfile() throws Exception { - StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, PCC_MIN_PARAMETERS_UUID); - UUID studyUuid = studyEntity.getId(); - - userAdminServerStubs.stubGetUserProfile(NO_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_NO_PARAMS_JSON); - computationServerStubs.stubParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING, PCC_MIN_PROFILE_PARAMETERS_JSON); - createOrUpdateParametersAndDoChecks(studyUuid, "", NO_PARAMS_IN_PROFILE_USER_ID, HttpStatus.OK); - - userAdminServerStubs.verifyGetUserProfile(NO_PARAMS_IN_PROFILE_USER_ID); - computationServerStubs.verifyParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING); - } - - @Test - void testResetPccMinParametersUserHasInvalidParamsInProfile() throws Exception { - StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, PCC_MIN_PARAMETERS_UUID); - UUID studyUuid = studyEntity.getId(); - - userAdminServerStubs.stubGetUserProfile(INVALID_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_INVALID_PARAMS_JSON); - computationServerStubs.stubParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING, PCC_MIN_PROFILE_PARAMETERS_JSON); - computationServerStubs.stubParametersDuplicateFromNotFound(PROFILE_PCC_MIN_INVALID_PARAMETERS_UUID_STRING); - createOrUpdateParametersAndDoChecks(studyUuid, "", INVALID_PARAMS_IN_PROFILE_USER_ID, HttpStatus.NO_CONTENT); - - // --- Verify WireMock requests --- - userAdminServerStubs.verifyGetUserProfile(INVALID_PARAMS_IN_PROFILE_USER_ID); - computationServerStubs.verifyParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING); - computationServerStubs.verifyParametersDuplicateFrom(PROFILE_PCC_MIN_INVALID_PARAMETERS_UUID_STRING); - } - - @Test - void testResetPccMinParametersUserHasValidParamsInProfile() throws Exception { - StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, PCC_MIN_PARAMETERS_UUID); - UUID studyUuid = studyEntity.getId(); - UUID rootNodeUuid = getRootNode(studyUuid).getId(); - UUID firstRootNetworkUuid = studyTestUtils.getOneRootNetworkUuid(studyUuid); - NetworkModificationNode modificationNode1 = createNetworkModificationNode(studyUuid, rootNodeUuid, UUID.randomUUID(), VARIANT_ID, "node 1"); - wireMockServer.stubFor(post(urlPathMatching("/v1/networks/" + NETWORK_UUID_STRING + "/run-and-save.*")) - .willReturn(ok())); - userAdminServerStubs.stubGetUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID, USER_PROFILE_VALID_PARAMS_JSON); - computationServerStubs.stubParameterPut(wireMockServer, PCC_MIN_PARAMETERS_UUID_STRING, PCC_MIN_PROFILE_PARAMETERS_JSON); - computationServerStubs.stubParametersDuplicateFrom(PROFILE_PCC_MIN_VALID_PARAMETERS_UUID_STRING, DUPLICATED_PARAMS_JSON); - wireMockServer.stubFor(put(urlPathMatching("/v1/results/invalidate-status.*")) - .withQueryParam("resultUuid", matching(".*")) - .willReturn(ok())); - computationServerStubs.stubComputationRun(NETWORK_UUID_STRING, null, PCC_MIN_RESULT_UUID); - mockMvc.perform(post(PCC_MIN_URL_BASE + "run", studyUuid, firstRootNetworkUuid, modificationNode1.getId()) - .contentType(MediaType.APPLICATION_JSON) - .header("userId", "userId")) - .andExpect(status().isOk()); - - Message message = output.receive(TIMEOUT, STUDY_UPDATE_DESTINATION); - assertEquals(UPDATE_TYPE_PCC_MIN_STATUS, message.getHeaders().get(HEADER_UPDATE_TYPE)); - - createOrUpdateParametersAndDoChecks(studyUuid, "", VALID_PARAMS_IN_PROFILE_USER_ID, HttpStatus.OK); - userAdminServerStubs.verifyGetUserProfile(VALID_PARAMS_IN_PROFILE_USER_ID); - computationServerStubs.verifyComputationRun(NETWORK_UUID_STRING, Map.of("reportUuid", WireMock.matching(".*"))); - computationServerStubs.verifyParametersDuplicateFrom(PROFILE_PCC_MIN_VALID_PARAMETERS_UUID_STRING); - List invalidateCalls = wireMockServer.getAllServeEvents().stream() - .filter(e -> e.getRequest().getUrl().startsWith("/v1/results/invalidate-status")) - .toList(); - assertTrue(invalidateCalls.size() <= 1); - } - @Test void testResultsDeletion() throws Exception { StudyNodeIds ids = createStudyAndNode(VARIANT_ID, "node 1", PCCMIN_PARAMETERS_UUID); @@ -686,4 +593,55 @@ void testExportPccMinResults() throws Exception { assertThrows(StudyException.class, () -> pccMinService.exportPccMinResultsAsCsv(null, "", null, null, Sort.unsorted(), null, null)); } + + private void testMessages(UUID studyNameUserIdUuid) { + Message message = output.receive(TIMEOUT, STUDY_UPDATE_DESTINATION); + assertEquals(studyNameUserIdUuid, message.getHeaders().get(NotificationService.HEADER_STUDY_UUID)); + assertEquals(NotificationService.UPDATE_TYPE_PCC_MIN_STATUS, message.getHeaders().get(NotificationService.HEADER_UPDATE_TYPE)); + message = output.receive(TIMEOUT, ELEMENT_UPDATE_DESTINATION); + assertEquals(studyNameUserIdUuid, message.getHeaders().get(NotificationService.HEADER_ELEMENT_UUID)); + message = output.receive(TIMEOUT, STUDY_UPDATE_DESTINATION); + assertEquals(UPDATE_TYPE_COMPUTATION_PARAMETERS, message.getHeaders().get(NotificationService.HEADER_UPDATE_TYPE)); + } + + private void updateParametersAndDoChecks(UUID studyNameUserIdUuid, String parameters, String loadflowParametersUuid, String userId, HttpStatusCode status, String returnedUserProfileJson, boolean shouldDuplicate, String duplicateFromUuid, boolean duplicateIsNotFound) throws Exception { + wireMockStubs.loadflowServer.stubPutLoadflowParameters(loadflowParametersUuid, parameters); + UUID duplicatedLoadflowParametersUuid = UUID.randomUUID(); + if (parameters == null || parameters.isEmpty()) { + wireMockStubs.userAdminServer.stubGetUserProfile(userId, returnedUserProfileJson); + } + if (shouldDuplicate) { + wireMockStubs.loadflowServer.stubDuplicateLoadflowParameters(duplicateFromUuid, objectMapper.writeValueAsString(duplicatedLoadflowParametersUuid), duplicateIsNotFound); + } + mockMvc.perform( + post("/v1/studies/{studyUuid}/pcc-min/parameters", studyNameUserIdUuid) + .header("userId", userId) + .contentType(MediaType.ALL) + .content(parameters == null ? "" : parameters)) + .andExpect(status().is(status.value())); + wireMockStubs.loadflowServer.verifyPutLoadflowParameters(loadflowParametersUuid, parameters); + if (parameters == null || parameters.isEmpty()) { + wireMockStubs.userAdminServer.verifyGetUserProfile(userId); + } + if (shouldDuplicate) { + wireMockStubs.loadflowServer.verifyDuplicateLoadflowParameters(duplicateFromUuid); + } + testMessages(studyNameUserIdUuid); + } + + + @Test + void testResetPccMinParametersUserHasNoProfile() throws Exception { + StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, PCC_MIN_PARAMETERS_UUID); + UUID studyNameUserIdUuid = studyEntity.getId(); + updateParametersAndDoChecks(studyNameUserIdUuid, "", PCC_MIN_PARAMETERS_UUID_STRING, NO_PROFILE_USER_ID, HttpStatus.OK, USER_DEFAULT_PROFILE_JSON, false, null, false); + } + + @Test + void testResetPccMinParametersUserHasNoParamsInProfile() throws Exception { + StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, PCC_MIN_PARAMETERS_UUID); + UUID studyNameUserIdUuid = studyEntity.getId(); + updateParametersAndDoChecks(studyNameUserIdUuid, "", PCC_MIN_PARAMETERS_UUID_STRING, NO_PARAMS_IN_PROFILE_USER_ID, HttpStatus.OK, USER_PROFILE_NO_PARAMS_JSON, false, null, false); + } } + From b40d1475d0feb36e1e9a3150e321d9632bdf464b Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Thu, 29 Jan 2026 16:22:13 +0100 Subject: [PATCH 6/6] prettierss Signed-off-by: SOUISSI Maissa (Externe) --- .../java/org/gridsuite/study/server/PccMinTest.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/test/java/org/gridsuite/study/server/PccMinTest.java b/src/test/java/org/gridsuite/study/server/PccMinTest.java index 0b19390082..f34c396a30 100644 --- a/src/test/java/org/gridsuite/study/server/PccMinTest.java +++ b/src/test/java/org/gridsuite/study/server/PccMinTest.java @@ -10,7 +10,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.tomakehurst.wiremock.client.WireMock; -import com.github.tomakehurst.wiremock.stubbing.ServeEvent; import lombok.AllArgsConstructor; import org.gridsuite.study.server.dto.ComputationType; import org.gridsuite.study.server.dto.NodeReceiver; @@ -604,8 +603,8 @@ private void testMessages(UUID studyNameUserIdUuid) { assertEquals(UPDATE_TYPE_COMPUTATION_PARAMETERS, message.getHeaders().get(NotificationService.HEADER_UPDATE_TYPE)); } - private void updateParametersAndDoChecks(UUID studyNameUserIdUuid, String parameters, String loadflowParametersUuid, String userId, HttpStatusCode status, String returnedUserProfileJson, boolean shouldDuplicate, String duplicateFromUuid, boolean duplicateIsNotFound) throws Exception { - wireMockStubs.loadflowServer.stubPutLoadflowParameters(loadflowParametersUuid, parameters); + private void updateParametersAndDoChecks(UUID studyNameUserIdUuid, String parameters, String userId, HttpStatusCode status, String returnedUserProfileJson, boolean shouldDuplicate, String duplicateFromUuid, boolean duplicateIsNotFound) throws Exception { + wireMockStubs.loadflowServer.stubPutLoadflowParameters(PccMinTest.PCC_MIN_PARAMETERS_UUID_STRING, parameters); UUID duplicatedLoadflowParametersUuid = UUID.randomUUID(); if (parameters == null || parameters.isEmpty()) { wireMockStubs.userAdminServer.stubGetUserProfile(userId, returnedUserProfileJson); @@ -619,7 +618,7 @@ private void updateParametersAndDoChecks(UUID studyNameUserIdUuid, String parame .contentType(MediaType.ALL) .content(parameters == null ? "" : parameters)) .andExpect(status().is(status.value())); - wireMockStubs.loadflowServer.verifyPutLoadflowParameters(loadflowParametersUuid, parameters); + wireMockStubs.loadflowServer.verifyPutLoadflowParameters(PccMinTest.PCC_MIN_PARAMETERS_UUID_STRING, parameters); if (parameters == null || parameters.isEmpty()) { wireMockStubs.userAdminServer.verifyGetUserProfile(userId); } @@ -629,19 +628,18 @@ private void updateParametersAndDoChecks(UUID studyNameUserIdUuid, String parame testMessages(studyNameUserIdUuid); } - @Test void testResetPccMinParametersUserHasNoProfile() throws Exception { StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, PCC_MIN_PARAMETERS_UUID); UUID studyNameUserIdUuid = studyEntity.getId(); - updateParametersAndDoChecks(studyNameUserIdUuid, "", PCC_MIN_PARAMETERS_UUID_STRING, NO_PROFILE_USER_ID, HttpStatus.OK, USER_DEFAULT_PROFILE_JSON, false, null, false); + updateParametersAndDoChecks(studyNameUserIdUuid, "", NO_PROFILE_USER_ID, HttpStatus.OK, USER_DEFAULT_PROFILE_JSON, false, null, false); } @Test void testResetPccMinParametersUserHasNoParamsInProfile() throws Exception { StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID, PCC_MIN_PARAMETERS_UUID); UUID studyNameUserIdUuid = studyEntity.getId(); - updateParametersAndDoChecks(studyNameUserIdUuid, "", PCC_MIN_PARAMETERS_UUID_STRING, NO_PARAMS_IN_PROFILE_USER_ID, HttpStatus.OK, USER_PROFILE_NO_PARAMS_JSON, false, null, false); + updateParametersAndDoChecks(studyNameUserIdUuid, "", NO_PARAMS_IN_PROFILE_USER_ID, HttpStatus.OK, USER_PROFILE_NO_PARAMS_JSON, false, null, false); } }