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,
CreateAction.class,
DeleteAction.class,
RemoveMemberAction.class,
- UpdateAction.class,
- UpdateProjectVisibilityAction.class);
+ UpdateAction.class);
}
}
underTest.configure(container);
assertThat(container.getPicoContainer().getComponentAdapters())
- .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 4);
+ .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 5);
}
@Test
IssuePermissionTest.class,
PermissionSearchTest.class,
PermissionTemplatePageTest.class,
-
+ ProjectPermissionsTest.class,
ProvisioningPermissionTest.class,
QualityProfileAdminPermissionTest.class,
SystemPasscodeTest.class
--- /dev/null
+/*
+ * 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"));
+ }
+ }
+}
+++ /dev/null
-/*
- * 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)
- );
- }
-}