]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-15702 Add 'canBrowseAllChildProjects' to ComponentAction
authorJacek <jacek.poreda@sonarsource.com>
Mon, 29 Nov 2021 10:09:49 +0000 (11:09 +0100)
committersonartech <sonartech@sonarsource.com>
Fri, 3 Dec 2021 20:03:33 +0000 (20:03 +0000)
server/sonar-webserver-webapi/src/main/java/org/sonar/server/ui/ws/ComponentAction.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/ui/ws/ComponentActionTest.java

index 521d9aa52a463246fe4a94cbed5c2a27201be284..abbcc844f425685ad630bcfb806c7962a8ab63ed 100644 (file)
@@ -213,6 +213,9 @@ public class ComponentAction implements NavigationWsAction {
     if (branch != null) {
       json.prop("branch", branch);
     }
+    if (Qualifiers.APP.equals(component.qualifier())) {
+      json.prop("canBrowseAllChildProjects", userSession.hasChildProjectsPermission(USER, component));
+    }
     if (QUALIFIERS_WITH_VISIBILITY.contains(component.qualifier())) {
       json.prop("visibility", Visibility.getLabel(component.isPrivate()));
     }
index a12f8aa65e466d8c12877075465438ddffc9e2d1..149999a499dc28189a430f898147861d879a1ec7 100644 (file)
@@ -81,6 +81,7 @@ import static org.mockito.Mockito.when;
 import static org.sonar.api.measures.CoreMetrics.QUALITY_PROFILES_KEY;
 import static org.sonar.api.utils.DateUtils.parseDateTime;
 import static org.sonar.api.web.page.Page.Scope.COMPONENT;
+import static org.sonar.db.component.ComponentDbTester.toProjectDto;
 import static org.sonar.db.component.ComponentTesting.newDirectory;
 import static org.sonar.db.component.ComponentTesting.newFileDto;
 import static org.sonar.db.component.ComponentTesting.newModuleDto;
@@ -244,6 +245,42 @@ public class ComponentActionTest {
       "}");
   }
 
+  @Test
+  public void return_canBrowseAllChildProjects_when_component_is_an_application() {
+    db.qualityGates().createDefaultQualityGate();
+    ComponentDto application1 = db.components().insertPrivateApplication();
+    ComponentDto project11 = db.components().insertPrivateProject();
+    ComponentDto project12 = db.components().insertPrivateProject();
+    userSession.registerApplication(
+      toProjectDto(application1, 1L),
+      toProjectDto(project11, 1L),
+      toProjectDto(project12, 1L));
+    userSession.addProjectPermission(UserRole.USER, application1, project11, project12);
+
+    ComponentDto application2 = db.components().insertPrivateApplication();
+    ComponentDto project21 = db.components().insertPrivateProject();
+    ComponentDto project22 = db.components().insertPrivateProject();
+    userSession.registerApplication(
+      toProjectDto(application2, 1L),
+      toProjectDto(project21, 1L),
+      toProjectDto(project22, 1L));
+    userSession.addProjectPermission(UserRole.USER, application2, project21);
+
+    init();
+
+    // access to all projects (project11, project12)
+    String json = execute(application1.getDbKey());
+    assertJson(json).isSimilarTo("{" +
+      "\"canBrowseAllChildProjects\":true" +
+      "}");
+
+    // access to some projects (project11)
+    json = execute(application2.getDbKey());
+    assertJson(json).isSimilarTo("{" +
+      "\"canBrowseAllChildProjects\":false" +
+      "}");
+  }
+
   @Test
   public void return_component_info_when_snapshot() {
     ComponentDto project = insertProject();