Browse Source

SONAR-21015 Move GitHub permission mapping endpoints to dop-translation domain

tags/10.4.0.87286
Wojtek Wajerowicz 5 months ago
parent
commit
0c7fd2fe33

+ 6
- 4
server/sonar-web/src/main/js/api/provisioning.ts View File

@@ -22,6 +22,8 @@ import { throwGlobalError } from '../helpers/error';
import { getJSON, post, postJSON } from '../helpers/request';
import { GitHubConfigurationStatus, GitHubMapping, GithubStatus } from '../types/provisioning';

const GITHUB_PERMISSION_MAPPINGS = '/api/v2/dop-translation/github-permission-mappings';

export function fetchIsScimEnabled(): Promise<boolean> {
return getJSON('/api/scim_management/status')
.then((r) => r.enabled)
@@ -58,7 +60,7 @@ export function syncNowGithubProvisioning(): Promise<void> {

export function fetchGithubRolesMapping() {
return axios
.get<{ githubPermissionsMappings: GitHubMapping[] }>('/api/v2/github-permission-mappings')
.get<{ githubPermissionsMappings: GitHubMapping[] }>(GITHUB_PERMISSION_MAPPINGS)
.then((data) => data.githubPermissionsMappings);
}

@@ -67,15 +69,15 @@ export function updateGithubRolesMapping(
data: Partial<Pick<GitHubMapping, 'permissions'>>,
) {
return axios.patch<GitHubMapping>(
`/api/v2/github-permission-mappings/${encodeURIComponent(role)}`,
`${GITHUB_PERMISSION_MAPPINGS}/${encodeURIComponent(role)}`,
data,
);
}

export function addGithubRolesMapping(data: Omit<GitHubMapping, 'id'>) {
return axios.post<GitHubMapping>(`/api/v2/github-permission-mappings/`, data);
return axios.post<GitHubMapping>(GITHUB_PERMISSION_MAPPINGS, data);
}

export function deleteGithubRolesMapping(role: string) {
return axios.delete(`/api/v2/github-permission-mappings/${encodeURIComponent(role)}`);
return axios.delete(`${GITHUB_PERMISSION_MAPPINGS}/${encodeURIComponent(role)}`);
}

+ 0
- 1
server/sonar-webserver-webapi-v2/src/main/java/org/sonar/server/v2/WebApiEndpoints.java View File

@@ -26,7 +26,6 @@ public class WebApiEndpoints {

public static final String USERS_MANAGEMENT_DOMAIN = "/users-management";
public static final String USER_ENDPOINT = USERS_MANAGEMENT_DOMAIN + "/users";
public static final String GITHUB_PERMISSIONS_ENDPOINT = "/github-permission-mappings";
public static final String JSON_MERGE_PATCH_CONTENT_TYPE = "application/merge-patch+json";

private WebApiEndpoints() {

+ 2
- 6
sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/GithubPermissionsService.java View File

@@ -33,16 +33,12 @@ public class GithubPermissionsService extends BaseService {
}

public void addPermissionMapping(AddGithubPermissionMappingRequest addGithubPermissionMappingRequest) {
try (WsResponse response = callEndpoint(addGithubPermissionMappingRequest)) {
if (!response.isSuccessful()) {
throw new IllegalStateException("Failed to add github permission mapping, http error code: " + response.code());
}
}
callEndpoint(addGithubPermissionMappingRequest).close();
}

private WsResponse callEndpoint(AddGithubPermissionMappingRequest addGithubPermissionMappingRequest) {
return call(
new PostRequest(path("github-permission-mappings"))
new PostRequest(path("dop-translation/github-permission-mappings"))
.setBody(new Gson().toJson(addGithubPermissionMappingRequest))
.setMediaType(MediaTypes.JSON));
}

+ 68
- 0
sonar-ws/src/test/java/org/sonarqube/ws/client/github/provisioning/permissions/GithubPermissionsServiceTest.java View File

@@ -0,0 +1,68 @@
/*
* SonarQube
* Copyright (C) 2009-2023 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonarqube.ws.client.github.provisioning.permissions;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.sonarqube.ws.client.PostRequest;
import org.sonarqube.ws.client.WsConnector;
import org.sonarqube.ws.client.WsRequest;
import org.sonarqube.ws.client.WsResponse;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)
public class GithubPermissionsServiceTest {

@Mock
private WsConnector wsConnector;

@InjectMocks
private GithubPermissionsService githubPermissionsService;

@Test
public void addPermissionMapping_whenRequestIsSuccessful_returns() {
AddGithubPermissionMappingRequest addGithubPermissionMappingRequest = new AddGithubPermissionMappingRequest("admin",
new SonarqubePermissions(true, true, true, true, true, true));

WsResponse response = mock(WsResponse.class);
when(response.failIfNotSuccessful()).thenReturn(response);
when(wsConnector.call(any(PostRequest.class))).thenReturn(response);

githubPermissionsService.addPermissionMapping(addGithubPermissionMappingRequest);

ArgumentCaptor<WsRequest> wsRequestArgumentCaptor = ArgumentCaptor.forClass(WsRequest.class);
verify(wsConnector).call(wsRequestArgumentCaptor.capture());

WsRequest request = wsRequestArgumentCaptor.getValue();
assertThat(request.getMethod()).isEqualTo(WsRequest.Method.POST);
assertThat(request.getPath()).isEqualTo("api/v2/dop-translation/github-permission-mappings");

}

}

Loading…
Cancel
Save