]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8949 changed rule update medium test to regular test
authorDaniel Schwarz <daniel.schwarz@sonarsource.com>
Wed, 5 Apr 2017 09:24:09 +0000 (11:24 +0200)
committerDaniel Schwarz <bartfastiel@users.noreply.github.com>
Fri, 14 Apr 2017 06:57:18 +0000 (08:57 +0200)
server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleDbTester.java
server/sonar-server/src/test/java/org/sonar/server/rule/ws/UpdateActionMediumTest.java
server/sonar-server/src/test/java/org/sonar/server/rule/ws/UpdateActionTest.java [new file with mode: 0644]
server/sonar-server/src/test/resources/org/sonar/server/rule/ws/UpdateActionMediumTest/update_rule_remediation_function.json [deleted file]

index 52297b1287f880db4f646c5cb22347c306e0dceb..0b6c234cdd744c1c286e8ae40247a92083f108e6 100644 (file)
@@ -82,9 +82,10 @@ public class RuleDbTester {
     return insertRuleParam(rule, p -> {});
   }
 
-  public RuleParamDto insertRuleParam(RuleDefinitionDto rule, Consumer<RuleParamDto> populater) {
+  @SafeVarargs
+  public final RuleParamDto insertRuleParam(RuleDefinitionDto rule, Consumer<RuleParamDto>... populaters) {
     RuleParamDto param = RuleTesting.newRuleParam(rule);
-    populater.accept(param);
+    Arrays.asList(populaters).forEach(populater -> populater.accept(param));
     db.getDbClient().ruleDao().insertRuleParam(db.getSession(), rule, param);
     db.commit();
     return param;
index 0855625a0c4c1824e1124109921fac6cf4071194..322550a76d562397c2b747cb3df59f15d3b9ab4c 100644 (file)
@@ -46,12 +46,7 @@ import org.sonar.server.ws.WsTester;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.fail;
-import static org.sonar.api.server.debt.DebtRemediationFunction.Type.LINEAR;
-import static org.sonar.api.server.debt.DebtRemediationFunction.Type.LINEAR_OFFSET;
 import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES;
-import static org.sonar.server.rule.ws.UpdateAction.PARAM_REMEDIATION_FN_BASE_EFFORT;
-import static org.sonar.server.rule.ws.UpdateAction.PARAM_REMEDIATION_FN_GAP_MULTIPLIER;
-import static org.sonar.server.rule.ws.UpdateAction.PARAM_REMEDIATION_FN_TYPE;
 
 public class UpdateActionMediumTest {
 
@@ -83,45 +78,6 @@ public class UpdateActionMediumTest {
     session.close();
   }
 
-  @Test
-  public void update_rule_remediation_function() throws Exception {
-    RuleDto rule = RuleTesting.newXooX1()
-      .setDefRemediationFunction(LINEAR.toString())
-      .setDefRemediationGapMultiplier("10d")
-      .setDefRemediationBaseEffort(null);
-    ruleDao.insert(session, rule.getDefinition());
-    session.commit();
-
-    WsTester.TestRequest request = wsTester.newPostRequest("api/rules", "update")
-      .setParam("key", rule.getKey().toString())
-      .setParam(PARAM_REMEDIATION_FN_TYPE, LINEAR_OFFSET.toString())
-      .setParam(PARAM_REMEDIATION_FN_GAP_MULTIPLIER, "15d")
-      .setParam(PARAM_REMEDIATION_FN_BASE_EFFORT, "5min");
-    request.execute().assertJson(getClass(), "update_rule_remediation_function.json");
-  }
-
-  @Test
-  public void update_custom_rule_with_deprecated_remediation_function_parameters() throws Exception {
-    RuleDto rule = RuleTesting.newXooX1()
-      .setOrganizationUuid(defaultOrganization.getUuid())
-      .setDefRemediationFunction(LINEAR_OFFSET.toString())
-      .setDefRemediationGapMultiplier("10d")
-      .setDefRemediationBaseEffort("5min")
-      .setRemediationFunction(LINEAR_OFFSET.toString())
-      .setRemediationGapMultiplier("15min")
-      .setRemediationBaseEffort("3h");
-    ruleDao.insert(session, rule.getDefinition());
-    ruleDao.insertOrUpdate(session, rule.getMetadata().setRuleId(rule.getId()));
-    session.commit();
-
-    WsTester.TestRequest request = wsTester.newPostRequest("api/rules", "update")
-      .setParam("key", rule.getKey().toString())
-      .setParam("debt_remediation_fn_type", LINEAR_OFFSET.toString())
-      .setParam("debt_remediation_fy_coeff", "11d")
-      .setParam("debt_remediation_fn_offset", "6min");
-    request.execute().assertJson(getClass(), "deprecated_remediation_function.json");
-  }
-
   @Test
   public void update_custom_rule() throws Exception {
     // Template rule
diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/UpdateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/UpdateActionTest.java
new file mode 100644 (file)
index 0000000..8143484
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+ * 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.ws;
+
+import java.io.IOException;
+import org.junit.Before;
+import org.junit.Test;
+import org.sonar.api.config.MapSettings;
+import org.sonar.api.resources.Languages;
+import org.sonar.api.utils.System2;
+import org.sonar.db.DbClient;
+import org.sonar.db.DbTester;
+import org.sonar.db.organization.OrganizationDto;
+import org.sonar.db.rule.RuleDefinitionDto;
+import org.sonar.db.rule.RuleTesting;
+import org.sonar.server.es.EsClient;
+import org.sonar.server.es.EsTester;
+import org.sonar.server.organization.DefaultOrganizationProvider;
+import org.sonar.server.organization.TestDefaultOrganizationProvider;
+import org.sonar.server.rule.RuleUpdater;
+import org.sonar.server.rule.index.RuleIndex;
+import org.sonar.server.rule.index.RuleIndexDefinition;
+import org.sonar.server.rule.index.RuleIndexer;
+import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.text.MacroInterpreter;
+import org.sonar.server.ws.TestRequest;
+import org.sonar.server.ws.TestResponse;
+import org.sonar.server.ws.WsAction;
+import org.sonar.server.ws.WsActionTester;
+import org.sonarqube.ws.Rules;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.sonar.api.server.debt.DebtRemediationFunction.Type.LINEAR;
+import static org.sonar.api.server.debt.DebtRemediationFunction.Type.LINEAR_OFFSET;
+import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES;
+import static org.sonar.server.rule.ws.UpdateAction.DEPRECATED_PARAM_REMEDIATION_FN_COEFF;
+import static org.sonar.server.rule.ws.UpdateAction.DEPRECATED_PARAM_REMEDIATION_FN_OFFSET;
+import static org.sonar.server.rule.ws.UpdateAction.DEPRECATED_PARAM_REMEDIATION_FN_TYPE;
+import static org.sonar.server.rule.ws.UpdateAction.PARAM_KEY;
+import static org.sonar.server.rule.ws.UpdateAction.PARAM_REMEDIATION_FN_BASE_EFFORT;
+import static org.sonar.server.rule.ws.UpdateAction.PARAM_REMEDIATION_FN_GAP_MULTIPLIER;
+import static org.sonar.server.rule.ws.UpdateAction.PARAM_REMEDIATION_FN_TYPE;
+import static org.sonarqube.ws.MediaTypes.PROTOBUF;
+
+public class UpdateActionTest {
+
+  @org.junit.Rule
+  public DbTester dbTester = DbTester.create();
+  @org.junit.Rule
+  public EsTester esTester = new EsTester(
+    new RuleIndexDefinition(new MapSettings()));
+  @org.junit.Rule
+  public UserSessionRule userSession = UserSessionRule.standalone();
+
+  private DbClient dbClient = dbTester.getDbClient();
+  private EsClient esClient = esTester.client();
+
+  private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester);
+  private MacroInterpreter macroInterpreter = mock(MacroInterpreter.class);
+  private Languages languages = new Languages();
+  private RuleMapper mapper = new RuleMapper(languages, macroInterpreter);
+  private RuleIndexer ruleIndexer = new RuleIndexer(esClient, dbClient);
+  private RuleUpdater ruleUpdater = new RuleUpdater(dbClient, ruleIndexer, System2.INSTANCE, defaultOrganizationProvider);
+  private RuleWsSupport ruleWsSupport = new RuleWsSupport(dbClient, userSession, defaultOrganizationProvider);
+  private WsAction underTest = new UpdateAction(dbClient, ruleUpdater, mapper, userSession, ruleWsSupport, defaultOrganizationProvider);
+  private WsActionTester actionTester = new WsActionTester(underTest);
+  private OrganizationDto defaultOrganization;
+
+  private RuleIndex ruleIndex = new RuleIndex(esClient);
+
+  @Before
+  public void setUp() {
+    defaultOrganization = dbTester.getDefaultOrganization();
+    logInAsQProfileAdministrator();
+  }
+
+  @Test
+  public void update_rule_remediation_function() throws IOException {
+    doReturn("interpreted").when(macroInterpreter).interpret(anyString());
+
+    RuleDefinitionDto rule = dbTester.rules().insert(
+      r -> r.setDefRemediationFunction(LINEAR.toString()),
+      r -> r.setDefRemediationGapMultiplier("10d"),
+      r -> r.setDefRemediationBaseEffort(null));
+
+    String newOffset = LINEAR_OFFSET.toString();
+    String newMultiplier = "15d";
+    String newEffort = "5min";
+
+    TestRequest request = actionTester.newRequest().setMethod("POST")
+      .setMediaType(PROTOBUF)
+      .setParam("key", rule.getKey().toString())
+      .setParam(PARAM_REMEDIATION_FN_TYPE, newOffset)
+      .setParam(PARAM_REMEDIATION_FN_GAP_MULTIPLIER, newMultiplier)
+      .setParam(PARAM_REMEDIATION_FN_BASE_EFFORT, newEffort);
+    TestResponse response = request.execute();
+    Rules.UpdateResponse result = Rules.UpdateResponse.parseFrom(response.getInputStream());
+
+    Rules.Rule updatedRule = result.getRule();
+    assertThat(updatedRule).isNotNull();
+
+    assertThat(updatedRule.getKey()).isEqualTo(rule.getKey().toString());
+    assertThat(updatedRule.getDefaultRemFnType()).isEqualTo(rule.getDefRemediationFunction());
+    assertThat(updatedRule.getDefaultRemFnGapMultiplier()).isEqualTo(rule.getDefRemediationGapMultiplier());
+    assertThat(updatedRule.getDefaultRemFnBaseEffort()).isEqualTo("");
+    assertThat(updatedRule.getGapDescription()).isEqualTo(rule.getGapDescription());
+
+    assertThat(updatedRule.getRemFnType()).isEqualTo(newOffset);
+    assertThat(updatedRule.getRemFnGapMultiplier()).isEqualTo(newMultiplier);
+    assertThat(updatedRule.getRemFnBaseEffort()).isEqualTo(newEffort);
+  }
+
+  @Test
+  public void update_custom_rule_with_deprecated_remediation_function_parameters() throws Exception {
+    doReturn("interpreted").when(macroInterpreter).interpret(anyString());
+
+    RuleDefinitionDto rule = RuleTesting.newRule()
+      .setDefRemediationFunction(LINEAR_OFFSET.toString())
+      .setDefRemediationGapMultiplier("10d")
+      .setDefRemediationBaseEffort("5min");
+    dbTester.rules().insert(rule);
+
+    String newType = LINEAR_OFFSET.toString();
+    String newCoeff = "11d";
+    String newOffset = "6min";
+
+    TestRequest request = actionTester.newRequest().setMethod("POST")
+      .setMediaType(PROTOBUF)
+      .setParam(PARAM_KEY, rule.getKey().toString())
+      .setParam(DEPRECATED_PARAM_REMEDIATION_FN_TYPE, newType)
+      .setParam(DEPRECATED_PARAM_REMEDIATION_FN_COEFF, newCoeff)
+      .setParam(DEPRECATED_PARAM_REMEDIATION_FN_OFFSET, newOffset);
+    TestResponse response = request.execute();
+    Rules.UpdateResponse result = Rules.UpdateResponse.parseFrom(response.getInputStream());
+
+    Rules.Rule updatedRule = result.getRule();
+    assertThat(updatedRule).isNotNull();
+
+    assertThat(updatedRule.getKey()).isEqualTo(rule.getKey().toString());
+    assertThat(updatedRule.getDefaultRemFnType()).isEqualTo(rule.getDefRemediationFunction());
+    assertThat(updatedRule.getDefaultRemFnGapMultiplier()).isEqualTo(rule.getDefRemediationGapMultiplier());
+    assertThat(updatedRule.getDefaultRemFnBaseEffort()).isEqualTo(rule.getDefRemediationBaseEffort());
+    assertThat(updatedRule.getEffortToFixDescription()).isEqualTo(rule.getGapDescription());
+
+    assertThat(updatedRule.getRemFnType()).isEqualTo(newType);
+    assertThat(updatedRule.getDebtRemFnCoeff()).isEqualTo(newCoeff);
+    assertThat(updatedRule.getDebtRemFnOffset()).isEqualTo(newOffset);
+
+    assertThat(updatedRule.getRemFnType()).isEqualTo(newType);
+    assertThat(updatedRule.getRemFnGapMultiplier()).isEqualTo(newCoeff);
+    assertThat(updatedRule.getRemFnBaseEffort()).isEqualTo(newOffset);
+    assertThat(updatedRule.getGapDescription()).isEqualTo(rule.getGapDescription());
+  }
+
+  private void logInAsQProfileAdministrator() {
+    userSession
+      .logIn()
+      .addPermission(ADMINISTER_QUALITY_PROFILES, defaultOrganization.getUuid());
+  }
+}
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/rule/ws/UpdateActionMediumTest/update_rule_remediation_function.json b/server/sonar-server/src/test/resources/org/sonar/server/rule/ws/UpdateActionMediumTest/update_rule_remediation_function.json
deleted file mode 100644 (file)
index 4fbd264..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "rule": {
-    "key": "xoo:x1",
-    "defaultRemFnType": "LINEAR",
-    "defaultRemFnGapMultiplier": "10d",
-    "remFnType": "LINEAR_OFFSET",
-    "remFnGapMultiplier": "15d",
-    "remFnBaseEffort": "5min",
-    "gapDescription": "xoo.x1.effortToFix"
-  }
-}