@@ -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)}`); | |||
} |
@@ -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() { |
@@ -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)); | |||
} |
@@ -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"); | |||
} | |||
} |