]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8857 split BulkRuleActivationActions
authorDaniel Schwarz <daniel.schwarz@sonarsource.com>
Thu, 23 Mar 2017 15:21:29 +0000 (16:21 +0100)
committerDaniel Schwarz <bartfastiel@users.noreply.github.com>
Thu, 23 Mar 2017 19:57:55 +0000 (20:57 +0100)
16 files changed:
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRulesAction.java [new file with mode: 0644]
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/BulkRuleActivationActions.java [deleted file]
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRulesAction.java [new file with mode: 0644]
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfilesWs.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfilesWsModule.java
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ActivateRulesActionTest.java [new file with mode: 0644]
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ChangeParentActionTest.java
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ChangelogActionMockTest.java
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/DeactivateRulesActionTest.java [new file with mode: 0644]
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ExportersActionTest.java
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ImportersActionTest.java
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ProjectsActionTest.java
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsMediumTest.java
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsModuleTest.java
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsTest.java
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/RenameActionTest.java

diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRulesAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRulesAction.java
new file mode 100644 (file)
index 0000000..fc1b59f
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2017 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.server.qualityprofile.ws;
+
+import java.util.List;
+import org.sonar.api.rule.Severity;
+import org.sonar.api.server.ServerSide;
+import org.sonar.api.server.ws.Request;
+import org.sonar.api.server.ws.Response;
+import org.sonar.api.server.ws.WebService;
+import org.sonar.api.utils.text.JsonWriter;
+import org.sonar.server.qualityprofile.BulkChangeResult;
+import org.sonar.server.qualityprofile.QProfileService;
+import org.sonar.server.rule.ws.RuleQueryFactory;
+
+import static org.sonar.server.rule.ws.SearchAction.defineRuleSearchParameters;
+
+@ServerSide
+public class ActivateRulesAction implements QProfileWsAction {
+
+  public static final String PROFILE_KEY = "profile_key";
+  public static final String SEVERITY = "activation_severity";
+
+  public static final String BULK_ACTIVATE_ACTION = "activate_rules";
+
+  private final QProfileService profileService;
+  private final RuleQueryFactory ruleQueryFactory;
+
+  public ActivateRulesAction(QProfileService profileService, RuleQueryFactory ruleQueryFactory) {
+    this.profileService = profileService;
+    this.ruleQueryFactory = ruleQueryFactory;
+  }
+
+  public void define(WebService.NewController controller) {
+    WebService.NewAction activate = controller
+      .createAction(BULK_ACTIVATE_ACTION)
+      .setDescription("Bulk-activate rules on one or several Quality profiles")
+      .setPost(true)
+      .setSince("4.4")
+      .setHandler(this);
+
+    defineRuleSearchParameters(activate);
+
+    activate.createParam(PROFILE_KEY)
+      .setDescription("Quality Profile Key. To retrieve a profile key for a given language please see the api/qprofiles documentation")
+      .setRequired(true)
+      .setExampleValue("java:MyProfile");
+
+    activate.createParam(SEVERITY)
+      .setDescription("Optional severity of rules activated in bulk")
+      .setPossibleValues(Severity.ALL);
+  }
+
+  @Override
+  public void handle(Request request, Response response) throws Exception {
+    BulkChangeResult result = profileService.bulkActivate(
+      ruleQueryFactory.createRuleQuery(request),
+      request.mandatoryParam(PROFILE_KEY),
+      request.param(SEVERITY));
+    writeResponse(result, response);
+  }
+
+  private static void writeResponse(BulkChangeResult result, Response response) {
+    JsonWriter json = response.newJsonWriter().beginObject();
+    json.prop("succeeded", result.countSucceeded());
+    json.prop("failed", result.countFailed());
+    writeErrors(json, result.getErrors());
+    json.endObject().close();
+  }
+
+  private static void writeErrors(JsonWriter json, List<String> errorMessages) {
+    if (errorMessages.isEmpty()) {
+      return;
+    }
+    json.name("errors").beginArray();
+    errorMessages.forEach(message -> {
+      json.beginObject();
+      json.prop("msg", message);
+      json.endObject();
+    });
+    json.endArray();
+  }
+}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/BulkRuleActivationActions.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/BulkRuleActivationActions.java
deleted file mode 100644 (file)
index 2ee4f0d..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-package org.sonar.server.qualityprofile.ws;
-
-import java.util.List;
-import org.sonar.api.rule.Severity;
-import org.sonar.api.server.ServerSide;
-import org.sonar.api.server.ws.Request;
-import org.sonar.api.server.ws.Response;
-import org.sonar.api.server.ws.WebService;
-import org.sonar.api.utils.text.JsonWriter;
-import org.sonar.server.qualityprofile.BulkChangeResult;
-import org.sonar.server.qualityprofile.QProfileService;
-import org.sonar.server.rule.ws.RuleQueryFactory;
-
-import static org.sonar.server.rule.ws.SearchAction.defineRuleSearchParameters;
-
-@ServerSide
-public class BulkRuleActivationActions {
-
-  public static final String PROFILE_KEY = "profile_key";
-  public static final String SEVERITY = "activation_severity";
-
-  public static final String BULK_ACTIVATE_ACTION = "activate_rules";
-  public static final String BULK_DEACTIVATE_ACTION = "deactivate_rules";
-
-  private final QProfileService profileService;
-  private final RuleQueryFactory ruleQueryFactory;
-
-  public BulkRuleActivationActions(QProfileService profileService, RuleQueryFactory ruleQueryFactory) {
-    this.profileService = profileService;
-    this.ruleQueryFactory = ruleQueryFactory;
-  }
-
-  void define(WebService.NewController controller) {
-    defineActivateAction(controller);
-    defineDeactivateAction(controller);
-  }
-
-  private void defineActivateAction(WebService.NewController controller) {
-    WebService.NewAction activate = controller
-      .createAction(BULK_ACTIVATE_ACTION)
-      .setDescription("Bulk-activate rules on one or several Quality profiles")
-      .setPost(true)
-      .setSince("4.4")
-      .setHandler(this::bulkActivate);
-
-    defineRuleSearchParameters(activate);
-    defineProfileKeyParameter(activate);
-
-    activate.createParam(SEVERITY)
-      .setDescription("Optional severity of rules activated in bulk")
-      .setPossibleValues(Severity.ALL);
-  }
-
-  private void defineDeactivateAction(WebService.NewController controller) {
-    WebService.NewAction deactivate = controller
-      .createAction(BULK_DEACTIVATE_ACTION)
-      .setDescription("Bulk deactivate rules on Quality profiles")
-      .setPost(true)
-      .setSince("4.4")
-      .setHandler(this::bulkDeactivate);
-
-    defineRuleSearchParameters(deactivate);
-    defineProfileKeyParameter(deactivate);
-  }
-
-  private static void defineProfileKeyParameter(WebService.NewAction action) {
-    action.createParam(PROFILE_KEY)
-      .setDescription("Quality Profile Key. To retrieve a profile key for a given language please see the api/qprofiles documentation")
-      .setRequired(true)
-      .setExampleValue("java:MyProfile");
-  }
-
-  private void bulkActivate(Request request, Response response) {
-    BulkChangeResult result = profileService.bulkActivate(
-      ruleQueryFactory.createRuleQuery(request),
-      request.mandatoryParam(PROFILE_KEY),
-      request.param(SEVERITY));
-    writeResponse(result, response);
-  }
-
-  private void bulkDeactivate(Request request, Response response) {
-    BulkChangeResult result = profileService.bulkDeactivate(
-      ruleQueryFactory.createRuleQuery(request),
-      request.mandatoryParam(PROFILE_KEY));
-    writeResponse(result, response);
-  }
-
-  private static void writeResponse(BulkChangeResult result, Response response) {
-    JsonWriter json = response.newJsonWriter().beginObject();
-    json.prop("succeeded", result.countSucceeded());
-    json.prop("failed", result.countFailed());
-    writeErrors(json, result.getErrors());
-    json.endObject().close();
-  }
-
-  private static void writeErrors(JsonWriter json, List<String> errorMessages) {
-    if (errorMessages.isEmpty()) {
-      return;
-    }
-    json.name("errors").beginArray();
-    errorMessages.forEach(message -> {
-      json.beginObject();
-      json.prop("msg", message);
-      json.endObject();
-    });
-    json.endArray();
-  }
-}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRulesAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRulesAction.java
new file mode 100644 (file)
index 0000000..36d8992
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2017 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.server.qualityprofile.ws;
+
+import java.util.List;
+import org.sonar.api.server.ServerSide;
+import org.sonar.api.server.ws.Request;
+import org.sonar.api.server.ws.Response;
+import org.sonar.api.server.ws.WebService;
+import org.sonar.api.utils.text.JsonWriter;
+import org.sonar.server.qualityprofile.BulkChangeResult;
+import org.sonar.server.qualityprofile.QProfileService;
+import org.sonar.server.rule.ws.RuleQueryFactory;
+
+import static org.sonar.server.rule.ws.SearchAction.defineRuleSearchParameters;
+
+@ServerSide
+public class DeactivateRulesAction implements QProfileWsAction {
+
+  public static final String PROFILE_KEY = "profile_key";
+  public static final String SEVERITY = "activation_severity";
+
+  public static final String BULK_DEACTIVATE_ACTION = "deactivate_rules";
+
+  private final QProfileService profileService;
+  private final RuleQueryFactory ruleQueryFactory;
+
+  public DeactivateRulesAction(QProfileService profileService, RuleQueryFactory ruleQueryFactory) {
+    this.profileService = profileService;
+    this.ruleQueryFactory = ruleQueryFactory;
+  }
+
+  public void define(WebService.NewController controller) {
+    WebService.NewAction deactivate = controller
+      .createAction(BULK_DEACTIVATE_ACTION)
+      .setDescription("Bulk deactivate rules on Quality profiles")
+      .setPost(true)
+      .setSince("4.4")
+      .setHandler(this);
+
+    defineRuleSearchParameters(deactivate);
+
+    deactivate.createParam(PROFILE_KEY)
+      .setDescription("Quality Profile Key. To retrieve a profile key for a given language please see the api/qprofiles documentation")
+      .setRequired(true)
+      .setExampleValue("java:MyProfile");
+  }
+
+  @Override
+  public void handle(Request request, Response response) throws Exception {
+    BulkChangeResult result = profileService.bulkDeactivate(
+      ruleQueryFactory.createRuleQuery(request),
+      request.mandatoryParam(PROFILE_KEY));
+    writeResponse(result, response);
+  }
+
+  private static void writeResponse(BulkChangeResult result, Response response) {
+    JsonWriter json = response.newJsonWriter().beginObject();
+    json.prop("succeeded", result.countSucceeded());
+    json.prop("failed", result.countFailed());
+    writeErrors(json, result.getErrors());
+    json.endObject().close();
+  }
+
+  private static void writeErrors(JsonWriter json, List<String> errorMessages) {
+    if (errorMessages.isEmpty()) {
+      return;
+    }
+    json.name("errors").beginArray();
+    errorMessages.forEach(message -> {
+      json.beginObject();
+      json.prop("msg", message);
+      json.endObject();
+    });
+    json.endArray();
+  }
+}
index f004df52703a034c7fb16f5345ac5c4b96498b5f..a7e6b4538872e1757faa0d4784309d7b66a7901b 100644 (file)
@@ -21,18 +21,16 @@ package org.sonar.server.qualityprofile.ws;
 
 import org.sonar.api.server.ws.WebService;
 
+import static java.util.Arrays.stream;
 import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.CONTROLLER_QUALITY_PROFILES;
 
 public class QProfilesWs implements WebService {
 
   public static final String API_ENDPOINT = CONTROLLER_QUALITY_PROFILES;
 
-  private final BulkRuleActivationActions bulkRuleActivationActions;
   private final QProfileWsAction[] actions;
 
-  public QProfilesWs(BulkRuleActivationActions bulkRuleActivationActions,
-    QProfileWsAction... actions) {
-    this.bulkRuleActivationActions = bulkRuleActivationActions;
+  public QProfilesWs(QProfileWsAction... actions) {
     this.actions = actions;
   }
 
@@ -42,10 +40,8 @@ public class QProfilesWs implements WebService {
       .setDescription("Manage quality profiles.")
       .setSince("4.4");
 
-    bulkRuleActivationActions.define(controller);
-    for (QProfileWsAction action : actions) {
-      action.define(controller);
-    }
+    stream(actions)
+      .forEach(action -> action.define(controller));
 
     controller.done();
   }
index 66f3d51cc1ad7085e47f40f258db7cfaf7990c07..3708ce600eadb09ac7e95ce1ac456943507cb23c 100644 (file)
@@ -28,7 +28,8 @@ public class QProfilesWsModule extends Module {
       QProfileWsSupport.class,
       AddProjectAction.class,
       BackupAction.class,
-      BulkRuleActivationActions.class,
+      ActivateRulesAction.class,
+      DeactivateRulesAction.class,
       CompareAction.class,
       CopyAction.class,
       ChangelogAction.class,
diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ActivateRulesActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ActivateRulesActionTest.java
new file mode 100644 (file)
index 0000000..ac51392
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2017 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.server.qualityprofile.ws;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.sonar.api.server.ws.WebService;
+import org.sonar.db.DbClient;
+import org.sonar.db.DbTester;
+import org.sonar.server.organization.TestDefaultOrganizationProvider;
+import org.sonar.server.qualityprofile.RuleActivator;
+import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
+import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.ws.WsActionTester;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+public class ActivateRulesActionTest {
+
+  @Rule
+  public DbTester dbTester = DbTester.create();
+  @Rule
+  public UserSessionRule userSession = UserSessionRule.standalone();
+  @Rule
+  public ExpectedException thrown = ExpectedException.none();
+
+  private DbClient dbClient = dbTester.getDbClient();
+  private RuleActivator ruleActivator = mock(RuleActivator.class);
+  private QProfileWsSupport wsSupport = new QProfileWsSupport(dbClient, userSession, TestDefaultOrganizationProvider.from(dbTester));
+  private ActiveRuleIndexer activeRuleIndexer = mock(ActiveRuleIndexer.class);
+  private ActivateRulesAction underTest = new ActivateRulesAction(null, null);
+  private WsActionTester wsActionTester = new WsActionTester(underTest);
+
+  @Test
+  public void define_bulk_activate_rule_action() {
+    WebService.Action definition = wsActionTester.getDef();
+    assertThat(definition).isNotNull();
+    assertThat(definition.isPost()).isTrue();
+    assertThat(definition.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder(
+      "types",
+      "template_key",
+      "languages",
+      "is_template",
+      "inheritance",
+      "qprofile",
+      "activation_severity",
+      "tags",
+      "asc",
+      "q",
+      "active_severities",
+      "s",
+      "repositories",
+      "profile_key",
+      "statuses",
+      "rule_key",
+      "available_since",
+      "activation",
+      "severities"
+    );
+  }
+}
\ No newline at end of file
index fb591c24523231ba6a66b7cd70151378977d2ae8..17656eece9043815d76b3b2dae5527873f4e60f0 100644 (file)
@@ -64,7 +64,6 @@ import org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters;
 
 import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric;
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
 import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES;
 import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_ORGANIZATION;
 import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE;
@@ -143,7 +142,7 @@ public class ChangeParentActionTest {
 
   @Test
   public void define_change_parent_action() {
-    WebService.Action changeParent = new WsTester(new QProfilesWs(mock(BulkRuleActivationActions.class), underTest))
+    WebService.Action changeParent = new WsTester(new QProfilesWs(underTest))
       .action(QualityProfileWsParameters.CONTROLLER_QUALITY_PROFILES, "change_parent");
     assertThat(changeParent).isNotNull();
     assertThat(changeParent.isPost()).isTrue();
index 1de08f42ccefcbb3ff442a7446a8dca0baad380e..5e35b824375ab14ab021478b0150f44d6022e9a5 100644 (file)
@@ -63,7 +63,7 @@ public class ChangelogActionMockTest {
 
   @Before
   public void before() {
-    wsTester = new WsTester(new QProfilesWs(mock(BulkRuleActivationActions.class),
+    wsTester = new WsTester(new QProfilesWs(mock(ActivateRulesAction.class),
       new ChangelogAction(changelogLoader, wsSupport, new Languages(), dbTester.getDbClient())));
     organization = dbTester.organizations().insert();
   }
diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/DeactivateRulesActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/DeactivateRulesActionTest.java
new file mode 100644 (file)
index 0000000..c7196df
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2017 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.server.qualityprofile.ws;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.sonar.api.server.ws.WebService;
+import org.sonar.db.DbClient;
+import org.sonar.db.DbTester;
+import org.sonar.server.organization.TestDefaultOrganizationProvider;
+import org.sonar.server.qualityprofile.RuleActivator;
+import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
+import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.ws.WsActionTester;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+public class DeactivateRulesActionTest {
+
+  @Rule
+  public DbTester dbTester = DbTester.create();
+  @Rule
+  public UserSessionRule userSession = UserSessionRule.standalone();
+  @Rule
+  public ExpectedException thrown = ExpectedException.none();
+
+  private DbClient dbClient = dbTester.getDbClient();
+  private RuleActivator ruleActivator = mock(RuleActivator.class);
+  private QProfileWsSupport wsSupport = new QProfileWsSupport(dbClient, userSession, TestDefaultOrganizationProvider.from(dbTester));
+  private ActiveRuleIndexer activeRuleIndexer = mock(ActiveRuleIndexer.class);
+  private DeactivateRulesAction underTest = new DeactivateRulesAction(null, null);
+  private WsActionTester wsActionTester = new WsActionTester(underTest);
+
+  @Test
+  public void define_bulk_deactivate_rule_action() {
+    WebService.Action definition = wsActionTester.getDef();
+    assertThat(definition).isNotNull();
+    assertThat(definition.isPost()).isTrue();
+    assertThat(definition.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder(
+      "types",
+      "template_key",
+      "languages",
+      "is_template",
+      "inheritance",
+      "qprofile",
+      "tags",
+      "asc",
+      "q",
+      "active_severities",
+      "s",
+      "repositories",
+      "profile_key",
+      "statuses",
+      "rule_key",
+      "available_since",
+      "activation",
+      "severities"
+    );
+  }
+}
\ No newline at end of file
index 7b953ea5322d25814ff8c8aad54a5c5bfa6ee225..90a07eb5137f68976ba8c2c0024ea48b25ddfbdb 100644 (file)
@@ -25,14 +25,11 @@ import org.sonar.api.profiles.ProfileExporter;
 import org.sonar.api.profiles.RulesProfile;
 import org.sonar.server.ws.WsTester;
 
-import static org.mockito.Mockito.mock;
-
 public class ExportersActionTest {
 
   @Test
   public void importers_nominal() throws Exception {
     WsTester wsTester = new WsTester(new QProfilesWs(
-      mock(BulkRuleActivationActions.class),
       new ExportersAction(createExporters())));
 
     wsTester.newGetRequest("api/qualityprofiles", "exporters").execute().assertJson(getClass(), "exporters.json");
index feb7ee2b596b51a9134bad565fd9d5e29899ac52..3a481534a71e79c33a83a00a20df77a8c38b9d52 100644 (file)
@@ -26,14 +26,11 @@ import org.sonar.api.profiles.RulesProfile;
 import org.sonar.api.utils.ValidationMessages;
 import org.sonar.server.ws.WsTester;
 
-import static org.mockito.Mockito.mock;
-
 public class ImportersActionTest {
 
   @Test
   public void importers_nominal() throws Exception {
     WsTester wsTester = new WsTester(new QProfilesWs(
-      mock(BulkRuleActivationActions.class),
       new ImportersAction(createImporters())));
 
     wsTester.newGetRequest("api/qualityprofiles", "importers").execute().assertJson(getClass(), "importers.json");
index f19b3b6846fe5fb2de6212fc5fa520645356d10d..0a49c1c85e5ea963d3936d910095792d7a58a019 100644 (file)
@@ -39,8 +39,6 @@ import org.sonar.server.tester.UserSessionRule;
 import org.sonar.server.ws.WsTester;
 import org.sonar.server.ws.WsTester.TestRequest;
 
-import static org.mockito.Mockito.mock;
-
 public class ProjectsActionTest {
 
   @Rule
@@ -61,7 +59,6 @@ public class ProjectsActionTest {
   private ComponentDto project4;
 
   private WsTester wsTester = new WsTester(new QProfilesWs(
-    mock(BulkRuleActivationActions.class),
     new ProjectsAction(dbClient, userSessionRule)));
 
   @Before
index 75d37b07279cbfc4070522f761747cd18c213102..65454f16701fd361a1b28f5543a3daa70b3f8cc5 100644 (file)
@@ -139,7 +139,7 @@ public class QProfilesWsMediumTest {
     assertThat(db.activeRuleDao().selectByProfileKey(session, profile.getKey())).hasSize(4);
 
     // 1. Deactivate Rule
-    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, BulkRuleActivationActions.BULK_DEACTIVATE_ACTION);
+    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, DeactivateRulesAction.BULK_DEACTIVATE_ACTION);
     request.setParam(PARAM_PROFILE_KEY, profile.getKey());
     WsTester.Result result = request.execute();
     session.clearCache();
@@ -166,7 +166,7 @@ public class QProfilesWsMediumTest {
     assertThat(db.activeRuleDao().selectByProfileKey(session, profile.getKey())).hasSize(2);
 
     // 1. Deactivate Rule
-    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, BulkRuleActivationActions.BULK_DEACTIVATE_ACTION);
+    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, DeactivateRulesAction.BULK_DEACTIVATE_ACTION);
     request.setParam(PARAM_PROFILE_KEY, profile.getKey());
     WsTester.Result result = request.execute();
     session.clearCache();
@@ -191,7 +191,7 @@ public class QProfilesWsMediumTest {
     assertThat(db.activeRuleDao().selectByProfileKey(session, profile.getKey())).hasSize(2);
 
     // 1. Deactivate Rule
-    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, BulkRuleActivationActions.BULK_DEACTIVATE_ACTION);
+    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, DeactivateRulesAction.BULK_DEACTIVATE_ACTION);
     request.setParam(PARAM_PROFILE_KEY, profile.getKey());
     request.setParam(WebService.Param.TEXT_QUERY, "hello");
     WsTester.Result result = request.execute();
@@ -284,7 +284,7 @@ public class QProfilesWsMediumTest {
     assertThat(db.activeRuleDao().selectByProfileKey(session, profile.getKey())).isEmpty();
 
     // 1. Activate Rule
-    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, BulkRuleActivationActions.BULK_ACTIVATE_ACTION);
+    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.BULK_ACTIVATE_ACTION);
     request.setParam(PARAM_PROFILE_KEY, profile.getKey());
     request.setParam(PARAM_LANGUAGES, "java");
     request.execute().assertJson(getClass(), "bulk_activate_rule.json");
@@ -309,7 +309,7 @@ public class QProfilesWsMediumTest {
     assertThat(db.activeRuleDao().selectByProfileKey(session, php.getKey())).isEmpty();
 
     // 1. Activate Rule
-    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, BulkRuleActivationActions.BULK_ACTIVATE_ACTION);
+    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.BULK_ACTIVATE_ACTION);
     request.setParam(PARAM_PROFILE_KEY, php.getKey());
     request.setParam(PARAM_LANGUAGES, "php");
     request.execute().assertJson(getClass(), "bulk_activate_rule_not_all.json");
@@ -333,7 +333,7 @@ public class QProfilesWsMediumTest {
     assertThat(db.activeRuleDao().selectByProfileKey(session, profile.getKey())).isEmpty();
 
     // 1. Activate Rule with query returning 0 hits
-    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, BulkRuleActivationActions.BULK_ACTIVATE_ACTION);
+    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.BULK_ACTIVATE_ACTION);
     request.setParam(PARAM_PROFILE_KEY, profile.getKey());
     request.setParam(WebService.Param.TEXT_QUERY, "php");
     request.execute();
@@ -343,7 +343,7 @@ public class QProfilesWsMediumTest {
     assertThat(db.activeRuleDao().selectByProfileKey(session, profile.getKey())).hasSize(0);
 
     // 1. Activate Rule with query returning 1 hits
-    request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, BulkRuleActivationActions.BULK_ACTIVATE_ACTION);
+    request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.BULK_ACTIVATE_ACTION);
     request.setParam(PARAM_PROFILE_KEY, profile.getKey());
     request.setParam(WebService.Param.TEXT_QUERY, "world");
     request.execute();
@@ -370,9 +370,9 @@ public class QProfilesWsMediumTest {
       new SearchOptions()).getIds()).hasSize(2);
 
     // 1. Activate Rule with query returning 2 hits
-    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, BulkRuleActivationActions.BULK_ACTIVATE_ACTION);
-    request.setParam(BulkRuleActivationActions.PROFILE_KEY, profile.getKey());
-    request.setParam(BulkRuleActivationActions.SEVERITY, "MINOR");
+    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.BULK_ACTIVATE_ACTION);
+    request.setParam(ActivateRulesAction.PROFILE_KEY, profile.getKey());
+    request.setParam(ActivateRulesAction.SEVERITY, "MINOR");
     request.execute();
     session.commit();
 
@@ -397,7 +397,7 @@ public class QProfilesWsMediumTest {
     ruIndexer.index();
 
     // 1. Activate Rule
-    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, BulkRuleActivationActions.BULK_ACTIVATE_ACTION);
+    WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.BULK_ACTIVATE_ACTION);
     request.setParam(PARAM_PROFILE_KEY, javaProfile.getKey());
     request.setParam(PARAM_QPROFILE, javaProfile.getKey());
     request.setParam("activation", "false");
index d4a17603fd80f4c9ec5c540f3dc6df64ad1d935b..60f84b6d05cd81947b77dcec47e707cc33f0f460 100644 (file)
@@ -29,6 +29,6 @@ public class QProfilesWsModuleTest {
   public void verify_count_of_added_components() {
     ComponentContainer container = new ComponentContainer();
     new QProfilesWsModule().configure(container);
-    assertThat(container.size()).isEqualTo(25 + 2);
+    assertThat(container.size()).isEqualTo(26 + 2);
   }
 }
index 78caac67c0a1bd4ae11046b21a0b29699046082f..3dd78f48c1ac33b6d3c3d24408c55687c6ee5c88 100644 (file)
@@ -39,7 +39,6 @@ import org.sonar.server.ws.WsTester;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
-import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_ACTIVATE_RULE;
 
 public class QProfilesWsTest {
   @Rule
@@ -61,7 +60,6 @@ public class QProfilesWsTest {
     ProfileImporter[] importers = createImporters(languages);
 
     controller = new WsTester(new QProfilesWs(
-      new BulkRuleActivationActions(profileService, null),
       new CreateAction(null, null, null, languages, wsSupport, userSessionRule, null, importers),
       new ImportersAction(importers),
       new SearchAction(null, languages, dbClient, wsSupport),
@@ -131,14 +129,6 @@ public class QProfilesWsTest {
     assertThat(projects.responseExampleAsString()).isNotEmpty();
   }
 
-  @Test
-  public void define_bulk_deactivate_rule_action() {
-    WebService.Action restoreProfiles = controller.action(BulkRuleActivationActions.BULK_DEACTIVATE_ACTION);
-    assertThat(restoreProfiles).isNotNull();
-    assertThat(restoreProfiles.isPost()).isTrue();
-    assertThat(restoreProfiles.params()).hasSize(18);
-  }
-
   @Test
   public void define_create_action() {
     WebService.Action create = controller.action("create");
index 3bcbb08a95526d8124dd629eb526e639244196eb..3b0c6e8f4a41b708308447d1620f554e795c19d4 100644 (file)
@@ -68,7 +68,6 @@ public class RenameActionTest {
       dbClient,
       userSessionRule);
     tester = new WsTester(new QProfilesWs(
-      mock(BulkRuleActivationActions.class),
       underTest));
     organization = db.organizations().insert();