diff --git a/src/main/java/org/gridsuite/useradmin/server/dto/UserProfile.java b/src/main/java/org/gridsuite/useradmin/server/dto/UserProfile.java index f4eec39..41b652b 100644 --- a/src/main/java/org/gridsuite/useradmin/server/dto/UserProfile.java +++ b/src/main/java/org/gridsuite/useradmin/server/dto/UserProfile.java @@ -15,6 +15,7 @@ public record UserProfile( UUID securityAnalysisParameterId, UUID sensitivityAnalysisParameterId, UUID shortcircuitParameterId, + UUID pccMinParameterId, UUID voltageInitParameterId, Boolean allLinksValid, Integer maxAllowedCases, @@ -35,6 +36,7 @@ public static UserProfile createDefaultProfile(Integer maxAllowedCases, Integer null, null, null, + null, maxAllowedCases, maxAllowedBuilds, null, diff --git a/src/main/java/org/gridsuite/useradmin/server/entity/UserProfileEntity.java b/src/main/java/org/gridsuite/useradmin/server/entity/UserProfileEntity.java index e597b32..3575b90 100644 --- a/src/main/java/org/gridsuite/useradmin/server/entity/UserProfileEntity.java +++ b/src/main/java/org/gridsuite/useradmin/server/entity/UserProfileEntity.java @@ -44,6 +44,9 @@ public class UserProfileEntity { @Column(name = "shortcircuitParameterId") private UUID shortcircuitParameterId; + @Column(name = "pccMinParameterId") + private UUID pccminParameterId; + @Column(name = "voltageInitParameterId") private UUID voltageInitParameterId; diff --git a/src/main/java/org/gridsuite/useradmin/server/service/UserProfileService.java b/src/main/java/org/gridsuite/useradmin/server/service/UserProfileService.java index 9cf1b53..bea1aa5 100644 --- a/src/main/java/org/gridsuite/useradmin/server/service/UserProfileService.java +++ b/src/main/java/org/gridsuite/useradmin/server/service/UserProfileService.java @@ -62,6 +62,7 @@ public List getProfiles(String userId, boolean checkLinksValidity) e.getSecurityAnalysisParameterId(), e.getSensitivityAnalysisParameterId(), e.getShortcircuitParameterId(), + e.getPccminParameterId(), e.getVoltageInitParameterId(), e.getSpreadsheetConfigCollectionId(), e.getNetworkVisualizationParameterId(), @@ -88,6 +89,9 @@ public List getProfiles(String userId, boolean checkLinksValidity) if (BooleanUtils.toBooleanDefaultIfNull(allLinksValid, true) && p.getShortcircuitParameterId() != null) { allLinksValid = !missingUuids.contains(p.getShortcircuitParameterId()); } + if (BooleanUtils.toBooleanDefaultIfNull(allLinksValid, true) && p.getPccminParameterId() != null) { + allLinksValid = !missingUuids.contains(p.getPccminParameterId()); + } if (BooleanUtils.toBooleanDefaultIfNull(allLinksValid, true) && p.getVoltageInitParameterId() != null) { allLinksValid = !missingUuids.contains(p.getVoltageInitParameterId()); } @@ -121,6 +125,7 @@ public void updateProfile(UUID profileUuid, UserProfile userProfile) { profile.setSecurityAnalysisParameterId(userProfile.securityAnalysisParameterId()); profile.setSensitivityAnalysisParameterId(userProfile.sensitivityAnalysisParameterId()); profile.setShortcircuitParameterId(userProfile.shortcircuitParameterId()); + profile.setPccminParameterId(userProfile.pccMinParameterId()); profile.setVoltageInitParameterId(userProfile.voltageInitParameterId()); profile.setMaxAllowedCases(userProfile.maxAllowedCases()); profile.setMaxAllowedBuilds(userProfile.maxAllowedBuilds()); @@ -159,7 +164,7 @@ private UserProfile toDto(final UserProfileEntity entity, Boolean allLinksValid) } return new UserProfile(entity.getId(), entity.getName(), entity.getLoadFlowParameterId(), entity.getSecurityAnalysisParameterId(), entity.getSensitivityAnalysisParameterId(), - entity.getShortcircuitParameterId(), entity.getVoltageInitParameterId(), + entity.getShortcircuitParameterId(), entity.getPccminParameterId(), entity.getVoltageInitParameterId(), allLinksValid, entity.getMaxAllowedCases(), entity.getMaxAllowedBuilds(), entity.getSpreadsheetConfigCollectionId(), entity.getNetworkVisualizationParameterId(), entity.getWorkspaceId()); } @@ -173,6 +178,7 @@ private UserProfileEntity toEntity(final UserProfile userProfile) { userProfile.securityAnalysisParameterId(), userProfile.sensitivityAnalysisParameterId(), userProfile.shortcircuitParameterId(), + userProfile.pccMinParameterId(), userProfile.voltageInitParameterId(), Optional.ofNullable(userProfile.maxAllowedCases()).orElse(applicationProps.getDefaultMaxAllowedCases()), Optional.ofNullable(userProfile.maxAllowedBuilds()).orElse(applicationProps.getDefaultMaxAllowedBuilds()), diff --git a/src/main/resources/db/changelog/changesets/changelog_20260122T142750Z.xml b/src/main/resources/db/changelog/changesets/changelog_20260122T142750Z.xml new file mode 100644 index 0000000..828d820 --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20260122T142750Z.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index 628cbc1..02f815c 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -38,6 +38,9 @@ databaseChangeLog: - include: file: changesets/changelog_20251031T110224Z.xml relativeToChangelogFile: true + - include: + file: changesets/changelog_20260122T142750Z.xml + relativeToChangelogFile: true - include: file: changesets/changelog_20260122T160112Z.xml relativeToChangelogFile: true diff --git a/src/test/java/org/gridsuite/useradmin/server/DtoConverterTest.java b/src/test/java/org/gridsuite/useradmin/server/DtoConverterTest.java index 31cdb41..3c0d59c 100644 --- a/src/test/java/org/gridsuite/useradmin/server/DtoConverterTest.java +++ b/src/test/java/org/gridsuite/useradmin/server/DtoConverterTest.java @@ -27,7 +27,7 @@ void testConversionToDtoOfUserInfos() { .isEqualTo(new UserInfos("sub_user", null, null, null, null, null, null, null)); // with profile but without group - UserProfileEntity profile = new UserProfileEntity(UUID.randomUUID(), "a profile", null, null, null, null, null, 5, 6, null, null, null); + UserProfileEntity profile = new UserProfileEntity(UUID.randomUUID(), "a profile", null, null, null, null, null, null, 5, 6, null, null, null); // Test mapping without quota assertThat(UserInfosEntity.toDto(new UserInfosEntity(uuid, "sub_user", profile, null))) .as("dto result") diff --git a/src/test/java/org/gridsuite/useradmin/server/NoQuotaTest.java b/src/test/java/org/gridsuite/useradmin/server/NoQuotaTest.java index 888ed67..3fe2966 100644 --- a/src/test/java/org/gridsuite/useradmin/server/NoQuotaTest.java +++ b/src/test/java/org/gridsuite/useradmin/server/NoQuotaTest.java @@ -110,7 +110,7 @@ void testUserCreationWithProfile() throws Exception { } private void createProfile(String profileName, Integer maxAllowedCases, Integer maxAllowedBuilds) throws Exception { - UserProfile profileInfo = new UserProfile(null, profileName, null, null, null, null, null, false, maxAllowedCases, maxAllowedBuilds, null, null, null); + UserProfile profileInfo = new UserProfile(null, profileName, null, null, null, null, null, null, false, maxAllowedCases, maxAllowedBuilds, null, null, null); performPost(API_BASE_PATH + "/profiles", profileInfo); Optional createdProfile = userProfileRepository.findByName(profileName); @@ -119,6 +119,7 @@ private void createProfile(String profileName, Integer maxAllowedCases, Integer assertNull(createdProfile.get().getSecurityAnalysisParameterId()); assertNull(createdProfile.get().getSensitivityAnalysisParameterId()); assertNull(createdProfile.get().getShortcircuitParameterId()); + assertNull(createdProfile.get().getPccminParameterId()); assertNull(createdProfile.get().getVoltageInitParameterId()); assertEquals(maxAllowedCases, createdProfile.get().getMaxAllowedCases()); assertEquals(maxAllowedBuilds, createdProfile.get().getMaxAllowedBuilds()); diff --git a/src/test/java/org/gridsuite/useradmin/server/UserAdminTest.java b/src/test/java/org/gridsuite/useradmin/server/UserAdminTest.java index 3cc484d..2769775 100644 --- a/src/test/java/org/gridsuite/useradmin/server/UserAdminTest.java +++ b/src/test/java/org/gridsuite/useradmin/server/UserAdminTest.java @@ -264,6 +264,7 @@ void testGetUserProfileNotFound() throws Exception { assertNull(profile.securityAnalysisParameterId()); assertNull(profile.sensitivityAnalysisParameterId()); assertNull(profile.shortcircuitParameterId()); + assertNull(profile.pccMinParameterId()); assertNull(profile.voltageInitParameterId()); assertNull(profile.allLinksValid()); assertNull(profile.spreadsheetConfigCollectionId()); @@ -367,7 +368,7 @@ private void createUser(String userName) throws Exception { private void createProfile(String profileName) throws Exception { ObjectWriter objectWriter = objectMapper.writer().withDefaultPrettyPrinter(); - UserProfile profileInfo = new UserProfile(null, profileName, null, null, null, null, null, false, null, null, null, null, null); + UserProfile profileInfo = new UserProfile(null, profileName, null, null, null, null, null, null, false, null, null, null, null, null); mockMvc.perform(post("/" + UserAdminApi.API_VERSION + "/profiles") .content(objectWriter.writeValueAsString(profileInfo)) .contentType(MediaType.APPLICATION_JSON) diff --git a/src/test/java/org/gridsuite/useradmin/server/UserProfileTest.java b/src/test/java/org/gridsuite/useradmin/server/UserProfileTest.java index b311216..ba9ec3b 100644 --- a/src/test/java/org/gridsuite/useradmin/server/UserProfileTest.java +++ b/src/test/java/org/gridsuite/useradmin/server/UserProfileTest.java @@ -118,6 +118,7 @@ void testCreateProfile() throws Exception { assertNull(userProfiles.get(0).securityAnalysisParameterId()); assertNull(userProfiles.get(0).sensitivityAnalysisParameterId()); assertNull(userProfiles.get(0).shortcircuitParameterId()); + assertNull(userProfiles.getFirst().pccMinParameterId()); assertNull(userProfiles.get(0).voltageInitParameterId()); assertNull(userProfiles.get(0).allLinksValid()); assertEquals(10, userProfiles.get(0).maxAllowedCases()); @@ -154,7 +155,7 @@ void testDeleteProfileNotFound() throws Exception { @Test void testProfileUpdateNotFound() throws Exception { - updateProfile(new UserProfile(UUID.randomUUID(), PROFILE_2, null, null, null, null, null, null, null, null, null, null, null), + updateProfile(new UserProfile(UUID.randomUUID(), PROFILE_2, null, null, null, null, null, null, null, null, null, null, null, null), ADMIN_USER, USER_ADMIN_ROLE, HttpStatus.NOT_FOUND); @@ -162,7 +163,7 @@ void testProfileUpdateNotFound() throws Exception { @Test void testProfileUpdateForbidden() throws Exception { - updateProfile(new UserProfile(UUID.randomUUID(), PROFILE_2, null, null, null, null, null, null, null, null, null, null, null), + updateProfile(new UserProfile(UUID.randomUUID(), PROFILE_2, null, null, null, null, null, null, null, null, null, null, null, null), NOT_ADMIN, "USER", HttpStatus.FORBIDDEN); @@ -180,7 +181,7 @@ void testProfileUpdateValidityKo() throws Exception { @Test void testGetProfileMaxAllowedCases() throws Exception { - UserProfileEntity userProfileEntity = new UserProfileEntity(UUID.randomUUID(), "profileName", null, null, null, null, null, 15, null, null, null, null); + UserProfileEntity userProfileEntity = new UserProfileEntity(UUID.randomUUID(), "profileName", null, null, null, null, null, null, 15, null, null, null, null); UserInfosEntity userInfosEntity = new UserInfosEntity(UUID.randomUUID(), ADMIN_USER, userProfileEntity, null); userProfileRepository.save(userProfileEntity); userInfosRepository.save(userInfosEntity); @@ -196,7 +197,7 @@ void testGetProfileMaxAllowedCases() throws Exception { @Test void testGetProfileMaxAllowedBuilds() throws Exception { - UserProfileEntity userProfileEntity = new UserProfileEntity(UUID.randomUUID(), "profileName", null, null, null, null, null, null, 15, null, null, null); + UserProfileEntity userProfileEntity = new UserProfileEntity(UUID.randomUUID(), "profileName", null, null, null, null, null, null, null, 15, null, null, null); UserInfosEntity userInfosEntity = new UserInfosEntity(UUID.randomUUID(), ADMIN_USER, userProfileEntity, null); userProfileRepository.save(userProfileEntity); userInfosRepository.save(userInfosEntity); @@ -245,12 +246,13 @@ private void updateProfile(boolean validParameters) throws Exception { UUID securityAnalysisParametersUuid = UUID.fromString("22222222-9594-4e55-8ec7-07ea965d24eb"); UUID sensitivityAnalysisParametersUuid = UUID.fromString("33333333-9594-4e55-8ec7-07ea965d24eb"); UUID shortcircuitParametersUuid = UUID.fromString("44444444-9594-4e55-8ec7-07ea965d24eb"); - UUID voltageInitParametersUuid = UUID.fromString("55555555-9594-4e55-8ec7-07ea965d24eb"); - UUID spreadsheetConfigCollectionUuid = UUID.fromString("66666666-9594-4e55-8ec7-07ea965d24eb"); - UUID networkVisualizationParametersUuid = UUID.fromString("77777777-9594-4e55-8ec7-07ea965d24eb"); - UUID diagramConfigUuid = UUID.fromString("88888888-9594-4e55-8ec7-07ea965d24eb"); + UUID pccminParametersUuid = UUID.fromString("55555555-9594-4e55-8ec7-07ea965d24eb"); + UUID voltageInitParametersUuid = UUID.fromString("66666666-9594-4e55-8ec7-07ea965d24eb"); + UUID spreadsheetConfigCollectionUuid = UUID.fromString("77777777-9594-4e55-8ec7-07ea965d24eb"); + UUID networkVisualizationParametersUuid = UUID.fromString("88888888-9594-4e55-8ec7-07ea965d24eb"); + UUID diagramConfigUuid = UUID.fromString("9999999-9594-4e55-8ec7-07ea965d24eb"); List elementsUuids = List.of(loadFlowParametersUuid, securityAnalysisParametersUuid, - sensitivityAnalysisParametersUuid, shortcircuitParametersUuid, voltageInitParametersUuid, spreadsheetConfigCollectionUuid, networkVisualizationParametersUuid, diagramConfigUuid); + sensitivityAnalysisParametersUuid, shortcircuitParametersUuid, pccminParametersUuid, voltageInitParametersUuid, spreadsheetConfigCollectionUuid, networkVisualizationParametersUuid, diagramConfigUuid); // stub for parameters and spreadsheet config collection elements existence check final String urlPath = "/v1/elements"; @@ -259,6 +261,7 @@ private void updateProfile(boolean validParameters) throws Exception { new ElementAttributes(securityAnalysisParametersUuid, "securityAnalysisParams", "SECURITY_ANALYSIS_PARAMETERS"), new ElementAttributes(sensitivityAnalysisParametersUuid, "sensitivityAnalysisParams", "SENSITIVITY_PARAMETERS"), new ElementAttributes(shortcircuitParametersUuid, "shortcircuitParams", "SHORT_CIRCUIT_PARAMETERS"), + new ElementAttributes(pccminParametersUuid, "pccminParams", "PCC_MIN_PARAMETERS"), new ElementAttributes(voltageInitParametersUuid, "voltageInitParams", "VOLTAGE_INIT_PARAMETERS"), new ElementAttributes(spreadsheetConfigCollectionUuid, "spreadsheetConfigCollection", "SPREADSHEET_CONFIG_COLLECTION"), new ElementAttributes(networkVisualizationParametersUuid, "networkVisualizationParams", "NETWORK_VISUALIZATION_PARAMETERS"), @@ -273,7 +276,7 @@ private void updateProfile(boolean validParameters) throws Exception { // udpate the profile: change name and set its parameters, maxAllowedCases, maxAllowedBuilds and spreadsheet config collection UserProfile userProfile = new UserProfile(profileUuid, PROFILE_2, loadFlowParametersUuid, securityAnalysisParametersUuid, - sensitivityAnalysisParametersUuid, shortcircuitParametersUuid, voltageInitParametersUuid, null, 10, 11, spreadsheetConfigCollectionUuid, networkVisualizationParametersUuid, diagramConfigUuid); + sensitivityAnalysisParametersUuid, shortcircuitParametersUuid, pccminParametersUuid, voltageInitParametersUuid, null, 10, 11, spreadsheetConfigCollectionUuid, networkVisualizationParametersUuid, diagramConfigUuid); updateProfile(userProfile, ADMIN_USER, USER_ADMIN_ROLE, HttpStatus.OK); // profiles list (with validity flag) @@ -284,6 +287,7 @@ private void updateProfile(boolean validParameters) throws Exception { assertEquals(securityAnalysisParametersUuid, userProfiles.get(0).securityAnalysisParameterId()); assertEquals(sensitivityAnalysisParametersUuid, userProfiles.get(0).sensitivityAnalysisParameterId()); assertEquals(shortcircuitParametersUuid, userProfiles.get(0).shortcircuitParameterId()); + assertEquals(pccminParametersUuid, userProfiles.get(0).pccMinParameterId()); assertEquals(voltageInitParametersUuid, userProfiles.get(0).voltageInitParameterId()); assertEquals(validParameters, userProfiles.get(0).allLinksValid()); assertEquals(10, userProfiles.get(0).maxAllowedCases()); @@ -302,7 +306,7 @@ private static Map handleQueryParams(List para } private UUID createProfile(String profileName, String userName, String userRole, Integer maxAllowedCases, Integer maxAllowedBuilds, HttpStatusCode status) throws Exception { - UserProfile profileInfo = new UserProfile(null, profileName, null, null, null, null, null, false, maxAllowedCases, maxAllowedBuilds, null, null, null); + UserProfile profileInfo = new UserProfile(null, profileName, null, null, null, null, null, null, false, maxAllowedCases, maxAllowedBuilds, null, null, null); mockMvc.perform(post("/" + UserAdminApi.API_VERSION + "/profiles") .content(objectWriter.writeValueAsString(profileInfo)) .contentType(MediaType.APPLICATION_JSON) @@ -327,6 +331,7 @@ private UUID createProfile(String profileName, String userName, String userRole, assertNull(profile1.get().getSecurityAnalysisParameterId()); // no security analysis params by dft assertNull(profile1.get().getSensitivityAnalysisParameterId()); // no sensitivity analysis params by dft assertNull(profile1.get().getShortcircuitParameterId()); // no shortcircuit params by dft + assertNull(profile1.get().getPccminParameterId()); // no pccmin params by dft assertNull(profile1.get().getVoltageInitParameterId()); // no voltage init params by dft assertNull(profile1.get().getSpreadsheetConfigCollectionId()); // no spreadsheet config collection by dft assertNull(profile1.get().getNetworkVisualizationParameterId()); // no network visualization params by dft @@ -381,6 +386,7 @@ private void updateProfile(UserProfile newData, String userName, String userRole assertEquals(newData.securityAnalysisParameterId(), updatedProfile.securityAnalysisParameterId()); assertEquals(newData.sensitivityAnalysisParameterId(), updatedProfile.sensitivityAnalysisParameterId()); assertEquals(newData.shortcircuitParameterId(), updatedProfile.shortcircuitParameterId()); + assertEquals(newData.pccMinParameterId(), updatedProfile.pccMinParameterId()); assertEquals(newData.voltageInitParameterId(), updatedProfile.voltageInitParameterId()); assertEquals(newData.maxAllowedCases(), updatedProfile.maxAllowedCases()); assertNull(updatedProfile.allLinksValid()); // validity not set in this case diff --git a/src/test/java/org/gridsuite/useradmin/server/controller/UserInfosControllerTest.java b/src/test/java/org/gridsuite/useradmin/server/controller/UserInfosControllerTest.java index 17ec248..4b68447 100644 --- a/src/test/java/org/gridsuite/useradmin/server/controller/UserInfosControllerTest.java +++ b/src/test/java/org/gridsuite/useradmin/server/controller/UserInfosControllerTest.java @@ -63,7 +63,7 @@ void cleanDB() { @Test void getUserDetail() throws Exception { // Create a profile - UserProfileEntity profileEntity = new UserProfileEntity(UUID.randomUUID(), PROFILE_A, null, null, null, null, null, 10, 20, null, null, null); + UserProfileEntity profileEntity = new UserProfileEntity(UUID.randomUUID(), PROFILE_A, null, null, null, null, null, null, 10, 20, null, null, null); userProfileRepository.save(profileEntity); // Create a user UserInfosEntity userInfosEntity = new UserInfosEntity(UUID.randomUUID(), USER_A, profileEntity, null); diff --git a/src/test/java/org/gridsuite/useradmin/server/service/UserInfosServiceTest.java b/src/test/java/org/gridsuite/useradmin/server/service/UserInfosServiceTest.java index bc08d7b..583cea0 100644 --- a/src/test/java/org/gridsuite/useradmin/server/service/UserInfosServiceTest.java +++ b/src/test/java/org/gridsuite/useradmin/server/service/UserInfosServiceTest.java @@ -50,7 +50,7 @@ void toDtoUserInfoTest() { // get number of cases used mock when(directoryServiceMock.getCasesCount("user_A")).thenReturn(3); // create user and profile - UserProfileEntity profile = new UserProfileEntity(UUID.randomUUID(), "profile_A", null, null, null, null, null, 5, 6, null, null, null); + UserProfileEntity profile = new UserProfileEntity(UUID.randomUUID(), "profile_A", null, null, null, null, null, null, 5, 6, null, null, null); UserInfosEntity user = new UserInfosEntity(UUID.randomUUID(), "user_A", profile, null); when(userInfosRepositoryMock.findBySub("user_A")).thenReturn(Optional.of(user));