]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-9107 add “projectVisibility” to api/navigation/organization
authorDaniel Schwarz <daniel.schwarz@sonarsource.com>
Tue, 25 Apr 2017 09:27:11 +0000 (11:27 +0200)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Thu, 27 Apr 2017 12:42:50 +0000 (14:42 +0200)
server/sonar-server/src/main/java/org/sonar/server/ui/ws/OrganizationAction.java
server/sonar-server/src/test/java/org/sonar/server/ui/ws/OrganizationActionTest.java

index a834d1c8372f90d1cac207c2094721a0b2c9bf3f..61025dccae356a3336cbb1e4a9a44e6cfabe565f 100644 (file)
@@ -22,6 +22,7 @@ package org.sonar.server.ui.ws;
 import java.util.List;
 import java.util.function.Consumer;
 import java.util.function.Predicate;
+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;
@@ -63,7 +64,8 @@ public class OrganizationAction implements NavigationWsAction {
       .setHandler(this)
       .setInternal(true)
       .setResponseExample(getClass().getResource("organization-example.json"))
-      .setSince("6.3");
+      .setSince("6.3")
+      .setChangelog(new Change("6.4", "The field 'projectVisibility' is added"));
 
     projectNavigation.createParam(PARAM_ORGANIZATION)
       .setRequired(true)
@@ -78,22 +80,24 @@ public class OrganizationAction implements NavigationWsAction {
       OrganizationDto organization = checkFoundWithOptional(
         dbClient.organizationDao().selectByKey(dbSession, organizationKey),
         "No organization with key '%s'", organizationKey);
+      boolean newProjectPrivate = dbClient.organizationDao().getNewProjectPrivate(dbSession, organization);
 
       JsonWriter json = response.newJsonWriter();
       json.beginObject();
-      writeOrganization(json, organization);
+      writeOrganization(json, organization, newProjectPrivate);
       json.endObject()
         .close();
     }
   }
 
-  private void writeOrganization(JsonWriter json, OrganizationDto organization) {
+  private void writeOrganization(JsonWriter json, OrganizationDto organization, boolean newProjectPrivate) {
     json.name("organization")
       .beginObject()
       .prop("canAdmin", userSession.hasPermission(OrganizationPermission.ADMINISTER, organization))
       .prop("canProvisionProjects", userSession.hasPermission(OrganizationPermission.PROVISION_PROJECTS, organization))
       .prop("canDelete", organization.isGuarded() ? userSession.isSystemAdministrator() : userSession.hasPermission(OrganizationPermission.ADMINISTER, organization))
-      .prop("isDefault", organization.getKey().equals(defaultOrganizationProvider.get().getKey()));
+      .prop("isDefault", organization.getKey().equals(defaultOrganizationProvider.get().getKey()))
+      .prop("projectVisibility", newProjectPrivate ? "private" : "public");
     Predicate<Page> personalOrgForBilling = page -> organization.getUserId() == null || !page.getKey().startsWith("billing/");
     List<Page> pages = pageRepository.getOrganizationPages(false).stream().filter(personalOrgForBilling).collect(toList());
     json.name("pages");
index 813f070d5abb4200ad6b6745eda2dfd91a2e8481..19279a939bbddbdb159e1758f9a113c6b4f2a854 100644 (file)
@@ -23,6 +23,7 @@ import javax.annotation.Nullable;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.sonar.api.server.ws.Change;
 import org.sonar.api.server.ws.WebService;
 import org.sonar.api.utils.System2;
 import org.sonar.api.web.page.Page;
@@ -40,6 +41,7 @@ import org.sonar.server.ws.TestResponse;
 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.mockito.Matchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -69,6 +71,8 @@ public class OrganizationActionTest {
     assertThat(def.isInternal()).isTrue();
     assertThat(def.description()).isEqualTo("Get information concerning organization navigation for the current user");
     assertThat(def.since()).isEqualTo("6.3");
+    assertThat(def.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder(
+      tuple("6.4", "The field 'projectVisibility' is added"));
 
     assertThat(def.params()).hasSize(1);
     WebService.Param organization = def.param("organization");
@@ -89,8 +93,7 @@ public class OrganizationActionTest {
   public void json_example() {
     initWithPages(
       Page.builder("my-plugin/org-page").setName("Organization page").setScope(ORGANIZATION).build(),
-      Page.builder("my-plugin/org-admin-page").setName("Organization admin page").setScope(ORGANIZATION).setAdmin(true).build()
-    );
+      Page.builder("my-plugin/org-admin-page").setName("Organization admin page").setScope(ORGANIZATION).setAdmin(true).build());
     OrganizationDto organization = dbTester.organizations().insert(dto -> dto.setGuarded(true));
     userSession.logIn()
       .addPermission(ADMINISTER, organization)
@@ -106,8 +109,7 @@ public class OrganizationActionTest {
   public void filter_out_admin_pages_when_user_is_not_admin() {
     initWithPages(
       Page.builder("my-plugin/org-page").setName("Organization page").setScope(ORGANIZATION).build(),
-      Page.builder("my-plugin/org-admin-page").setName("Organization admin page").setScope(ORGANIZATION).setAdmin(true).build()
-    );
+      Page.builder("my-plugin/org-admin-page").setName("Organization admin page").setScope(ORGANIZATION).setAdmin(true).build());
     OrganizationDto organization = dbTester.organizations().insert(dto -> dto.setGuarded(true));
     userSession.logIn()
       .addPermission(PROVISION_PROJECTS, organization);
@@ -125,8 +127,7 @@ public class OrganizationActionTest {
       Page.builder("my-plugin/org-page").setName("Organization page").setScope(ORGANIZATION).build(),
       Page.builder("my-plugin/org-admin-page").setName("Organization admin page").setScope(ORGANIZATION).setAdmin(true).build(),
       Page.builder("billing/org-page").setName("Organization page").setScope(ORGANIZATION).build(),
-      Page.builder("billing/org-admin-page").setName("Organization admin page").setScope(ORGANIZATION).setAdmin(true).build()
-    );
+      Page.builder("billing/org-admin-page").setName("Organization admin page").setScope(ORGANIZATION).setAdmin(true).build());
     OrganizationDto organization = dbTester.organizations().insert(dto -> dto.setUserId(101));
     userSession.logIn().addPermission(ADMINISTER, organization);
 
@@ -142,8 +143,7 @@ public class OrganizationActionTest {
   public void include_billing_pages_for_non_personal_organizations() {
     initWithPages(
       Page.builder("billing/org-page").setName("Organization page").setScope(ORGANIZATION).build(),
-      Page.builder("billing/org-admin-page").setName("Organization admin page").setScope(ORGANIZATION).setAdmin(true).build()
-    );
+      Page.builder("billing/org-admin-page").setName("Organization admin page").setScope(ORGANIZATION).setAdmin(true).build());
     OrganizationDto organization = dbTester.organizations().insert(dto -> dto.setUserId(null));
     userSession.logIn().addPermission(ADMINISTER, organization);
 
@@ -238,6 +238,24 @@ public class OrganizationActionTest {
     verifyResponse(executeRequest(org2), false, true, false);
   }
 
+  @Test
+  public void returns_project_visibility_private() {
+    OrganizationDto organization = dbTester.organizations().insert();
+    dbClient.organizationDao().setNewProjectPrivate(dbTester.getSession(), organization, true);
+    dbTester.commit();
+    userSession.logIn().addPermission(PROVISION_PROJECTS, organization);
+    assertJson(executeRequest(organization).getInput()).isSimilarTo("{\"organization\": {\"projectVisibility\": \"private\"}}");
+  }
+
+  @Test
+  public void returns_project_visibility_public() {
+    OrganizationDto organization = dbTester.organizations().insert();
+    dbClient.organizationDao().setNewProjectPrivate(dbTester.getSession(), organization, false);
+    dbTester.commit();
+    userSession.logIn().addPermission(PROVISION_PROJECTS, organization);
+    assertJson(executeRequest(organization).getInput()).isSimilarTo("{\"organization\": {\"projectVisibility\": \"public\"}}");
+  }
+
   private void initWithPages(Page... pages) {
     PluginRepository pluginRepository = mock(PluginRepository.class);
     when(pluginRepository.hasPlugin(anyString())).thenReturn(true);