aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2017-04-28 11:39:40 +0200
committerJulien Lancelot <julien.lancelot@sonarsource.com>2017-04-28 18:36:09 +0200
commitfdfa49be4133e34b6bb5849a137166eb29bf9109 (patch)
tree57c0ea40f099019e02e62b446f07a9f51142e845
parente4390c1826c0e886be3bda201cac7f4401771778 (diff)
downloadsonarqube-fdfa49be4133e34b6bb5849a137166eb29bf9109.tar.gz
sonarqube-fdfa49be4133e34b6bb5849a137166eb29bf9109.zip
Add visibility parameter in ProjectsService#create()
-rw-r--r--it/it-tests/src/test/java/it/administration/ProjectsAdministrationTest.java3
-rw-r--r--it/it-tests/src/test/java/it/authorisation/ExecuteAnalysisPermissionTest.java5
-rw-r--r--it/it-tests/src/test/java/it/authorisation/IssuePermissionTest.java3
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/project/ws/CreateAction.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/project/ws/UpdateVisibilityAction.java6
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/project/CreateRequest.java18
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsService.java14
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsWsParameters.java2
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/project/UpdateVisibilityRequest.java44
-rw-r--r--sonar-ws/src/test/java/org/sonarqube/ws/client/project/ProjectsServiceTest.java43
10 files changed, 103 insertions, 41 deletions
diff --git a/it/it-tests/src/test/java/it/administration/ProjectsAdministrationTest.java b/it/it-tests/src/test/java/it/administration/ProjectsAdministrationTest.java
index 9efa0899ff5..c574563a4ae 100644
--- a/it/it-tests/src/test/java/it/administration/ProjectsAdministrationTest.java
+++ b/it/it-tests/src/test/java/it/administration/ProjectsAdministrationTest.java
@@ -34,7 +34,6 @@ import util.ItUtils;
import static com.codeborne.selenide.Condition.text;
import static com.codeborne.selenide.Selenide.$;
-import static org.sonarqube.ws.client.project.UpdateVisibilityRequest.Visibility.PRIVATE;
import static util.ItUtils.newAdminWsClient;
import static util.ItUtils.projectDir;
@@ -55,7 +54,7 @@ public class ProjectsAdministrationTest {
public void return_all_projects_even_when_no_permission() throws Exception {
orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-sample")).setProperties("sonar.projectKey", "sample1"));
orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-sample")).setProperties("sonar.projectKey", "sample2"));
- ItUtils.newAdminWsClient(orchestrator).projects().updateVisibility(new UpdateVisibilityRequest("sample2", PRIVATE));
+ ItUtils.newAdminWsClient(orchestrator).projects().updateVisibility(UpdateVisibilityRequest.builder().setProject("sample2").setVisibility("private").build());
// Remove 'Admin' permission for admin group on project 2 -> No one can access or admin this project, expect System Admin
newAdminWsClient(orchestrator).permissions().removeGroup(new RemoveGroupWsRequest().setProjectKey("sample2").setGroupName("sonar-administrators").setPermission("admin"));
diff --git a/it/it-tests/src/test/java/it/authorisation/ExecuteAnalysisPermissionTest.java b/it/it-tests/src/test/java/it/authorisation/ExecuteAnalysisPermissionTest.java
index 5ec88a35529..e315c731c44 100644
--- a/it/it-tests/src/test/java/it/authorisation/ExecuteAnalysisPermissionTest.java
+++ b/it/it-tests/src/test/java/it/authorisation/ExecuteAnalysisPermissionTest.java
@@ -37,7 +37,6 @@ import util.ItUtils;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
-import static org.sonarqube.ws.client.project.UpdateVisibilityRequest.Visibility.PRIVATE;
import static util.ItUtils.newAdminWsClient;
import static util.ItUtils.runProjectAnalysis;
@@ -85,7 +84,7 @@ public class ExecuteAnalysisPermissionTest {
"You're only authorized to execute a local (preview) SonarQube analysis without pushing the results to the SonarQube server. Please contact your SonarQube administrator.");
}
- ItUtils.newAdminWsClient(orchestrator).projects().updateVisibility(new UpdateVisibilityRequest(PROJECT_KEY, PRIVATE));
+ ItUtils.newAdminWsClient(orchestrator).projects().updateVisibility(UpdateVisibilityRequest.builder().setProject(PROJECT_KEY).setVisibility("private").build());
try {
// Execute anonymous analysis
executeAnonymousAnalysis();
@@ -102,7 +101,7 @@ public class ExecuteAnalysisPermissionTest {
executeAnonymousAnalysis();
// make project private
- ItUtils.newAdminWsClient(orchestrator).projects().updateVisibility(new UpdateVisibilityRequest("sample", PRIVATE));
+ ItUtils.newAdminWsClient(orchestrator).projects().updateVisibility(UpdateVisibilityRequest.builder().setProject("sample").setVisibility("private").build());
// still no error
executeAnonymousAnalysis();
diff --git a/it/it-tests/src/test/java/it/authorisation/IssuePermissionTest.java b/it/it-tests/src/test/java/it/authorisation/IssuePermissionTest.java
index 27d31d0e09e..5d50b39d2d4 100644
--- a/it/it-tests/src/test/java/it/authorisation/IssuePermissionTest.java
+++ b/it/it-tests/src/test/java/it/authorisation/IssuePermissionTest.java
@@ -40,7 +40,6 @@ import util.ItUtils;
import static java.util.Arrays.asList;
import static junit.framework.TestCase.fail;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.sonarqube.ws.client.project.UpdateVisibilityRequest.Visibility.PRIVATE;
import static util.ItUtils.newAdminWsClient;
import static util.ItUtils.newUserWsClient;
import static util.ItUtils.projectDir;
@@ -58,7 +57,7 @@ public class IssuePermissionTest {
ItUtils.restoreProfile(orchestrator, getClass().getResource("/authorisation/one-issue-per-line-profile.xml"));
orchestrator.getServer().provisionProject("privateProject", "PrivateProject");
- ItUtils.newAdminWsClient(orchestrator).projects().updateVisibility(new UpdateVisibilityRequest("privateProject", PRIVATE));
+ ItUtils.newAdminWsClient(orchestrator).projects().updateVisibility(UpdateVisibilityRequest.builder().setProject("privateProject").setVisibility("private").build());
orchestrator.getServer().associateProjectToQualityProfile("privateProject", "xoo", "one-issue-per-line");
SonarScanner privateProject = SonarScanner.create(projectDir("shared/xoo-sample"))
.setProperty("sonar.projectKey", "privateProject")
diff --git a/server/sonar-server/src/main/java/org/sonar/server/project/ws/CreateAction.java b/server/sonar-server/src/main/java/org/sonar/server/project/ws/CreateAction.java
index fe17b6d4c3d..84974174d53 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/project/ws/CreateAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/project/ws/CreateAction.java
@@ -45,11 +45,11 @@ import static org.sonarqube.ws.client.project.ProjectsWsParameters.ACTION_CREATE
import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_BRANCH;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_NAME;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_PROJECT;
+import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_VISIBILITY;
public class CreateAction implements ProjectsWsAction {
private static final String DEPRECATED_PARAM_KEY = "key";
- static final String PARAM_VISIBILITY = "visibility";
private final ProjectsWsSupport support;
private final DbClient dbClient;
@@ -117,13 +117,15 @@ public class CreateAction implements ProjectsWsAction {
OrganizationDto organization = support.getOrganization(dbSession, ofNullable(request.getOrganization())
.orElseGet(defaultOrganizationProvider.get()::getKey));
userSession.checkPermission(PROVISION_PROJECTS, organization);
+ String visibility = request.getVisibility();
+ Boolean changeToPrivate = visibility == null ? dbClient.organizationDao().getNewProjectPrivate(dbSession, organization) : "private".equals(visibility);
ComponentDto componentDto = componentUpdater.create(dbSession, newComponentBuilder()
.setOrganizationUuid(organization.getUuid())
.setKey(request.getKey())
.setName(request.getName())
.setBranch(request.getBranch())
- .setPrivate(request.getVisibility().map(Visibility::isPrivate).orElseGet(() -> dbClient.organizationDao().getNewProjectPrivate(dbSession, organization)))
+ .setPrivate(changeToPrivate)
.setQualifier(PROJECT)
.build(),
userSession.isLoggedIn() ? userSession.getUserId() : null);
diff --git a/server/sonar-server/src/main/java/org/sonar/server/project/ws/UpdateVisibilityAction.java b/server/sonar-server/src/main/java/org/sonar/server/project/ws/UpdateVisibilityAction.java
index 3302a35e8f0..7b59665c5db 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/project/ws/UpdateVisibilityAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/project/ws/UpdateVisibilityAction.java
@@ -36,16 +36,16 @@ import org.sonar.server.component.ComponentFinder;
import org.sonar.server.permission.index.PermissionIndexer;
import org.sonar.server.project.Visibility;
import org.sonar.server.user.UserSession;
+import org.sonarqube.ws.client.project.ProjectsWsParameters;
import static java.util.Collections.singletonList;
import static org.sonar.core.permission.ProjectPermissions.PUBLIC_PERMISSIONS;
import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001;
import static org.sonar.server.ws.WsUtils.checkRequest;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_PROJECT;
+import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_VISIBILITY;
public class UpdateVisibilityAction implements ProjectsWsAction {
- private static final String ACTION = "update_visibility";
- private static final String PARAM_VISIBILITY = "visibility";
private static final Set<String> ALLOWED_QUALIFIERS = ImmutableSet.of(Qualifiers.PROJECT, Qualifiers.VIEW);
private final DbClient dbClient;
@@ -62,7 +62,7 @@ public class UpdateVisibilityAction implements ProjectsWsAction {
}
public void define(WebService.NewController context) {
- WebService.NewAction action = context.createAction(ACTION)
+ WebService.NewAction action = context.createAction(ProjectsWsParameters.ACTION_UPDATE_VISIBILITY)
.setDescription("Updates visibility of a project or a view.<br/>" +
"Requires 'Project administer' permission on the specified project or view")
.setSince("6.4")
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/project/CreateRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/project/CreateRequest.java
index 8a03fff7c13..61c89eeabfc 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/project/CreateRequest.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/project/CreateRequest.java
@@ -19,14 +19,10 @@
*/
package org.sonarqube.ws.client.project;
-import java.util.Optional;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
-import static com.google.common.base.Preconditions.checkArgument;
-import static java.util.Arrays.asList;
-
@Immutable
public class CreateRequest {
@@ -50,10 +46,12 @@ public class CreateRequest {
return organization;
}
+ @CheckForNull
public String getKey() {
return key;
}
+ @CheckForNull
public String getName() {
return name;
}
@@ -63,8 +61,9 @@ public class CreateRequest {
return branch;
}
- public Optional<String> getVisibility() {
- return Optional.ofNullable(visibility);
+ @CheckForNull
+ public String getVisibility() {
+ return visibility;
}
public static Builder builder() {
@@ -82,17 +81,17 @@ public class CreateRequest {
private Builder() {
}
- public Builder setOrganization(String organization) {
+ public Builder setOrganization(@Nullable String organization) {
this.organization = organization;
return this;
}
- public Builder setKey(String key) {
+ public Builder setKey(@Nullable String key) {
this.key = key;
return this;
}
- public Builder setName(String name) {
+ public Builder setName(@Nullable String name) {
this.name = name;
return this;
}
@@ -103,7 +102,6 @@ public class CreateRequest {
}
public Builder setVisibility(@Nullable String visibility) {
- checkArgument(visibility == null || asList("private", "public").contains(visibility), "Unexpected visibility '" + visibility + "'");
this.visibility = visibility;
return this;
}
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsService.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsService.java
index a0d4b389258..f46f0f5701e 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsService.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsService.java
@@ -35,6 +35,7 @@ import static org.sonarqube.ws.client.project.ProjectsWsParameters.ACTION_BULK_U
import static org.sonarqube.ws.client.project.ProjectsWsParameters.ACTION_CREATE;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.ACTION_SEARCH;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.ACTION_UPDATE_KEY;
+import static org.sonarqube.ws.client.project.ProjectsWsParameters.ACTION_UPDATE_VISIBILITY;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.CONTROLLER;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_BRANCH;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_FROM;
@@ -44,7 +45,7 @@ import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_PROJECT
import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_PROJECT_ID;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_QUALIFIERS;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_TO;
-import static org.sonarqube.ws.client.project.UpdateVisibilityRequest.Visibility.PUBLIC;
+import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_VISIBILITY;
/**
* Maps web service {@code api/projects}.
@@ -66,7 +67,8 @@ public class ProjectsService extends BaseService {
.setParam(PARAM_ORGANIZATION, project.getOrganization())
.setParam(PARAM_PROJECT, project.getKey())
.setParam(PARAM_NAME, project.getName())
- .setParam(PARAM_BRANCH, project.getBranch());
+ .setParam(PARAM_BRANCH, project.getBranch())
+ .setParam(PARAM_VISIBILITY, project.getVisibility());
return call(request, CreateWsResponse.parser());
}
@@ -109,13 +111,9 @@ public class ProjectsService extends BaseService {
}
public void updateVisibility(UpdateVisibilityRequest request) {
- PostRequest post = new PostRequest(path("update_visibility"))
+ PostRequest post = new PostRequest(path(ACTION_UPDATE_VISIBILITY))
.setParam(PARAM_PROJECT, request.getProject())
- .setParam("visibility",
- request.getVisibility()
- .map(visibility -> visibility == PUBLIC ? "public" : "private")
- .orElse(null));
-
+ .setParam(PARAM_VISIBILITY, request.getVisibility());
call(post);
}
}
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsWsParameters.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsWsParameters.java
index c9b4a988a03..f4e9c7bc438 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsWsParameters.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsWsParameters.java
@@ -30,6 +30,7 @@ public class ProjectsWsParameters {
public static final String ACTION_SEARCH = "search";
public static final String ACTION_UPDATE_KEY = "update_key";
public static final String ACTION_BULK_UPDATE_KEY = "bulk_update_key";
+ public static final String ACTION_UPDATE_VISIBILITY = "update_visibility";
public static final String PARAM_PROJECT = "project";
public static final String PARAM_PROJECT_ID = "projectId";
@@ -41,6 +42,7 @@ public class ProjectsWsParameters {
public static final String PARAM_TO = "to";
public static final String PARAM_DRY_RUN = "dryRun";
+ public static final String PARAM_VISIBILITY = "visibility";
public static final String FILTER_LANGUAGES = "languages";
public static final String FILTER_TAGS = "tags";
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/project/UpdateVisibilityRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/project/UpdateVisibilityRequest.java
index 38763165ad0..342b7a547b3 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/project/UpdateVisibilityRequest.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/project/UpdateVisibilityRequest.java
@@ -19,26 +19,48 @@
*/
package org.sonarqube.ws.client.project;
-import java.util.Optional;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
public class UpdateVisibilityRequest {
private final String project;
- private final Visibility visibility;
+ private final String visibility;
- public enum Visibility {
- PUBLIC, PRIVATE
- }
-
- public UpdateVisibilityRequest(String project, Visibility visibility) {
- this.project = project;
- this.visibility = visibility;
+ public UpdateVisibilityRequest(Builder builder) {
+ this.project = builder.project;
+ this.visibility = builder.visibility;
}
+ @CheckForNull
public String getProject() {
return project;
}
- public Optional<Visibility> getVisibility() {
- return Optional.ofNullable(visibility);
+ @CheckForNull
+ public String getVisibility() {
+ return visibility;
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static class Builder {
+ private String project;
+ private String visibility;
+
+ public Builder setProject(@Nullable String project) {
+ this.project = project;
+ return this;
+ }
+
+ public Builder setVisibility(@Nullable String visibility) {
+ this.visibility = visibility;
+ return this;
+ }
+
+ public UpdateVisibilityRequest build() {
+ return new UpdateVisibilityRequest(this);
+ }
}
}
diff --git a/sonar-ws/src/test/java/org/sonarqube/ws/client/project/ProjectsServiceTest.java b/sonar-ws/src/test/java/org/sonarqube/ws/client/project/ProjectsServiceTest.java
index 2576eb3eb09..b329c02b774 100644
--- a/sonar-ws/src/test/java/org/sonarqube/ws/client/project/ProjectsServiceTest.java
+++ b/sonar-ws/src/test/java/org/sonarqube/ws/client/project/ProjectsServiceTest.java
@@ -85,6 +85,36 @@ public class ProjectsServiceTest {
}
@Test
+ public void creates_public_project() {
+ underTest.create(CreateRequest.builder()
+ .setKey("project_key")
+ .setName("Project Name")
+ .setVisibility("public")
+ .build());
+
+ assertThat(serviceTester.getPostRequest().getPath()).isEqualTo("api/projects/create");
+ assertThat(serviceTester.getPostRequest().getParams()).containsOnly(
+ entry("project", "project_key"),
+ entry("name", "Project Name"),
+ entry("visibility", "public"));
+ }
+
+ @Test
+ public void creates_private_project() {
+ underTest.create(CreateRequest.builder()
+ .setKey("project_key")
+ .setName("Project Name")
+ .setVisibility("private")
+ .build());
+
+ assertThat(serviceTester.getPostRequest().getPath()).isEqualTo("api/projects/create");
+ assertThat(serviceTester.getPostRequest().getParams()).containsOnly(
+ entry("project", "project_key"),
+ entry("name", "Project Name"),
+ entry("visibility", "private"));
+ }
+
+ @Test
public void deletes_project_by_id() {
underTest.delete(DeleteRequest.builder().setId("abc").build());
@@ -119,4 +149,17 @@ public class ProjectsServiceTest {
.hasParam(PAGE_SIZE, 10)
.andNoOtherParam();
}
+
+ @Test
+ public void update_visibility() {
+ underTest.updateVisibility(UpdateVisibilityRequest.builder()
+ .setProject("project_key")
+ .setVisibility("public")
+ .build());
+
+ assertThat(serviceTester.getPostRequest().getPath()).isEqualTo("api/projects/update_visibility");
+ assertThat(serviceTester.getPostRequest().getParams()).containsOnly(
+ entry("project", "project_key"),
+ entry("visibility", "public"));
+ }
}