]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-9006 add canCustomizeRule to response of api/rules/app
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Thu, 23 Mar 2017 15:18:39 +0000 (16:18 +0100)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Fri, 24 Mar 2017 09:38:15 +0000 (10:38 +0100)
server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java
server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java

index 5c008df76d9aca1ed7cfb3fac6fbf8bfa2d9516e..c757ed20a075eb53f84d1078cdcd7067c8f98a2b 100644 (file)
@@ -30,6 +30,7 @@ import org.sonar.db.DbSession;
 import org.sonar.db.organization.OrganizationDto;
 import org.sonar.db.permission.OrganizationPermission;
 import org.sonar.db.qualityprofile.QualityProfileDto;
+import org.sonar.server.organization.DefaultOrganizationProvider;
 import org.sonar.server.user.UserSession;
 
 import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_ORGANIZATION;
@@ -40,12 +41,15 @@ public class AppAction implements RulesWsAction {
   private final DbClient dbClient;
   private final UserSession userSession;
   private final RuleWsSupport wsSupport;
+  private final DefaultOrganizationProvider defaultOrganizationProvider;
 
-  public AppAction(Languages languages, DbClient dbClient, UserSession userSession, RuleWsSupport wsSupport) {
+  public AppAction(Languages languages, DbClient dbClient, UserSession userSession, RuleWsSupport wsSupport,
+    DefaultOrganizationProvider defaultOrganizationProvider) {
     this.languages = languages;
     this.dbClient = dbClient;
     this.userSession = userSession;
     this.wsSupport = wsSupport;
+    this.defaultOrganizationProvider = defaultOrganizationProvider;
   }
 
   @Override
@@ -81,8 +85,9 @@ public class AppAction implements RulesWsAction {
   }
 
   private void addPermissions(OrganizationDto organization, JsonWriter json) {
-    boolean canWrite = userSession.hasPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization);
-    json.prop("canWrite", canWrite);
+    boolean isAdminister = userSession.hasPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization);
+    json.prop("canWrite", isAdminister);
+    json.prop("canCustomizeRule", isAdminister && organization.getUuid().equals(defaultOrganizationProvider.get().getUuid()));
   }
 
   private void addProfiles(DbSession dbSession, OrganizationDto organization, JsonWriter json) {
index a764dc6ab405cce96cddce30038661ba68e2f547..9c4e519c70d0ff67a2c6c634c851c2e48085cfa5 100644 (file)
@@ -58,7 +58,7 @@ public class AppActionTest {
   private Languages languages = new Languages(LANG1, LANG2);
   private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db);
   private RuleWsSupport wsSupport = new RuleWsSupport(db.getDbClient(), userSession, defaultOrganizationProvider);
-  private AppAction underTest = new AppAction(languages, db.getDbClient(), userSession, wsSupport);
+  private AppAction underTest = new AppAction(languages, db.getDbClient(), userSession, wsSupport, defaultOrganizationProvider);
   private WsActionTester tester = new WsActionTester(underTest);
 
   @Test
@@ -209,6 +209,51 @@ public class AppActionTest {
     assertJson(json).isSimilarTo("{ \"canWrite\": false }");
   }
 
+  @Test
+  public void canCustomizeRule_is_true_if_user_is_profile_administrator_of_default_organization_and_no_organization_is_specified() {
+    userSession.addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, db.getDefaultOrganization());
+
+    String json = tester.newRequest().execute().getInput();
+
+    assertJson(json).isSimilarTo("{ \"canCustomizeRule\": true }");
+  }
+
+  @Test
+  public void canCustomizeRule_is_true_if_user_is_profile_administrator_of_specified_default_organization() {
+    userSession.addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, db.getDefaultOrganization());
+
+    String json = tester.newRequest()
+        .setParam("organization", db.getDefaultOrganization().getKey())
+        .execute().getInput();
+
+    assertJson(json).isSimilarTo("{ \"canCustomizeRule\": true }");
+  }
+
+  @Test
+  public void canCustomizeRule_is_false_if_user_is_profile_administrator_of_specified_non_default_organization() {
+    OrganizationDto organization = db.organizations().insert();
+    userSession.addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization);
+
+    String json = tester.newRequest()
+      .setParam("organization", organization.getKey())
+      .execute().getInput();
+
+    assertJson(json).isSimilarTo("{ \"canCustomizeRule\": false }");
+  }
+
+  @Test
+  public void canCustomizeRule_is_false_if_user_is_not_profile_administrator_of_specified_non_default_organization() {
+    OrganizationDto organization1 = db.organizations().insert();
+    OrganizationDto organization2 = db.organizations().insert();
+    userSession.addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization1);
+
+    String json = tester.newRequest()
+      .setParam("organization", organization2.getKey())
+      .execute().getInput();
+
+    assertJson(json).isSimilarTo("{ \"canCustomizeRule\": false }");
+  }
+
   private void insertRules() {
     RuleRepositoryDto repo1 = new RuleRepositoryDto("xoo", "xoo", "SonarQube");
     RuleRepositoryDto repo2 = new RuleRepositoryDto("squid", "ws", "SonarQube");