aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Hartmann <hartmann.eric@gmail.com>2018-07-03 08:27:02 +0200
committerSonarTech <sonartech@sonarsource.com>2018-07-11 20:21:21 +0200
commit4dacc257b855cf3acaa85bd9e7bc8fe0698cc9b8 (patch)
tree103f9d98142014a900bb7912e67d7338acd368f0
parent884cd785c870a40d804f445e27be5528a2940514 (diff)
downloadsonarqube-4dacc257b855cf3acaa85bd9e7bc8fe0698cc9b8.tar.gz
sonarqube-4dacc257b855cf3acaa85bd9e7bc8fe0698cc9b8.zip
SONAR-10948 Move UpdateProjectVisibility
from api/organizations to api/projects
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsModule.java5
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/project/ws/ProjectsWsModule.java13
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/project/ws/UpdateDefaultVisibilityAction.java (renamed from server/sonar-server/src/main/java/org/sonar/server/organization/ws/UpdateProjectVisibilityAction.java)47
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/organization/ws/OrganizationsWsModuleTest.java8
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/organization/ws/UpdateProjectVisibilityActionTest.java163
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/project/ws/ProjectsWsModuleTest.java20
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/project/ws/UpdateDefaultVisibilityActionTest.java105
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/OrganizationsService.java16
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/projects/ProjectsService.java23
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/projects/UpdateDefaultVisibilityRequest.java (renamed from sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/UpdateProjectVisibilityRequest.java)23
10 files changed, 183 insertions, 240 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsModule.java b/server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsModule.java
index 98616286efc..098106d29e1 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsModule.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsModule.java
@@ -40,9 +40,8 @@ public class OrganizationsWsModule extends Module {
OrganizationsWsSupport.class,
// actions
SearchAction.class,
- SearchMembersAction.class,
- // Update of project visibility is used on on-premise instances, not only on SonarCloud / Organizations
- UpdateProjectVisibilityAction.class);
+ SearchMembersAction.class);
+
if (config.getBoolean(SONARCLOUD_ENABLED.getKey()).orElse(false)) {
add(
OrganisationSupport.class,
diff --git a/server/sonar-server/src/main/java/org/sonar/server/project/ws/ProjectsWsModule.java b/server/sonar-server/src/main/java/org/sonar/server/project/ws/ProjectsWsModule.java
index a466e01ba45..da21fa5d78b 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/project/ws/ProjectsWsModule.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/project/ws/ProjectsWsModule.java
@@ -19,11 +19,19 @@
*/
package org.sonar.server.project.ws;
+import org.sonar.api.config.Configuration;
import org.sonar.core.platform.Module;
+import org.sonar.process.ProcessProperties;
import org.sonar.server.project.ProjectLifeCycleListenersImpl;
public class ProjectsWsModule extends Module {
+ private final Configuration configuration;
+
+ public ProjectsWsModule(Configuration configuration) {
+ this.configuration = configuration;
+ }
+
@Override
protected void configureModule() {
add(
@@ -41,5 +49,10 @@ public class ProjectsWsModule extends Module {
SearchMyProjectsAction.class,
SearchAction.class,
UpdateVisibilityAction.class);
+
+ if (!configuration.getBoolean(ProcessProperties.Property.SONARCLOUD_ENABLED.getKey()).orElse(false)) {
+ // Updating default visibility is not available in SonarCloud
+ add(UpdateDefaultVisibilityAction.class);
+ }
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/UpdateProjectVisibilityAction.java b/server/sonar-server/src/main/java/org/sonar/server/project/ws/UpdateDefaultVisibilityAction.java
index 1260e7d8937..e140e6aebf6 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/UpdateProjectVisibilityAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/project/ws/UpdateDefaultVisibilityAction.java
@@ -17,52 +17,48 @@
* 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.sonar.server.organization.ws;
+package org.sonar.server.project.ws;
import java.util.Optional;
+import org.sonar.api.server.ws.Change;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.organization.OrganizationDto;
-import org.sonar.db.permission.OrganizationPermission;
-import org.sonar.server.organization.BillingValidations;
-import org.sonar.server.organization.BillingValidationsProxy;
+import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.project.Visibility;
import org.sonar.server.user.UserSession;
-import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_ORGANIZATION;
+import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesException;
import static org.sonar.server.ws.WsUtils.checkFoundWithOptional;
-public class UpdateProjectVisibilityAction implements OrganizationsWsAction {
- static final String ACTION = "update_project_visibility";
+public class UpdateDefaultVisibilityAction implements ProjectsWsAction {
+ static final String ACTION = "update_default_visibility";
static final String PARAM_PROJECT_VISIBILITY = "projectVisibility";
private final UserSession userSession;
private final DbClient dbClient;
- private final BillingValidationsProxy billingValidations;
+ private final DefaultOrganizationProvider defaultOrganizationProvider;
- public UpdateProjectVisibilityAction(UserSession userSession, DbClient dbClient, BillingValidationsProxy billingValidations) {
+ public UpdateDefaultVisibilityAction(UserSession userSession, DbClient dbClient, DefaultOrganizationProvider defaultOrganizationProvider) {
this.userSession = userSession;
this.dbClient = dbClient;
- this.billingValidations = billingValidations;
+ this.defaultOrganizationProvider = defaultOrganizationProvider;
}
@Override
public void define(WebService.NewController context) {
WebService.NewAction action = context.createAction(ACTION)
.setPost(true)
- .setDescription("Update the default visibility for new projects of the specified organization.")
+ .setDescription("Update the default visibility for new projects.<br/>Requires System Administrator privileges")
+ .setChangelog(
+ new Change("7.3", "This WS used to be located at /api/organizations/update_project_visibility"))
.setInternal(true)
.setSince("6.4")
.setHandler(this);
- action.createParam(PARAM_ORGANIZATION)
- .setRequired(true)
- .setDescription("Organization key")
- .setExampleValue("foo-company");
-
action.createParam(PARAM_PROJECT_VISIBILITY)
.setRequired(true)
.setDescription("Default visibility for projects")
@@ -71,24 +67,17 @@ public class UpdateProjectVisibilityAction implements OrganizationsWsAction {
@Override
public void handle(Request request, Response response) throws Exception {
- String organizationKey = request.mandatoryParam(PARAM_ORGANIZATION);
boolean newProjectsPrivate = Visibility.isPrivate(request.mandatoryParam(PARAM_PROJECT_VISIBILITY));
+
try (DbSession dbSession = dbClient.openSession(false)) {
- Optional<OrganizationDto> optionalOrganization = dbClient.organizationDao().selectByKey(dbSession, organizationKey);
- OrganizationDto organization = checkFoundWithOptional(optionalOrganization, "No organization with key '" + organizationKey + "' can be found.");
- userSession.checkPermission(OrganizationPermission.ADMINISTER, organization.getUuid());
- checkCanUpdateProjectsVisibility(organization, newProjectsPrivate);
+ Optional<OrganizationDto> optionalOrganization = dbClient.organizationDao().selectByKey(dbSession, defaultOrganizationProvider.get().getKey());
+ OrganizationDto organization = checkFoundWithOptional(optionalOrganization, "No default organization.");
+ if (!userSession.isSystemAdministrator()) {
+ throw insufficientPrivilegesException();
+ }
dbClient.organizationDao().setNewProjectPrivate(dbSession, organization, newProjectsPrivate);
dbSession.commit();
}
response.noContent();
}
-
- private void checkCanUpdateProjectsVisibility(OrganizationDto organization, boolean newProjectsPrivate) {
- try {
- billingValidations.checkCanUpdateProjectVisibility(new BillingValidations.Organization(organization.getKey(), organization.getUuid()), newProjectsPrivate);
- } catch (BillingValidations.BillingValidationsException e) {
- throw new IllegalArgumentException(e.getMessage());
- }
- }
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/OrganizationsWsModuleTest.java b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/OrganizationsWsModuleTest.java
index 57f01dd1e4a..186c8811075 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/OrganizationsWsModuleTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/OrganizationsWsModuleTest.java
@@ -33,23 +33,23 @@ public class OrganizationsWsModuleTest {
private OrganizationsWsModule underTest = new OrganizationsWsModule(mapSettings.asConfig());
@Test
- public void verify_component_count_when_not_on_sonar_cloud() {
+ public void verify_component_count_when_on_SonarQube() {
mapSettings.setProperty("sonar.sonarcloud.enabled", false);
underTest.configure(container);
assertThat(container.getPicoContainer().getComponentAdapters())
- .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 5);
+ .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 4);
}
@Test
- public void verify_component_count_when_on_sonar_cloud() {
+ public void verify_component_count_when_on_SonarCloud() {
mapSettings.setProperty("sonar.sonarcloud.enabled", true);
underTest.configure(container);
assertThat(container.getPicoContainer().getComponentAdapters())
- .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 12);
+ .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 11);
}
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/UpdateProjectVisibilityActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/UpdateProjectVisibilityActionTest.java
deleted file mode 100644
index 5a48c5eee0e..00000000000
--- a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/UpdateProjectVisibilityActionTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2018 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.sonar.server.organization.ws;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.sonar.api.server.ws.WebService;
-import org.sonar.db.DbTester;
-import org.sonar.db.organization.OrganizationDto;
-import org.sonar.server.exceptions.ForbiddenException;
-import org.sonar.server.exceptions.NotFoundException;
-import org.sonar.server.organization.BillingValidations;
-import org.sonar.server.organization.BillingValidationsProxy;
-import org.sonar.server.tester.UserSessionRule;
-import org.sonar.server.ws.TestRequest;
-import org.sonar.server.ws.WsActionTester;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.sonar.db.permission.OrganizationPermission.ADMINISTER;
-import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_ORGANIZATION;
-import static org.sonar.server.organization.ws.UpdateProjectVisibilityAction.ACTION;
-import static org.sonar.server.organization.ws.UpdateProjectVisibilityAction.PARAM_PROJECT_VISIBILITY;
-
-public class UpdateProjectVisibilityActionTest {
- @Rule
- public DbTester dbTester = DbTester.create();
- @Rule
- public UserSessionRule userSession = UserSessionRule.standalone();
- @Rule
- public ExpectedException expectedException = ExpectedException.none();
-
- private BillingValidationsProxy billingValidations = mock(BillingValidationsProxy.class);
-
- private UpdateProjectVisibilityAction underTest = new UpdateProjectVisibilityAction(userSession, dbTester.getDbClient(), billingValidations);
- private WsActionTester wsTester = new WsActionTester(underTest);
-
- @Test
- public void verify_define() {
- WebService.Action action = wsTester.getDef();
- assertThat(action.key()).isEqualTo(ACTION);
- assertThat(action.isPost()).isTrue();
- assertThat(action.description()).isNotEmpty();
- assertThat(action.isInternal()).isTrue();
- assertThat(action.since()).isEqualTo("6.4");
- assertThat(action.handler()).isEqualTo(underTest);
- assertThat(action.changelog()).isEmpty();
-
- WebService.Param organization = action.param(PARAM_ORGANIZATION);
- assertThat(organization.isRequired()).isTrue();
- assertThat(organization.exampleValue()).isEqualTo("foo-company");
- assertThat(organization.description()).isEqualTo("Organization key");
-
- WebService.Param projectVisibility = action.param(PARAM_PROJECT_VISIBILITY);
- assertThat(projectVisibility.isRequired()).isTrue();
- assertThat(projectVisibility.possibleValues()).containsExactlyInAnyOrder("private", "public");
- assertThat(projectVisibility.description()).isEqualTo("Default visibility for projects");
- }
-
- @Test
- public void change_project_visibility_to_private() {
- OrganizationDto organization = dbTester.organizations().insert();
- dbTester.organizations().setNewProjectPrivate(organization, false);
- userSession.logIn().addPermission(ADMINISTER, organization);
-
- wsTester.newRequest()
- .setParam(PARAM_ORGANIZATION, organization.getKey())
- .setParam(PARAM_PROJECT_VISIBILITY, "private")
- .execute();
-
- assertThat(dbTester.getDbClient().organizationDao().getNewProjectPrivate(dbTester.getSession(), organization)).isTrue();
- }
-
- @Test
- public void change_project_visibility_to_public() {
- OrganizationDto organization = dbTester.organizations().insert();
- dbTester.organizations().setNewProjectPrivate(organization, true);
- userSession.logIn().addPermission(ADMINISTER, organization);
-
- wsTester.newRequest()
- .setParam(PARAM_ORGANIZATION, organization.getKey())
- .setParam(PARAM_PROJECT_VISIBILITY, "public")
- .execute();
- dbTester.organizations().getNewProjectPrivate(organization);
-
- assertThat(dbTester.organizations().getNewProjectPrivate(organization)).isFalse();
- }
-
- @Test
- public void fail_to_update_visibility_to_private_when_organization_is_not_allowed_to_use_private_projects() {
- OrganizationDto organization = dbTester.organizations().insert();
- dbTester.organizations().setNewProjectPrivate(organization, true);
- userSession.logIn().addPermission(ADMINISTER, organization);
- doThrow(new BillingValidations.BillingValidationsException("This organization cannot use project private")).when(billingValidations)
- .checkCanUpdateProjectVisibility(any(BillingValidations.Organization.class), eq(true));
-
- expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("This organization cannot use project private");
-
- wsTester.newRequest()
- .setParam(PARAM_ORGANIZATION, organization.getKey())
- .setParam(PARAM_PROJECT_VISIBILITY, "private")
- .execute();
- }
-
- @Test
- public void does_not_fail_to_update_visibility_to_public_when_organization_is_not_allowed_to_use_private_projects() {
- OrganizationDto organization = dbTester.organizations().insert();
- dbTester.organizations().setNewProjectPrivate(organization, true);
- userSession.logIn().addPermission(ADMINISTER, organization);
- doThrow(new BillingValidations.BillingValidationsException("This organization cannot use project private")).when(billingValidations)
- .checkCanUpdateProjectVisibility(any(BillingValidations.Organization.class), eq(true));
-
- wsTester.newRequest()
- .setParam(PARAM_ORGANIZATION, organization.getKey())
- .setParam(PARAM_PROJECT_VISIBILITY, "public")
- .execute();
-
- assertThat(dbTester.organizations().getNewProjectPrivate(organization)).isFalse();
- }
-
- @Test
- public void fail_if_organization_does_not_exist() {
- TestRequest request = wsTester.newRequest()
- .setParam(PARAM_ORGANIZATION, "does not exist")
- .setParam(PARAM_PROJECT_VISIBILITY, "private");
-
- expectedException.expect(NotFoundException.class);
- request.execute();
- }
-
- @Test
- public void should_fail_if_permissions_are_missing() {
- OrganizationDto organization = dbTester.organizations().insert();
- TestRequest request = wsTester.newRequest()
- .setParam(PARAM_ORGANIZATION, organization.getKey())
- .setParam(PARAM_PROJECT_VISIBILITY, "private");
-
- expectedException.expect(ForbiddenException.class);
- request.execute();
- }
-}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/project/ws/ProjectsWsModuleTest.java b/server/sonar-server/src/test/java/org/sonar/server/project/ws/ProjectsWsModuleTest.java
index 495366c2f14..1cca08e5e57 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/project/ws/ProjectsWsModuleTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/project/ws/ProjectsWsModuleTest.java
@@ -20,16 +20,32 @@
package org.sonar.server.project.ws;
import org.junit.Test;
+import org.sonar.api.config.internal.ConfigurationBridge;
+import org.sonar.api.config.internal.MapSettings;
import org.sonar.core.platform.ComponentContainer;
+import org.sonar.process.ProcessProperties;
import static org.assertj.core.api.Assertions.assertThat;
import static org.sonar.core.platform.ComponentContainer.COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER;
public class ProjectsWsModuleTest {
+
+ private MapSettings settings = new MapSettings();
+
+ @Test
+ public void verify_count_of_added_components_on_SonarQube() {
+ ComponentContainer container = new ComponentContainer();
+ new ProjectsWsModule(new ConfigurationBridge(settings)).configure(container);
+ assertThat(container.size()).isEqualTo(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 15);
+ }
+
@Test
- public void verify_count_of_added_components() {
+ public void verify_count_of_added_components_on_SonarCloud() {
ComponentContainer container = new ComponentContainer();
- new ProjectsWsModule().configure(container);
+ settings.setProperty(ProcessProperties.Property.SONARCLOUD_ENABLED.getKey(), true);
+
+ new ProjectsWsModule(new ConfigurationBridge(settings)).configure(container);
assertThat(container.size()).isEqualTo(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 14);
}
+
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/project/ws/UpdateDefaultVisibilityActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/project/ws/UpdateDefaultVisibilityActionTest.java
new file mode 100644
index 00000000000..6c9e8791ffd
--- /dev/null
+++ b/server/sonar-server/src/test/java/org/sonar/server/project/ws/UpdateDefaultVisibilityActionTest.java
@@ -0,0 +1,105 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 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.sonar.server.project.ws;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.server.ws.Change;
+import org.sonar.api.server.ws.WebService;
+import org.sonar.db.DbTester;
+import org.sonar.server.exceptions.ForbiddenException;
+import org.sonar.server.organization.DefaultOrganizationProvider;
+import org.sonar.server.organization.DefaultOrganizationProviderImpl;
+import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.ws.TestRequest;
+import org.sonar.server.ws.WsActionTester;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.tuple;
+import static org.sonar.server.project.ws.UpdateDefaultVisibilityAction.ACTION;
+import static org.sonar.server.project.ws.UpdateDefaultVisibilityAction.PARAM_PROJECT_VISIBILITY;
+
+public class UpdateDefaultVisibilityActionTest {
+ @Rule
+ public DbTester dbTester = DbTester.create();
+ @Rule
+ public UserSessionRule userSession = UserSessionRule.standalone();
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ private DefaultOrganizationProvider defaultOrganizationProvider = new DefaultOrganizationProviderImpl(dbTester.getDbClient());
+ private UpdateDefaultVisibilityAction underTest = new UpdateDefaultVisibilityAction(userSession, dbTester.getDbClient(), defaultOrganizationProvider);
+ private WsActionTester wsTester = new WsActionTester(underTest);
+
+ @Test
+ public void change_project_visibility_to_private() {
+ userSession.logIn().setSystemAdministrator();
+
+ wsTester.newRequest()
+ .setParam(PARAM_PROJECT_VISIBILITY, "private")
+ .execute();
+
+ assertThat(dbTester.getDbClient().organizationDao().getNewProjectPrivate(dbTester.getSession(), dbTester.getDefaultOrganization())).isTrue();
+ }
+
+ @Test
+ public void change_project_visibility_to_public() {
+ dbTester.organizations().setNewProjectPrivate(dbTester.getDefaultOrganization(), true);
+ userSession.logIn().setSystemAdministrator();
+
+ wsTester.newRequest()
+ .setParam(PARAM_PROJECT_VISIBILITY, "public")
+ .execute();
+
+ assertThat(dbTester.organizations().getNewProjectPrivate(dbTester.getDefaultOrganization())).isFalse();
+ }
+
+ @Test
+ public void fail_if_not_loggued_as_system_administrator() {
+ userSession.logIn();
+
+ TestRequest request = wsTester.newRequest()
+ .setParam(PARAM_PROJECT_VISIBILITY, "private");
+
+ expectedException.expect(ForbiddenException.class);
+ request.execute();
+ }
+
+ @Test
+ public void verify_define() {
+ WebService.Action action = wsTester.getDef();
+ assertThat(action.key()).isEqualTo(ACTION);
+ assertThat(action.isPost()).isTrue();
+ assertThat(action.description()).isNotEmpty();
+ assertThat(action.isInternal()).isTrue();
+ assertThat(action.since()).isEqualTo("6.4");
+ assertThat(action.handler()).isEqualTo(underTest);
+ assertThat(action.changelog())
+ .extracting(Change::getVersion, Change::getDescription)
+ .contains(tuple("7.3", "This WS used to be located at /api/organizations/update_project_visibility"));
+
+ WebService.Param projectVisibility = action.param(PARAM_PROJECT_VISIBILITY);
+ assertThat(projectVisibility.isRequired()).isTrue();
+ assertThat(projectVisibility.possibleValues()).containsExactlyInAnyOrder("private", "public");
+ assertThat(projectVisibility.description()).isEqualTo("Default visibility for projects");
+ }
+}
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/OrganizationsService.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/OrganizationsService.java
index 1ffc208f272..1ec8c2ba71d 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/OrganizationsService.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/OrganizationsService.java
@@ -172,20 +172,4 @@ public class OrganizationsService extends BaseService {
.setParam("url", request.getUrl()),
UpdateWsResponse.parser());
}
-
- /**
- *
- * This is part of the internal API.
- * This is a POST request.
- * @see <a href="https://next.sonarqube.com/sonarqube/web_api/api/organizations/update_project_visibility">Further information about this action online (including a response example)</a>
- * @since 6.4
- */
- public void updateProjectVisibility(UpdateProjectVisibilityRequest request) {
- call(
- new PostRequest(path("update_project_visibility"))
- .setParam("organization", request.getOrganization())
- .setParam("projectVisibility", request.getProjectVisibility())
- .setMediaType(MediaTypes.JSON)
- ).content();
- }
}
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/projects/ProjectsService.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/projects/ProjectsService.java
index 9af10fc42b0..2b1191b569d 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/projects/ProjectsService.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/projects/ProjectsService.java
@@ -22,14 +22,14 @@ package org.sonarqube.ws.client.projects;
import java.util.stream.Collectors;
import javax.annotation.Generated;
import org.sonarqube.ws.MediaTypes;
+import org.sonarqube.ws.Projects.BulkUpdateKeyWsResponse;
+import org.sonarqube.ws.Projects.CreateWsResponse;
+import org.sonarqube.ws.Projects.SearchMyProjectsWsResponse;
+import org.sonarqube.ws.Projects.SearchWsResponse;
import org.sonarqube.ws.client.BaseService;
import org.sonarqube.ws.client.GetRequest;
import org.sonarqube.ws.client.PostRequest;
import org.sonarqube.ws.client.WsConnector;
-import org.sonarqube.ws.Projects.BulkUpdateKeyWsResponse;
-import org.sonarqube.ws.Projects.CreateWsResponse;
-import org.sonarqube.ws.Projects.SearchWsResponse;
-import org.sonarqube.ws.Projects.SearchMyProjectsWsResponse;
/**
* @see <a href="https://next.sonarqube.com/sonarqube/web_api/api/projects">Further information about this web service online</a>
@@ -251,4 +251,19 @@ public class ProjectsService extends BaseService {
.setMediaType(MediaTypes.JSON)
).content();
}
+
+ /**
+ *
+ * This is part of the internal API.
+ * This is a POST request.
+ * @see <a href="https://next.sonarqube.com/sonarqube/web_api/api/projects/update_default_visibility">Further information about this action online (including a response example)</a>
+ * @since 6.4
+ */
+ public void updateDefaultVisibility(UpdateDefaultVisibilityRequest request) {
+ call(
+ new PostRequest(path("update_default_visibility"))
+ .setParam("projectVisibility", request.getProjectVisibility())
+ .setMediaType(MediaTypes.JSON)
+ ).content();
+ }
}
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/UpdateProjectVisibilityRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/projects/UpdateDefaultVisibilityRequest.java
index 378d5f33fb7..7f5b2ae7d48 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/organizations/UpdateProjectVisibilityRequest.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/projects/UpdateDefaultVisibilityRequest.java
@@ -17,45 +17,30 @@
* 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.organizations;
+package org.sonarqube.ws.client.projects;
-import java.util.List;
import javax.annotation.Generated;
/**
* This is part of the internal API.
* This is a POST request.
- * @see <a href="https://next.sonarqube.com/sonarqube/web_api/api/organizations/update_project_visibility">Further information about this action online (including a response example)</a>
+ * @see <a href="https://next.sonarqube.com/sonarqube/web_api/api/projects/update_default_visibility">Further information about this action online (including a response example)</a>
* @since 6.4
*/
@Generated("sonar-ws-generator")
-public class UpdateProjectVisibilityRequest {
+public class UpdateDefaultVisibilityRequest {
- private String organization;
private String projectVisibility;
/**
* This is a mandatory parameter.
- * Example value: "foo-company"
- */
- public UpdateProjectVisibilityRequest setOrganization(String organization) {
- this.organization = organization;
- return this;
- }
-
- public String getOrganization() {
- return organization;
- }
-
- /**
- * This is a mandatory parameter.
* Possible values:
* <ul>
* <li>"private"</li>
* <li>"public"</li>
* </ul>
*/
- public UpdateProjectVisibilityRequest setProjectVisibility(String projectVisibility) {
+ public UpdateDefaultVisibilityRequest setProjectVisibility(String projectVisibility) {
this.projectVisibility = projectVisibility;
return this;
}