aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Schwarz <daniel.schwarz@sonarsource.com>2017-04-27 10:59:11 +0200
committerDaniel Schwarz <bartfastiel@users.noreply.github.com>2017-04-27 17:09:58 +0200
commit6ff05382aff213ebb61152a6e0d5a157665ba450 (patch)
tree80dcc53b88092dd68c71f5710d69f1de2fcc39de
parent40d27d700c2cc36dea76e7746501e1cb6e398040 (diff)
downloadsonarqube-6ff05382aff213ebb61152a6e0d5a157665ba450.tar.gz
sonarqube-6ff05382aff213ebb61152a6e0d5a157665ba450.zip
change RuleDeleter medium test to a WsActionTester test
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/rule/RuleDeleter.java67
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/rule/ws/DeleteAction.java43
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/rule/RuleDeleterTest.java93
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/rule/ws/DeleteActionTest.java85
5 files changed, 106 insertions, 184 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java
index 294a3dbde4c..c626336a8b2 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java
@@ -163,7 +163,6 @@ import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.DeprecatedRulesDefinitionLoader;
import org.sonar.server.rule.RuleCreator;
import org.sonar.server.rule.RuleDefinitionsLoader;
-import org.sonar.server.rule.RuleDeleter;
import org.sonar.server.rule.RuleUpdater;
import org.sonar.server.rule.index.RuleIndexDefinition;
import org.sonar.server.rule.index.RuleIndexer;
@@ -292,7 +291,6 @@ public class PlatformLevel4 extends PlatformLevel {
RulesDefinitionXmlLoader.class,
RuleUpdater.class,
RuleCreator.class,
- RuleDeleter.class,
org.sonar.server.rule.ws.UpdateAction.class,
RulesWs.class,
RuleWsSupport.class,
diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/RuleDeleter.java b/server/sonar-server/src/main/java/org/sonar/server/rule/RuleDeleter.java
deleted file mode 100644
index 3faab5576ca..00000000000
--- a/server/sonar-server/src/main/java/org/sonar/server/rule/RuleDeleter.java
+++ /dev/null
@@ -1,67 +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.rule;
-
-import org.sonar.api.rule.RuleKey;
-import org.sonar.api.rule.RuleStatus;
-import org.sonar.api.server.ServerSide;
-import org.sonar.api.utils.System2;
-import org.sonar.db.DbClient;
-import org.sonar.db.DbSession;
-import org.sonar.db.rule.RuleDefinitionDto;
-import org.sonar.server.qualityprofile.RuleActivator;
-import org.sonar.server.rule.index.RuleIndexer;
-
-@ServerSide
-public class RuleDeleter {
-
- private final System2 system2;
- private final RuleIndexer ruleIndexer;
- private final DbClient dbClient;
- private final RuleActivator ruleActivator;
-
- public RuleDeleter(System2 system2, RuleIndexer ruleIndexer, DbClient dbClient, RuleActivator ruleActivator) {
- this.system2 = system2;
- this.ruleIndexer = ruleIndexer;
- this.dbClient = dbClient;
- this.ruleActivator = ruleActivator;
- }
-
- public void delete(RuleKey ruleKey) {
- try (DbSession dbSession = dbClient.openSession(false)) {
- RuleDefinitionDto rule = dbClient.ruleDao().selectOrFailDefinitionByKey(dbSession, ruleKey);
- if (!rule.isCustomRule()) {
- throw new IllegalStateException("Only custom rules can be deleted");
- }
-
- // For custom rule, first deactivate the rule on all profiles
- if (rule.isCustomRule()) {
- ruleActivator.deactivateOfAllOrganizations(dbSession, rule);
- }
-
- rule.setStatus(RuleStatus.REMOVED);
- rule.setUpdatedAt(system2.now());
- dbClient.ruleDao().update(dbSession, rule);
-
- dbSession.commit();
- ruleIndexer.indexRuleDefinition(ruleKey);
- }
- }
-}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/DeleteAction.java b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/DeleteAction.java
index 25dd5a3490f..73ac35a1e35 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/DeleteAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/DeleteAction.java
@@ -20,20 +20,32 @@
package org.sonar.server.rule.ws;
import org.sonar.api.rule.RuleKey;
+import org.sonar.api.rule.RuleStatus;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
-import org.sonar.server.rule.RuleDeleter;
+import org.sonar.api.utils.System2;
+import org.sonar.db.DbClient;
+import org.sonar.db.DbSession;
+import org.sonar.db.rule.RuleDefinitionDto;
+import org.sonar.server.qualityprofile.RuleActivator;
+import org.sonar.server.rule.index.RuleIndexer;
public class DeleteAction implements RulesWsAction {
public static final String PARAM_KEY = "key";
- private final RuleDeleter ruleDeleter;
+ private final System2 system2;
+ private final RuleIndexer ruleIndexer;
+ private final DbClient dbClient;
+ private final RuleActivator ruleActivator;
private final RuleWsSupport ruleWsSupport;
- public DeleteAction(RuleDeleter ruleDeleter, RuleWsSupport ruleWsSupport) {
- this.ruleDeleter = ruleDeleter;
+ public DeleteAction(System2 system2, RuleIndexer ruleIndexer, DbClient dbClient, RuleActivator ruleActivator, RuleWsSupport ruleWsSupport) {
+ this.system2 = system2;
+ this.ruleIndexer = ruleIndexer;
+ this.dbClient = dbClient;
+ this.ruleActivator = ruleActivator;
this.ruleWsSupport = ruleWsSupport;
}
@@ -58,6 +70,27 @@ public class DeleteAction implements RulesWsAction {
public void handle(Request request, Response response) {
ruleWsSupport.checkQProfileAdminPermission();
RuleKey key = RuleKey.parse(request.mandatoryParam(PARAM_KEY));
- ruleDeleter.delete(key);
+ delete(key);
+ }
+
+ public void delete(RuleKey ruleKey) {
+ try (DbSession dbSession = dbClient.openSession(false)) {
+ RuleDefinitionDto rule = dbClient.ruleDao().selectOrFailDefinitionByKey(dbSession, ruleKey);
+ if (!rule.isCustomRule()) {
+ throw new IllegalStateException("Only custom rules can be deleted");
+ }
+
+ // For custom rule, first deactivate the rule on all profiles
+ if (rule.isCustomRule()) {
+ ruleActivator.deactivateOfAllOrganizations(dbSession, rule);
+ }
+
+ rule.setStatus(RuleStatus.REMOVED);
+ rule.setUpdatedAt(system2.now());
+ dbClient.ruleDao().update(dbSession, rule);
+
+ dbSession.commit();
+ ruleIndexer.indexRuleDefinition(ruleKey);
+ }
}
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleDeleterTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleDeleterTest.java
deleted file mode 100644
index 42dcbc6ae4b..00000000000
--- a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleDeleterTest.java
+++ /dev/null
@@ -1,93 +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.rule;
-
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.mockito.Mockito;
-import org.sonar.api.rule.RuleStatus;
-import org.sonar.api.utils.System2;
-import org.sonar.db.DbClient;
-import org.sonar.db.DbSession;
-import org.sonar.db.DbTester;
-import org.sonar.db.rule.RuleDefinitionDto;
-import org.sonar.server.qualityprofile.RuleActivator;
-import org.sonar.server.rule.index.RuleIndexer;
-import org.sonar.server.tester.UserSessionRule;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-
-public class RuleDeleterTest {
-
- private static final long PAST = 10000L;
-
- @org.junit.Rule
- public UserSessionRule userSessionRule = UserSessionRule.standalone();
- @org.junit.Rule
- public DbTester dbTester = DbTester.create();
- @org.junit.Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private DbClient dbClient = dbTester.getDbClient();
- private DbSession dbSession = dbTester.getSession();
- private RuleIndexer ruleIndexer = mock(RuleIndexer.class);
- private RuleActivator ruleActivator = mock(RuleActivator.class);
- private RuleDeleter deleter = new RuleDeleter(System2.INSTANCE, ruleIndexer, dbClient, ruleActivator);
-
- @Test
- public void delete_custom_rule() {
- RuleDefinitionDto templateRule = dbTester.rules().insert(
- r -> r.setIsTemplate(true),
- r -> r.setCreatedAt(PAST),
- r -> r.setUpdatedAt(PAST)
- );
- RuleDefinitionDto customRule = dbTester.rules().insert(
- r -> r.setTemplateId(templateRule.getId()),
- r -> r.setCreatedAt(PAST),
- r -> r.setUpdatedAt(PAST)
- );
-
- Mockito.reset(ruleIndexer);
-
- // Delete custom rule
- deleter.delete(customRule.getKey());
-
- Mockito.verify(ruleIndexer).indexRuleDefinition(eq(customRule.getKey()));
- Mockito.verifyNoMoreInteractions(ruleIndexer);
-
- // Verify custom rule has status REMOVED
- RuleDefinitionDto customRuleReloaded = dbClient.ruleDao().selectOrFailDefinitionByKey(dbSession, customRule.getKey());
- assertThat(customRuleReloaded).isNotNull();
- assertThat(customRuleReloaded.getStatus()).isEqualTo(RuleStatus.REMOVED);
- assertThat(customRuleReloaded.getUpdatedAt()).isNotEqualTo(PAST);
- }
-
- @Test
- public void fail_to_delete_if_not_custom() {
- RuleDefinitionDto rule = dbTester.rules().insert();
-
- thrown.expect(IllegalStateException.class);
- thrown.expectMessage("Only custom rules can be deleted");
-
- deleter.delete(rule.getKey());
- }
-}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/DeleteActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/DeleteActionTest.java
index 7b40ab3dd42..510b18ea99c 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/DeleteActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/DeleteActionTest.java
@@ -19,59 +19,110 @@
*/
package org.sonar.server.rule.ws;
-import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
-import org.sonar.api.rule.RuleKey;
+import org.mockito.Mockito;
+import org.sonar.api.rule.RuleStatus;
+import org.sonar.api.utils.System2;
import org.sonar.db.DbClient;
+import org.sonar.db.DbSession;
+import org.sonar.db.DbTester;
+import org.sonar.db.rule.RuleDefinitionDto;
import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.exceptions.UnauthorizedException;
import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.organization.TestDefaultOrganizationProvider;
-import org.sonar.server.rule.RuleDeleter;
+import org.sonar.server.qualityprofile.RuleActivator;
+import org.sonar.server.rule.index.RuleIndexer;
import org.sonar.server.tester.UserSessionRule;
-import org.sonar.server.ws.WsTester;
+import org.sonar.server.ws.WsActionTester;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES;
public class DeleteActionTest {
+ private static final long PAST = 10000L;
- @Rule
+ @org.junit.Rule
public UserSessionRule userSession = UserSessionRule.standalone();
- @Rule
- public ExpectedException expectedException = ExpectedException.none();
+ @org.junit.Rule
+ public DbTester dbTester = DbTester.create();
+ @org.junit.Rule
+ public ExpectedException thrown = ExpectedException.none();
- private RuleDeleter ruleDeleter = mock(RuleDeleter.class);
+ private DbClient dbClient = dbTester.getDbClient();
+ private DbSession dbSession = dbTester.getSession();
+ private RuleIndexer ruleIndexer = mock(RuleIndexer.class);
+ private RuleActivator ruleActivator = mock(RuleActivator.class);
private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.fromUuid("ORG1");
private RuleWsSupport ruleWsSupport = new RuleWsSupport(mock(DbClient.class), userSession, defaultOrganizationProvider);
- private WsTester tester = new WsTester(new RulesWs(new DeleteAction(ruleDeleter, ruleWsSupport)));
+ private DeleteAction underTest = new DeleteAction(System2.INSTANCE, ruleIndexer, dbClient, ruleActivator, ruleWsSupport);
+ private WsActionTester tester = new WsActionTester(underTest);
@Test
public void delete_custom_rule() throws Exception {
logInAsQProfileAdministrator();
- WsTester.TestRequest request = tester.newPostRequest("api/rules", "delete").setParam("key", "squid:XPath_1402065390816");
- request.execute();
+ RuleDefinitionDto templateRule = dbTester.rules().insert(
+ r -> r.setIsTemplate(true),
+ r -> r.setCreatedAt(PAST),
+ r -> r.setUpdatedAt(PAST));
+ RuleDefinitionDto customRule = dbTester.rules().insert(
+ r -> r.setTemplateId(templateRule.getId()),
+ r -> r.setCreatedAt(PAST),
+ r -> r.setUpdatedAt(PAST));
- verify(ruleDeleter).delete(RuleKey.of("squid", "XPath_1402065390816"));
+ tester.newRequest()
+ .setMethod("POST")
+ .setParam("key", customRule.getKey().toString())
+ .execute();
+
+ Mockito.verify(ruleIndexer).indexRuleDefinition(eq(customRule.getKey()));
+ Mockito.verifyNoMoreInteractions(ruleIndexer);
+
+ // Verify custom rule has status REMOVED
+ RuleDefinitionDto customRuleReloaded = dbClient.ruleDao().selectOrFailDefinitionByKey(dbSession, customRule.getKey());
+ assertThat(customRuleReloaded).isNotNull();
+ assertThat(customRuleReloaded.getStatus()).isEqualTo(RuleStatus.REMOVED);
+ assertThat(customRuleReloaded.getUpdatedAt()).isNotEqualTo(PAST);
}
@Test
public void throw_ForbiddenException_if_not_profile_administrator() throws Exception {
userSession.logIn();
- expectedException.expect(ForbiddenException.class);
+ thrown.expect(ForbiddenException.class);
- tester.newPostRequest("api/rules", "delete").execute();
+ tester.newRequest()
+ .setMethod("POST")
+ .setParam("key", "anyRuleKey")
+ .execute();
}
@Test
public void throw_UnauthorizedException_if_not_logged_in() throws Exception {
- expectedException.expect(UnauthorizedException.class);
+ thrown.expect(UnauthorizedException.class);
+
+ tester.newRequest()
+ .setMethod("POST")
+ .setParam("key", "anyRuleKey")
+ .execute();
+ }
+
+ @Test
+ public void fail_to_delete_if_not_custom() {
+ logInAsQProfileAdministrator();
+ RuleDefinitionDto rule = dbTester.rules().insert();
+
+ thrown.expect(IllegalStateException.class);
+ thrown.expectMessage("Only custom rules can be deleted");
- tester.newPostRequest("api/rules", "delete").execute();
+ tester.newRequest()
+ .setMethod("POST")
+ .setParam("key", rule.getKey().toString())
+ .execute();
}
private void logInAsQProfileAdministrator() {