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;
.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)
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");
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;
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;
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");
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)
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);
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);
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);
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);