]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-20181 FE - Rename pageRestResponse to page
authorguillaume-peoch-sonarsource <guillaume.peoch@sonarsource.com>
Wed, 16 Aug 2023 15:44:38 +0000 (17:44 +0200)
committersonartech <sonartech@sonarsource.com>
Fri, 18 Aug 2023 20:02:50 +0000 (20:02 +0000)
server/sonar-web/src/main/js/api/mocks/IssuesServiceMock.ts
server/sonar-web/src/main/js/api/mocks/SecurityHotspotServiceMock.ts
server/sonar-web/src/main/js/api/mocks/UsersServiceMock.ts
server/sonar-web/src/main/js/api/users.ts
server/sonar-web/src/main/js/apps/issues/utils.ts
server/sonar-web/src/main/js/queries/users.ts
server/sonar-webserver-webapi-v2/src/main/java/org/sonar/server/v2/api/user/controller/UserController.java
server/sonar-webserver-webapi-v2/src/main/java/org/sonar/server/v2/api/user/model/RestUser.java
server/sonar-webserver-webapi-v2/src/test/java/org/sonar/server/v2/api/user/controller/DefaultUserControllerTest.java

index f40177f5444db10a4226140afc8a525c572ee8fd..bef870b12223aea4e0b4714c91cb59fd608be9d4 100644 (file)
@@ -625,7 +625,7 @@ export default class IssuesServiceMock {
 
   handleGetUsers = () => {
     return this.reply({
-      pageRestResponse: mockPaging(),
+      page: mockPaging(),
       users: [mockLoggedInUser() as unknown as RestUser],
     });
   };
index 6124747de14c51220dd96d84745f898a8d02f509..c0f2194865df36ad2f0ff8dffcd1fd78d4264c54 100644 (file)
@@ -127,7 +127,7 @@ export default class SecurityHotspotServiceMock {
         mockRestUser({ name: 'User Doe', login: 'user.doe' }),
         mockRestUser({ name: 'User Foo', login: 'user.foo' }),
       ],
-      pageRestResponse: mockPaging(),
+      page: mockPaging(),
     });
   };
 
index caca8dd61dcfe2a538081b08a2a626b56defb63a..13b5e1e0d0cab9414ca3c94d435a589acdc6a3fd 100644 (file)
@@ -207,14 +207,14 @@ export default class UsersServiceMock {
   };
 
   handleGetUsers: typeof getUsers<RestUserDetailed> = (data) => {
-    let pageRestResponse = {
+    let page = {
       pageIndex: 1,
       pageSize: 0,
       total: 10,
     };
 
-    if (data.pageIndex !== undefined && data.pageIndex !== pageRestResponse.pageIndex) {
-      pageRestResponse = { pageIndex: 2, pageSize: 2, total: 10 };
+    if (data.pageIndex !== undefined && data.pageIndex !== page.pageIndex) {
+      page = { pageIndex: 2, pageSize: 2, total: 10 };
       const users = [
         mockRestUser({
           name: `Local User ${this.users.length + 4}`,
@@ -226,7 +226,7 @@ export default class UsersServiceMock {
         }),
       ];
 
-      return this.reply({ pageRestResponse, users });
+      return this.reply({ page, users });
     }
 
     const users = this.getFilteredRestUsers({
@@ -239,7 +239,7 @@ export default class UsersServiceMock {
     });
 
     return this.reply({
-      pageRestResponse: {
+      page: {
         pageIndex: 1,
         pageSize: users.length,
         total: 10,
index e9e8ea5a8004b1e16eadf916bb50af6d67a83c46..754da05a7d5cb81e86a6aebe5f91ff820a58dd88 100644 (file)
@@ -92,7 +92,7 @@ export function getUsers<T extends RestUserBase>(data: {
   sonarLintLastConnectionDateTo?: string;
   pageSize?: number;
   pageIndex?: number;
-}): Promise<{ pageRestResponse: Paging; users: T[] }> {
+}): Promise<{ page: Paging; users: T[] }> {
   return getJSON('/api/v2/users', data).catch(throwGlobalError);
 }
 
index 83a0507cc3819560e4143102647c734af8fba38f..57b4fd49565fb2128c07fe90af6ada445b05825e 100644 (file)
@@ -237,8 +237,8 @@ export const searchAssignees = (
   query: string,
   page = 1
 ): Promise<{ paging: Paging; results: RestUser[] }> => {
-  return getUsers<RestUser>({ pageIndex: page, q: query }).then(({ pageRestResponse, users }) => ({
-    paging: pageRestResponse,
+  return getUsers<RestUser>({ pageIndex: page, q: query }).then(({ page, users }) => ({
+    paging: page,
     results: users,
   }));
 };
index f74f5730f33931918f9695f3d5c9681cf9728737..6b1a95e8243001d200a3f6f2069a4b367b03ba57 100644 (file)
@@ -52,7 +52,7 @@ export function useUsersQueries<U extends RestUserBase>(
   return results.reduce(
     (acc, { data, isLoading }) => ({
       users: acc.users.concat(data?.users ?? []),
-      total: data?.pageRestResponse.total,
+      total: data?.page.total,
       isLoading: acc.isLoading || isLoading,
     }),
     { users: [] as U[], total: 0, isLoading: false }
index 7f99484e96e0f4720d5b4bc12c9ddb3a34c7c053..2d027f43b8575b2d359516a626a719da5de44b70 100644 (file)
@@ -52,15 +52,15 @@ public interface UserController {
   @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
   @ResponseStatus(HttpStatus.OK)
   @Operation(summary = "Users search", description = """
-      Get a list of users. By default, only active users are returned.<br>
+      Get a list of users. By default, only active users are returned.
       The following fields are only returned when user has Administer System permission or for logged-in in user :
-        'email'
-        'externalIdentity'
-        'externalProvider'
-        'groups'
-        'lastConnectionDate'
-        'sonarLintLastConnectionDate'
-        'tokensCount'<br>
+        'email',
+        'externalIdentity',
+        'externalProvider',
+        'groups',
+        'lastConnectionDate',
+        'sonarLintLastConnectionDate',
+        'tokensCount'.
       Field 'sonarqubeLastConnectionDate' is only updated every hour, so it may not be accurate, for instance when a user authenticates many times in less than one hour.
     """)
   UsersSearchRestResponse search(
index 3f596ff68c8d038fc9515eb2166e96d4f9bc3a1e..bb93cc4254267852b121a936350ec3fdd802d044 100644 (file)
@@ -19,5 +19,8 @@
  */
 package org.sonar.server.v2.api.user.model;
 
+import io.swagger.v3.oas.annotations.media.Schema;
+
+@Schema(implementation = RestUserForAdmins.class)
 public interface RestUser {
 }
index 4bbf6121539cad6e0c1d99e96b656fc3fac661df..290f87e10f92afcbc3546579ff8ccc88a4bb1b2a 100644 (file)
 package org.sonar.server.v2.api.user.controller;
 
 import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.TypeAdapter;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.stream.JsonWriter;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
@@ -71,7 +75,7 @@ public class DefaultUserControllerTest {
   private final UsersSearchRestResponseGenerator responseGenerator = mock(UsersSearchRestResponseGenerator.class);
   private final MockMvc mockMvc = ControllerTester.getMockMvc(new DefaultUserController(userSession, userService, responseGenerator));
 
-  private static final Gson gson = new Gson();
+  private static final Gson gson =  new GsonBuilder().registerTypeAdapter(RestUser.class, new RestUserDeserializer()).create();
 
   @Test
   public void search_whenNoParameters_shouldUseDefaultAndForwardToUserService() throws Exception {
@@ -114,25 +118,25 @@ public class DefaultUserControllerTest {
   @Test
   public void search_whenAdminParametersUsedButNotAdmin_shouldFail() throws Exception {
     mockMvc.perform(get(USER_ENDPOINT)
-      .param("sonarQubeLastConnectionDateFrom", "2020-01-01T00:00:00+0100"))
+        .param("sonarQubeLastConnectionDateFrom", "2020-01-01T00:00:00+0100"))
       .andExpectAll(
         status().isForbidden(),
         content().string("{\"message\":\"parameter sonarQubeLastConnectionDateFrom requires Administer System permission.\"}"));
 
     mockMvc.perform(get(USER_ENDPOINT)
-      .param("sonarQubeLastConnectionDateTo", "2020-01-01T00:00:00+0100"))
+        .param("sonarQubeLastConnectionDateTo", "2020-01-01T00:00:00+0100"))
       .andExpectAll(
         status().isForbidden(),
         content().string("{\"message\":\"parameter sonarQubeLastConnectionDateTo requires Administer System permission.\"}"));
 
     mockMvc.perform(get(USER_ENDPOINT)
-      .param("sonarLintLastConnectionDateFrom", "2020-01-01T00:00:00+0100"))
+        .param("sonarLintLastConnectionDateFrom", "2020-01-01T00:00:00+0100"))
       .andExpectAll(
         status().isForbidden(),
         content().string("{\"message\":\"parameter sonarLintLastConnectionDateFrom requires Administer System permission.\"}"));
 
     mockMvc.perform(get(USER_ENDPOINT)
-      .param("sonarLintLastConnectionDateTo", "2020-01-01T00:00:00+0100"))
+        .param("sonarLintLastConnectionDateTo", "2020-01-01T00:00:00+0100"))
       .andExpectAll(
         status().isForbidden(),
         content().string("{\"message\":\"parameter sonarLintLastConnectionDateTo requires Administer System permission.\"}"));
@@ -162,6 +166,19 @@ public class DefaultUserControllerTest {
 
   }
 
+  static class RestUserDeserializer extends TypeAdapter<RestUser> {
+
+    @Override
+    public void write(JsonWriter out, RestUser value) {
+      throw new IllegalStateException("not implemented");
+    }
+
+    @Override
+    public RestUser read(JsonReader reader) {
+      return gson.fromJson(reader, RestUserForAdmins.class);
+    }
+  }
+
   private UserSearchResult generateUserSearchResult(String id, boolean active, boolean local, boolean managed, int groupsCount, int tokensCount) {
     UserDto userDto = new UserDto()
       .setLogin("login_" + id)
@@ -311,9 +328,9 @@ public class DefaultUserControllerTest {
     userSession.logIn().setNonSystemAdministrator();
 
     mockMvc.perform(
-      post(USER_ENDPOINT)
-        .contentType(MediaType.APPLICATION_JSON_VALUE)
-        .content(gson.toJson(new UserCreateRestRequest(null, null, "login", "name", null, null))))
+        post(USER_ENDPOINT)
+          .contentType(MediaType.APPLICATION_JSON_VALUE)
+          .content(gson.toJson(new UserCreateRestRequest(null, null, "login", "name", null, null))))
       .andExpectAll(
         status().isForbidden(),
         content().json("{\"message\":\"Insufficient privileges\"}"));