aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java1
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java45
2 files changed, 46 insertions, 0 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java
index c757ed20a07..1a16c72a21e 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java
@@ -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) {
diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java
index 9c4e519c70d..da6ec1937a7 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java
@@ -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");