Skip to content

Commit 111a9e4

Browse files
authored
new end-point to retrieve a user profile (#551)
Signed-off-by: David BRAQUART <[email protected]>
1 parent 11c4159 commit 111a9e4

File tree

3 files changed

+24
-31
lines changed

3 files changed

+24
-31
lines changed

src/main/java/org/gridsuite/study/server/service/UserAdminService.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,11 @@
1010
import org.gridsuite.study.server.RemoteServicesProperties;
1111
import org.gridsuite.study.server.dto.UserProfileInfos;
1212
import org.springframework.beans.factory.annotation.Autowired;
13-
import org.springframework.core.ParameterizedTypeReference;
14-
import org.springframework.http.HttpMethod;
1513
import org.springframework.stereotype.Service;
16-
import org.springframework.util.CollectionUtils;
1714
import org.springframework.web.client.HttpStatusCodeException;
1815
import org.springframework.web.client.RestTemplate;
1916
import org.springframework.web.util.UriComponentsBuilder;
2017

21-
import java.util.List;
22-
2318
import static org.gridsuite.study.server.StudyConstants.*;
2419
import static org.gridsuite.study.server.StudyException.Type.GET_USER_PROFILE_FAILED;
2520
import static org.gridsuite.study.server.utils.StudyUtils.handleHttpError;
@@ -29,7 +24,7 @@
2924
*/
3025
@Service
3126
public class UserAdminService {
32-
private static final String USER_PROFILES_URI = "/profiles?sub={sub}";
27+
private static final String USERS_PROFILE_URI = "/users/{sub}/profile";
3328
private final RestTemplate restTemplate;
3429
private String userAdminServerBaseUri;
3530

@@ -44,11 +39,10 @@ public void setUserAdminServerBaseUri(String serverBaseUri) {
4439
}
4540

4641
public UserProfileInfos getUserProfile(String sub) {
47-
String path = UriComponentsBuilder.fromPath(DELIMITER + USER_ADMIN_API_VERSION + USER_PROFILES_URI)
42+
String path = UriComponentsBuilder.fromPath(DELIMITER + USER_ADMIN_API_VERSION + USERS_PROFILE_URI)
4843
.buildAndExpand(sub).toUriString();
4944
try {
50-
List<UserProfileInfos> response = restTemplate.exchange(userAdminServerBaseUri + path, HttpMethod.GET, null, new ParameterizedTypeReference<List<UserProfileInfos>>() { }).getBody();
51-
return CollectionUtils.isEmpty(response) ? null : response.get(0);
45+
return restTemplate.getForObject(userAdminServerBaseUri + path, UserProfileInfos.class);
5246
} catch (HttpStatusCodeException e) {
5347
throw handleHttpError(e, GET_USER_PROFILE_FAILED);
5448
}

src/test/java/org/gridsuite/study/server/LoadFlowTest.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,9 @@ public class LoadFlowTest {
109109
private static final String NO_PARAMS_IN_PROFILE_USER_ID = "noParamInProfileUser";
110110
private static final String VALID_PARAMS_IN_PROFILE_USER_ID = "validParamInProfileUser";
111111
private static final String INVALID_PARAMS_IN_PROFILE_USER_ID = "invalidParamInProfileUser";
112-
private static final String USER_PROFILE_EMPTY_JSON = "[]";
113-
private static final String USER_PROFILE_NO_PARAMS_JSON = "[{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile No params\"}]";
114-
private static final String USER_PROFILE_VALID_PARAMS_JSON = "[{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile with valid params\",\"loadFlowParameterId\":\"" + PROFILE_LOADFLOW_VALID_PARAMETERS_UUID_STRING + "\",\"allParametersLinksValid\":true}]";
115-
private static final String USER_PROFILE_INVALID_PARAMS_JSON = "[{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile with broken params\",\"loadFlowParameterId\":\"" + PROFILE_LOADFLOW_INVALID_PARAMETERS_UUID_STRING + "\",\"allParametersLinksValid\":false}]";
112+
private static final String USER_PROFILE_NO_PARAMS_JSON = "{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile No params\"}";
113+
private static final String USER_PROFILE_VALID_PARAMS_JSON = "{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile with valid params\",\"loadFlowParameterId\":\"" + PROFILE_LOADFLOW_VALID_PARAMETERS_UUID_STRING + "\",\"allParametersLinksValid\":true}";
114+
private static final String USER_PROFILE_INVALID_PARAMS_JSON = "{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile with broken params\",\"loadFlowParameterId\":\"" + PROFILE_LOADFLOW_INVALID_PARAMETERS_UUID_STRING + "\",\"allParametersLinksValid\":false}";
116115
private static final String DUPLICATED_PARAMS_JSON = "\"" + PROFILE_LOADFLOW_DUPLICATED_PARAMETERS_UUID_STRING + "\"";
117116

118117
private static final UUID LOADFLOW_PARAMETERS_UUID = UUID.fromString(LOADFLOW_PARAMETERS_UUID_STRING);
@@ -293,16 +292,16 @@ public MockResponse dispatch(RecordedRequest request) {
293292
} else if (path.matches("/v1/parameters")) {
294293
return new MockResponse().setResponseCode(200).setBody(objectMapper.writeValueAsString(LOADFLOW_PARAMETERS_UUID_STRING))
295294
.addHeader("Content-Type", "application/json; charset=utf-8");
296-
} else if (path.matches("/v1/profiles\\?sub=" + NO_PROFILE_USER_ID)) {
297-
return new MockResponse().setResponseCode(200).setBody(USER_PROFILE_EMPTY_JSON)
295+
} else if (path.matches("/v1/users/" + NO_PROFILE_USER_ID + "/profile")) {
296+
return new MockResponse().setResponseCode(200)
298297
.addHeader("Content-Type", "application/json; charset=utf-8");
299-
} else if (path.matches("/v1/profiles\\?sub=" + NO_PARAMS_IN_PROFILE_USER_ID)) {
298+
} else if (path.matches("/v1/users/" + NO_PARAMS_IN_PROFILE_USER_ID + "/profile")) {
300299
return new MockResponse().setResponseCode(200).setBody(USER_PROFILE_NO_PARAMS_JSON)
301300
.addHeader("Content-Type", "application/json; charset=utf-8");
302-
} else if (path.matches("/v1/profiles\\?sub=" + VALID_PARAMS_IN_PROFILE_USER_ID)) {
301+
} else if (path.matches("/v1/users/" + VALID_PARAMS_IN_PROFILE_USER_ID + "/profile")) {
303302
return new MockResponse().setResponseCode(200).setBody(USER_PROFILE_VALID_PARAMS_JSON)
304303
.addHeader("Content-Type", "application/json; charset=utf-8");
305-
} else if (path.matches("/v1/profiles\\?sub=" + INVALID_PARAMS_IN_PROFILE_USER_ID)) {
304+
} else if (path.matches("/v1/users/" + INVALID_PARAMS_IN_PROFILE_USER_ID + "/profile")) {
306305
return new MockResponse().setResponseCode(200).setBody(USER_PROFILE_INVALID_PARAMS_JSON)
307306
.addHeader("Content-Type", "application/json; charset=utf-8");
308307
} else if (path.matches("/v1/parameters/" + PROFILE_LOADFLOW_INVALID_PARAMETERS_UUID_STRING) && method.equals("POST")) {
@@ -613,7 +612,7 @@ public void testResetLoadFlowParametersUserHasNoProfile() throws Exception {
613612
createOrUpdateParametersAndDoChecks(studyNameUserIdUuid, "", NO_PROFILE_USER_ID, HttpStatus.OK);
614613

615614
var requests = TestUtils.getRequestsDone(2, server);
616-
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/profiles?sub=" + NO_PROFILE_USER_ID)));
615+
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/users/" + NO_PROFILE_USER_ID + "/profile")));
617616
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/parameters/" + LOADFLOW_PARAMETERS_UUID_STRING))); // update existing with dft
618617
}
619618

@@ -624,7 +623,7 @@ public void testResetLoadFlowParametersUserHasNoParamsInProfile() throws Excepti
624623
createOrUpdateParametersAndDoChecks(studyNameUserIdUuid, "", NO_PARAMS_IN_PROFILE_USER_ID, HttpStatus.OK);
625624

626625
var requests = TestUtils.getRequestsDone(2, server);
627-
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/profiles?sub=" + NO_PARAMS_IN_PROFILE_USER_ID)));
626+
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/users/" + NO_PARAMS_IN_PROFILE_USER_ID + "/profile")));
628627
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/parameters/" + LOADFLOW_PARAMETERS_UUID_STRING))); // update existing with dft
629628
}
630629

@@ -635,7 +634,7 @@ public void testResetLoadFlowParametersUserHasInvalidParamsInProfile() throws Ex
635634
createOrUpdateParametersAndDoChecks(studyNameUserIdUuid, "", INVALID_PARAMS_IN_PROFILE_USER_ID, HttpStatus.NO_CONTENT);
636635

637636
var requests = TestUtils.getRequestsDone(3, server);
638-
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/profiles?sub=" + INVALID_PARAMS_IN_PROFILE_USER_ID)));
637+
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/users/" + INVALID_PARAMS_IN_PROFILE_USER_ID + "/profile")));
639638
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/parameters/" + LOADFLOW_PARAMETERS_UUID_STRING))); // update existing with dft
640639
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/parameters/" + PROFILE_LOADFLOW_INVALID_PARAMETERS_UUID_STRING))); // post duplicate ko
641640
}
@@ -647,7 +646,7 @@ public void testResetLoadFlowParametersUserHasValidParamsInProfile() throws Exce
647646
createOrUpdateParametersAndDoChecks(studyNameUserIdUuid, "", VALID_PARAMS_IN_PROFILE_USER_ID, HttpStatus.OK);
648647

649648
var requests = TestUtils.getRequestsDone(3, server);
650-
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/profiles?sub=" + VALID_PARAMS_IN_PROFILE_USER_ID)));
649+
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/users/" + VALID_PARAMS_IN_PROFILE_USER_ID + "/profile")));
651650
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/parameters/" + LOADFLOW_PARAMETERS_UUID_STRING))); // delete existing
652651
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/parameters/" + PROFILE_LOADFLOW_VALID_PARAMETERS_UUID_STRING))); // post duplicate ok
653652
}

src/test/java/org/gridsuite/study/server/StudyTest.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -167,13 +167,13 @@ public class StudyTest {
167167
private static final String URI_NETWORK_MODIF = "/v1/studies/{studyUuid}/nodes/{nodeUuid}/network-modifications";
168168
private static final String CASE_FORMAT = "caseFormat";
169169
private static final String NO_PARAMS_IN_PROFILE_USER_ID = "noParamInProfileUser";
170-
private static final String USER_PROFILE_NO_PARAMS_JSON = "[{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile No params\"}]";
170+
private static final String USER_PROFILE_NO_PARAMS_JSON = "{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile No params\"}";
171171
private static final String INVALID_PARAMS_IN_PROFILE_USER_ID = "invalidParamInProfileUser";
172172
private static final String PROFILE_LOADFLOW_INVALID_PARAMETERS_UUID_STRING = "f09f5282-8e34-48b5-b66e-7ef9f3f36c4f";
173-
private static final String USER_PROFILE_INVALID_PARAMS_JSON = "[{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile with broken params\",\"loadFlowParameterId\":\"" + PROFILE_LOADFLOW_INVALID_PARAMETERS_UUID_STRING + "\",\"allParametersLinksValid\":false}]";
173+
private static final String USER_PROFILE_INVALID_PARAMS_JSON = "{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile with broken params\",\"loadFlowParameterId\":\"" + PROFILE_LOADFLOW_INVALID_PARAMETERS_UUID_STRING + "\",\"allParametersLinksValid\":false}";
174174
private static final String VALID_PARAMS_IN_PROFILE_USER_ID = "validParamInProfileUser";
175175
private static final String PROFILE_LOADFLOW_VALID_PARAMETERS_UUID_STRING = "1cec4a7b-ab7e-4d78-9dd7-ce73c5ef11d9";
176-
private static final String USER_PROFILE_VALID_PARAMS_JSON = "[{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile with valid params\",\"loadFlowParameterId\":\"" + PROFILE_LOADFLOW_VALID_PARAMETERS_UUID_STRING + "\",\"allParametersLinksValid\":true}]";
176+
private static final String USER_PROFILE_VALID_PARAMS_JSON = "{\"id\":\"97bb1890-a90c-43c3-a004-e631246d42d6\",\"name\":\"Profile with valid params\",\"loadFlowParameterId\":\"" + PROFILE_LOADFLOW_VALID_PARAMETERS_UUID_STRING + "\",\"allParametersLinksValid\":true}";
177177
private static final String PROFILE_LOADFLOW_DUPLICATED_PARAMETERS_UUID_STRING = "a4ce25e1-59a7-401d-abb1-04425fe24587";
178178
private static final String DUPLICATED_PARAMS_JSON = "\"" + PROFILE_LOADFLOW_DUPLICATED_PARAMETERS_UUID_STRING + "\"";
179179

@@ -492,13 +492,13 @@ public MockResponse dispatch(RecordedRequest request) {
492492
return new MockResponse().setResponseCode(200);
493493
} else if (path.matches("/v1/default-provider")) {
494494
return new MockResponse().setResponseCode(200).setBody(DEFAULT_PROVIDER);
495-
} else if (path.matches("/v1/profiles\\?sub=" + NO_PARAMS_IN_PROFILE_USER_ID)) {
495+
} else if (path.matches("/v1/users/" + NO_PARAMS_IN_PROFILE_USER_ID + "/profile")) {
496496
return new MockResponse().setResponseCode(200).setBody(USER_PROFILE_NO_PARAMS_JSON)
497497
.addHeader("Content-Type", "application/json; charset=utf-8");
498-
} else if (path.matches("/v1/profiles\\?sub=" + INVALID_PARAMS_IN_PROFILE_USER_ID)) {
498+
} else if (path.matches("/v1/users/" + INVALID_PARAMS_IN_PROFILE_USER_ID + "/profile")) {
499499
return new MockResponse().setResponseCode(200).setBody(USER_PROFILE_INVALID_PARAMS_JSON)
500500
.addHeader("Content-Type", "application/json; charset=utf-8");
501-
} else if (path.matches("/v1/profiles\\?sub=" + VALID_PARAMS_IN_PROFILE_USER_ID)) {
501+
} else if (path.matches("/v1/users/" + VALID_PARAMS_IN_PROFILE_USER_ID + "/profile")) {
502502
return new MockResponse().setResponseCode(200).setBody(USER_PROFILE_VALID_PARAMS_JSON)
503503
.addHeader("Content-Type", "application/json; charset=utf-8");
504504
}
@@ -1051,7 +1051,7 @@ private UUID createStudy(String userId, UUID caseUuid, String parameterDuplicate
10511051
assertTrue(requests.stream().anyMatch(r -> r.matches("/v1/networks\\?caseUuid=" + caseUuid + "&variantId=" + FIRST_VARIANT_ID + "&reportUuid=.*&receiver=.*" + "&caseFormat=UCTE")));
10521052
assertTrue(requests.stream().anyMatch(r -> r.matches("/v1/parameters/default")));
10531053
assertTrue(requests.contains(String.format("/v1/cases/%s/disableExpiration", caseUuid)));
1054-
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/profiles?sub=" + userId)));
1054+
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/users/" + userId + "/profile")));
10551055
if (parameterDuplicatedUuid != null) {
10561056
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/parameters/" + parameterDuplicatedUuid))); // post duplicate
10571057
}
@@ -1106,7 +1106,7 @@ private UUID createStudyWithDuplicateCase(String userId, UUID caseUuid) throws E
11061106
assertTrue(requests.stream().anyMatch(r -> r.matches("/v1/networks\\?caseUuid=" + CLONED_CASE_UUID_STRING + "&variantId=" + FIRST_VARIANT_ID + "&reportUuid=.*&receiver=.*")));
11071107
assertTrue(requests.contains(String.format("/v1/cases/%s/disableExpiration", CLONED_CASE_UUID_STRING)));
11081108
assertTrue(requests.stream().anyMatch(r -> r.matches("/v1/parameters/default")));
1109-
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/profiles?sub=" + userId)));
1109+
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/users/" + userId + "/profile")));
11101110

11111111
return studyUuid;
11121112
}
@@ -1299,7 +1299,7 @@ public void testGetStudyCreationRequests() throws Exception {
12991299
assertTrue(requests.stream().anyMatch(r -> r.matches("/v1/networks\\?caseUuid=" + NEW_STUDY_CASE_UUID + "&variantId=" + FIRST_VARIANT_ID + "&reportUuid=.*")));
13001300
assertTrue(requests.contains(String.format("/v1/cases/%s/disableExpiration", NEW_STUDY_CASE_UUID)));
13011301
assertTrue(requests.contains("/v1/parameters/default"));
1302-
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/profiles?sub=userId")));
1302+
assertTrue(requests.stream().anyMatch(r -> r.equals("/v1/users/userId/profile")));
13031303
}
13041304

13051305
private void checkUpdateModelStatusMessagesReceived(UUID studyUuid, UUID nodeUuid, String updateType) {

0 commit comments

Comments
 (0)