From 3ee8ec8dec07179ea5eb72cf7e3a5cc584f5734c Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Tue, 10 Apr 2018 18:02:07 +0200 Subject: [PATCH] SONAR-10569 Move update_project_visibility from organizations to permissions --- .../ws/OrganizationsWsModule.java | 7 +- .../ws/OrganizationsWsModuleTest.java | 2 +- .../authorization/AuthorizationSuite.java | 2 +- .../authorization/ProjectPermissionsTest.java | 94 +++++++++++++++++++ .../ProjectPermissionsTest.java | 80 ---------------- 5 files changed, 100 insertions(+), 85 deletions(-) create mode 100644 tests/src/test/java/org/sonarqube/tests/authorization/ProjectPermissionsTest.java delete mode 100644 tests/src/test/java/org/sonarqube/tests/projectAdministration/ProjectPermissionsTest.java 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 3a60efbdea1..629674ff0d9 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 @@ -39,7 +39,9 @@ public class OrganizationsWsModule extends Module { OrganizationsWsSupport.class, // actions SearchAction.class, - SearchMembersAction.class); + SearchMembersAction.class, + // Update of project visibility is used on on-premise instances, not only on SonarCloud / Organizations + UpdateProjectVisibilityAction.class); if (config.getBoolean(SONARCLOUD_ENABLED.getKey()).orElse(false)) { add( EnableSupportAction.class, @@ -47,8 +49,7 @@ public class OrganizationsWsModule extends Module { CreateAction.class, DeleteAction.class, RemoveMemberAction.class, - UpdateAction.class, - UpdateProjectVisibilityAction.class); + UpdateAction.class); } } 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 dc857653ccc..7f694da13de 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 @@ -39,7 +39,7 @@ public class OrganizationsWsModuleTest { underTest.configure(container); assertThat(container.getPicoContainer().getComponentAdapters()) - .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 4); + .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 5); } @Test diff --git a/tests/src/test/java/org/sonarqube/tests/authorization/AuthorizationSuite.java b/tests/src/test/java/org/sonarqube/tests/authorization/AuthorizationSuite.java index 23c03e7888c..7e0c8cb864c 100644 --- a/tests/src/test/java/org/sonarqube/tests/authorization/AuthorizationSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/authorization/AuthorizationSuite.java @@ -34,7 +34,7 @@ import static util.ItUtils.xooPlugin; IssuePermissionTest.class, PermissionSearchTest.class, PermissionTemplatePageTest.class, - + ProjectPermissionsTest.class, ProvisioningPermissionTest.class, QualityProfileAdminPermissionTest.class, SystemPasscodeTest.class diff --git a/tests/src/test/java/org/sonarqube/tests/authorization/ProjectPermissionsTest.java b/tests/src/test/java/org/sonarqube/tests/authorization/ProjectPermissionsTest.java new file mode 100644 index 00000000000..93d0d754dcd --- /dev/null +++ b/tests/src/test/java/org/sonarqube/tests/authorization/ProjectPermissionsTest.java @@ -0,0 +1,94 @@ +/* + * 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.sonarqube.tests.authorization; + +import com.sonar.orchestrator.Orchestrator; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.sonarqube.qa.util.Tester; +import org.sonarqube.qa.util.pageobjects.ProjectPermissionsPage; +import org.sonarqube.ws.Projects.CreateWsResponse.Project; +import org.sonarqube.ws.Users; +import org.sonarqube.ws.client.components.ShowRequest; +import org.sonarqube.ws.client.organizations.UpdateProjectVisibilityRequest; +import org.sonarqube.ws.client.projects.UpdateVisibilityRequest; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ProjectPermissionsTest { + + @ClassRule + public static Orchestrator orchestrator = AuthorizationSuite.ORCHESTRATOR; + + @Rule + public Tester tester = new Tester(orchestrator) + // all the tests of AuthorizationSuite must disable organizations + .disableOrganizations(); + + @Test + public void change_project_visibility_from_ui() { + Project project = tester.projects().provision(); + Users.CreateWsResponse.User administrator = tester.users().generateAdministrator(); + + ProjectPermissionsPage page = tester.openBrowser().logIn() + .submitCredentials(administrator.getLogin()) + .openProjectPermissions(project.getKey()); + + page + .shouldBePublic() + .turnToPrivate() + .shouldBePrivate() + .turnToPublic() + .shouldBePublic(); + } + + @Test + public void change_project_visibility_from_ws() { + Project project = tester.projects().provision(); + assertThat(tester.wsClient().components().show(new ShowRequest().setComponent(project.getKey())).getComponent().getVisibility()).isEqualTo("public"); + + tester.wsClient().projects().updateVisibility(new UpdateVisibilityRequest().setProject(project.getKey()).setVisibility("private")); + + assertThat(tester.wsClient().components().show(new ShowRequest().setComponent(project.getKey())).getComponent().getVisibility()).isEqualTo("private"); + } + + /** + * SONAR-10569 + */ + @Test + public void change_default_project_visibility_from_ws() { + try { + tester.wsClient().organizations().updateProjectVisibility(new UpdateProjectVisibilityRequest() + .setOrganization(tester.organizations().getDefaultOrganization().getKey()) + .setProjectVisibility("private")); + + Project project = tester.projects().provision(); + + assertThat(tester.wsClient().components().show(new ShowRequest().setComponent(project.getKey())).getComponent().getVisibility()).isEqualTo("private"); + + } finally { + // Restore default visibility to public to not break other tests + tester.wsClient().organizations().updateProjectVisibility(new UpdateProjectVisibilityRequest() + .setOrganization(tester.organizations().getDefaultOrganization().getKey()) + .setProjectVisibility("public")); + } + } +} diff --git a/tests/src/test/java/org/sonarqube/tests/projectAdministration/ProjectPermissionsTest.java b/tests/src/test/java/org/sonarqube/tests/projectAdministration/ProjectPermissionsTest.java deleted file mode 100644 index b674f11ef1a..00000000000 --- a/tests/src/test/java/org/sonarqube/tests/projectAdministration/ProjectPermissionsTest.java +++ /dev/null @@ -1,80 +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.sonarqube.tests.projectAdministration; - -import com.sonar.orchestrator.Orchestrator; -import com.sonar.orchestrator.build.SonarScanner; -import org.sonarqube.tests.Category1Suite; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.ClassRule; -import org.junit.Rule; -import org.junit.Test; -import org.sonarqube.qa.util.pageobjects.Navigation; -import org.sonarqube.qa.util.pageobjects.ProjectPermissionsPage; -import util.user.UserRule; - -import static util.ItUtils.projectDir; -import static util.selenium.Selenese.runSelenese; - -public class ProjectPermissionsTest { - - @ClassRule - public static Orchestrator orchestrator = Category1Suite.ORCHESTRATOR; - - @Rule - public UserRule userRule = UserRule.from(orchestrator); - - private Navigation nav = Navigation.create(orchestrator); - private String adminUser; - - @BeforeClass - public static void beforeClass() { - executeBuild("project-permissions-project", "Test Project"); - executeBuild("project-permissions-project-2", "Another Test Project"); - } - - @Before - public void before() { - adminUser = userRule.createAdminUser(); - } - - @Test - public void test_project_permissions_page_shows_only_single_project() { - runSelenese(orchestrator, "/projectAdministration/ProjectPermissionsTest/test_project_permissions_page_shows_only_single_project.html"); - } - - @Test - public void change_project_visibility() { - ProjectPermissionsPage page = nav.logIn().submitCredentials(adminUser).openProjectPermissions("project-permissions-project"); - page - .shouldBePublic() - .turnToPrivate() - .turnToPublic(); - } - - private static void executeBuild(String projectKey, String projectName) { - orchestrator.executeBuild( - SonarScanner.create(projectDir("shared/xoo-sample")) - .setProjectKey(projectKey) - .setProjectName(projectName) - ); - } -} -- 2.39.5