]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8864 add canCreateCustomRule to response of api/rules/app 1852/head
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Thu, 23 Mar 2017 15:36:01 +0000 (16:36 +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 c757ed20a075eb53f84d1078cdcd7067c8f98a2b..1a16c72a21e8c87f9590681ab302a8dd3830af56 100644 (file)
@@ -88,6 +88,7 @@ public class AppAction implements RulesWsAction {
     boolean isAdminister = userSession.hasPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization);
     json.prop("canWrite", isAdminister);
     json.prop("canCustomizeRule", isAdminister && organization.getUuid().equals(defaultOrganizationProvider.get().getUuid()));
+    json.prop("canCreateCustomRule", isAdminister && organization.getUuid().equals(defaultOrganizationProvider.get().getUuid()));
   }
 
   private void addProfiles(DbSession dbSession, OrganizationDto organization, JsonWriter json) {
index 9c4e519c70d0ff67a2c6c634c851c2e48085cfa5..da6ec1937a727e36791f71251e309e159da5bbee 100644 (file)
@@ -254,6 +254,51 @@ public class AppActionTest {
     assertJson(json).isSimilarTo("{ \"canCustomizeRule\": false }");
   }
 
+  @Test
+  public void canCreateCustomRule_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("{ \"canCreateCustomRule\": true }");
+  }
+
+  @Test
+  public void canCreateCustomRule_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("{ \"canCreateCustomRule\": true }");
+  }
+
+  @Test
+  public void canCreateCustomRule_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("{ \"canCreateCustomRule\": false }");
+  }
+
+  @Test
+  public void canCreateCustomRule_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("{ \"canCreateCustomRule\": false }");
+  }
+
   private void insertRules() {
     RuleRepositoryDto repo1 = new RuleRepositoryDto("xoo", "xoo", "SonarQube");
     RuleRepositoryDto repo2 = new RuleRepositoryDto("squid", "ws", "SonarQube");