]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10569 Move update_project_visibility from organizations to permissions
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Tue, 10 Apr 2018 16:02:07 +0000 (18:02 +0200)
committerSonarTech <sonartech@sonarsource.com>
Fri, 13 Apr 2018 18:20:48 +0000 (20:20 +0200)
server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsModule.java
server/sonar-server/src/test/java/org/sonar/server/organization/ws/OrganizationsWsModuleTest.java
tests/src/test/java/org/sonarqube/tests/authorization/AuthorizationSuite.java
tests/src/test/java/org/sonarqube/tests/authorization/ProjectPermissionsTest.java [new file with mode: 0644]
tests/src/test/java/org/sonarqube/tests/projectAdministration/ProjectPermissionsTest.java [deleted file]

index 3a60efbdea19c4f5343b8e7ec5af5cd647e7db10..629674ff0d939fdc838170ead7fe11d278dbd726 100644 (file)
@@ -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);
     }
   }
 
index dc857653cccf4126683d65434cb73da15c3cc923..7f694da13de73e1868252482833127804e97a84b 100644 (file)
@@ -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
index 23c03e7888c3f76da48ede907055933180330517..7e0c8cb864c499f1c6f578ec7762d1ac10572f99 100644 (file)
@@ -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 (file)
index 0000000..93d0d75
--- /dev/null
@@ -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 (file)
index b674f11..0000000
+++ /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)
-    );
-  }
-}