package org.sonar.server.ui.ws;
import java.util.List;
+import org.sonar.api.resources.Qualifiers;
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.web.page.Page;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
+import org.sonar.db.component.ComponentQuery;
import org.sonar.db.organization.OrganizationDto;
import org.sonar.server.organization.BillingValidations;
import org.sonar.server.organization.BillingValidationsProxy;
import org.sonar.server.ui.PageRepository;
import org.sonar.server.user.UserSession;
+import static org.sonar.db.organization.OrganizationDto.Subscription.PAID;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER;
import static org.sonar.db.permission.OrganizationPermission.PROVISION_PROJECTS;
import static org.sonar.server.ws.KeyExamples.KEY_ORG_EXAMPLE_001;
OrganizationDto organization = checkFoundWithOptional(
dbClient.organizationDao().selectByKey(dbSession, organizationKey),
"No organization with key '%s'", organizationKey);
+ if (organization.getSubscription() == PAID) {
+ // If the organization is PAID without any public project then
+ // the organization is only visible to members
+ ComponentQuery query = ComponentQuery.builder()
+ .setQualifiers(Qualifiers.PROJECT)
+ .setPrivate(false)
+ .build();
+ if (dbClient.componentDao().countByQuery(dbSession, organization.getUuid(), query) == 0) {
+ userSession.checkMembership(organization);
+ }
+ }
boolean newProjectPrivate = dbClient.organizationDao().getNewProjectPrivate(dbSession, organization);
JsonWriter json = response.newJsonWriter();
import org.sonar.db.DbClient;
import org.sonar.db.DbTester;
import org.sonar.db.organization.OrganizationDto;
+import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.organization.BillingValidations;
import org.sonar.server.organization.BillingValidationsProxy;
import org.sonar.server.organization.DefaultOrganizationProvider;
@Test
public void return_subscription_flag() {
+ OrganizationDto freeOrganization = db.organizations().insert(o -> o.setSubscription(FREE));
+ assertJson(executeRequest(freeOrganization).getInput()).isSimilarTo("{\"organization\": {\"subscription\": \"FREE\"}}");
+
+ OrganizationDto sonarQubeOrganization = db.organizations().insert(o -> o.setSubscription(SONARQUBE));
+ assertJson(executeRequest(sonarQubeOrganization).getInput()).isSimilarTo("{\"organization\": {\"subscription\": \"SONARQUBE\"}}");
+
OrganizationDto paidOrganization = db.organizations().insert(o -> o.setSubscription(PAID));
+
+ userSession.logIn()
+ .addMembership(paidOrganization);
+
assertJson(executeRequest(paidOrganization).getInput()).isSimilarTo("{\"organization\": {\"subscription\": \"PAID\"}}");
+ }
+ @Test
+ public void do_not_throws_FE_when_not_member_on_free_organization() {
OrganizationDto freeOrganization = db.organizations().insert(o -> o.setSubscription(FREE));
- assertJson(executeRequest(freeOrganization).getInput()).isSimilarTo("{\"organization\": {\"subscription\": \"FREE\"}}");
+ executeRequest(freeOrganization).getInput();
+ }
+ @Test
+ public void do_not_throws_FE_when_not_member_on_sonarqube_organization() {
OrganizationDto sonarQubeOrganization = db.organizations().insert(o -> o.setSubscription(SONARQUBE));
- assertJson(executeRequest(sonarQubeOrganization).getInput()).isSimilarTo("{\"organization\": {\"subscription\": \"SONARQUBE\"}}");
+ executeRequest(sonarQubeOrganization).getInput();
+ }
+
+ @Test
+ public void throws_FE_when_not_member_on_private_organization() {
+ OrganizationDto paidOrganization = db.organizations().insert(o -> o.setSubscription(PAID));
+
+ expectedException.expect(ForbiddenException.class);
+ expectedException.expectMessage("You're not member of organization");
+ assertJson(executeRequest(paidOrganization).getInput()).isSimilarTo("{\"organization\": {\"subscription\": \"PAID\"}}");
+ }
+
+ @Test
+ public void do_no_throws_FE_when_not_member_on_private_organization_with_public_project() {
+ OrganizationDto paidOrganization = db.organizations().insert(o -> o.setSubscription(PAID));
+ db.components().insertPublicProject(paidOrganization);
+
+ assertJson(executeRequest(paidOrganization).getInput()).isSimilarTo("{\"organization\": {\"subscription\": \"PAID\"}}");
+ }
+
+ @Test
+ public void return_information_when_member_of_the_organization() {
+ OrganizationDto paidOrganization = db.organizations().insert(o -> o.setSubscription(PAID));
+ userSession.logIn()
+ .addMembership(paidOrganization);
+
+ executeRequest(paidOrganization).getInput();
}
@Test