]> source.dussan.org Git - sonarqube.git/commitdiff
Add Medium Test on rule search with characteristics
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 27 Jun 2014 09:46:10 +0000 (11:46 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 27 Jun 2014 09:46:10 +0000 (11:46 +0200)
sonar-server/src/test/java/org/sonar/server/rule/RuleUpdaterMediumTest.java
sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java

index 0bbfe65f86839d96f01505ba4624800e4dd9e0fd..6b7abdfe2715dd39a92bd318b29d70768a7912b0 100644 (file)
@@ -224,6 +224,7 @@ public class RuleUpdaterMediumTest {
       .setDefaultRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET.name())
       .setDefaultRemediationCoefficient("1d")
       .setDefaultRemediationOffset("5min")
+      .setSubCharacteristicId(null)
       .setRemediationFunction(null)
       .setRemediationCoefficient(null)
       .setRemediationOffset(null));
index 48d42d0163aa930de9345630aae1cfb56213a690..e43f4813674d97a0d7d70847ee342cd7e633176c 100644 (file)
  */
 package org.sonar.server.rule.index;
 
+import com.google.common.base.Function;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Sets;
 import org.apache.commons.lang.time.DateUtils;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.*;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.api.rule.Severity;
@@ -48,13 +46,11 @@ import org.sonar.server.search.QueryOptions;
 import org.sonar.server.search.Result;
 import org.sonar.server.tester.ServerTester;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
+import javax.annotation.Nullable;
 
+import java.util.*;
+
+import static com.google.common.collect.Lists.newArrayList;
 import static org.fest.assertions.Assertions.assertThat;
 import static org.fest.assertions.Fail.fail;
 
@@ -363,10 +359,10 @@ public class RuleIndexMediumTest {
 
   @Test
   public void search_by_characteristics() throws InterruptedException {
-    CharacteristicDto char1 = DebtTesting.newCharacteristicDto("char1");
+    CharacteristicDto char1 = DebtTesting.newCharacteristicDto("RELIABILITY");
     db.debtCharacteristicDao().insert(char1, dbSession);
 
-    CharacteristicDto char11 = DebtTesting.newCharacteristicDto("char11")
+    CharacteristicDto char11 = DebtTesting.newCharacteristicDto("SOFT_RELIABILITY")
       .setParentId(char1.getId());
     db.debtCharacteristicDao().insert(char11, dbSession);
     dbSession.commit();
@@ -377,6 +373,7 @@ public class RuleIndexMediumTest {
     dao.insert(dbSession, RuleTesting.newDto(RuleKey.of("javascript", "S002")));
 
     dbSession.commit();
+    dbSession.clearCache();
 
     RuleQuery query;
     Result<Rule> results;
@@ -414,6 +411,74 @@ public class RuleIndexMediumTest {
     assertThat(index.search(query, new QueryOptions()).getHits()).hasSize(1);
   }
 
+  @Test
+  @Ignore("To be fixed")
+  public void search_by_characteristics_with_default_and_overridden_char() throws InterruptedException {
+    CharacteristicDto char1 = DebtTesting.newCharacteristicDto("RELIABILITY");
+    db.debtCharacteristicDao().insert(char1, dbSession);
+
+    CharacteristicDto char11 = DebtTesting.newCharacteristicDto("SOFT_RELIABILITY")
+      .setParentId(char1.getId());
+    db.debtCharacteristicDao().insert(char11, dbSession);
+    dbSession.commit();
+
+    CharacteristicDto char2 = DebtTesting.newCharacteristicDto("TESTABILITY");
+    db.debtCharacteristicDao().insert(char2, dbSession);
+
+    CharacteristicDto char21 = DebtTesting.newCharacteristicDto("UNIT_TESTABILITY")
+      .setParentId(char2.getId());
+    db.debtCharacteristicDao().insert(char21, dbSession);
+    dbSession.commit();
+
+    // Rule with only default sub characteristic -> should be find by char11 and char1
+    dao.insert(dbSession, RuleTesting.newDto(RuleKey.of("java", "S001"))
+      .setSubCharacteristicId(char11.getId())
+      .setDefaultSubCharacteristicId(null));
+
+    // Rule with only sub characteristic -> should be find by char11 and char1
+    dao.insert(dbSession, RuleTesting.newDto(RuleKey.of("java", "S002"))
+      .setSubCharacteristicId(null)
+      .setDefaultSubCharacteristicId(char11.getId()));
+
+    // Rule with both default sub characteristic and overridden sub characteristic -> should only be find by char21 and char2
+    dao.insert(dbSession, RuleTesting.newDto(RuleKey.of("java", "S003"))
+      .setSubCharacteristicId(char21.getId()))
+      .setDefaultSubCharacteristicId(char11.getId());
+
+    // Rule with both default sub characteristic and overridden sub characteristic and with same values -> should be find by char11 and char1
+    dao.insert(dbSession, RuleTesting.newDto(RuleKey.of("java", "S004"))
+      .setSubCharacteristicId(char11.getId()))
+      .setDefaultSubCharacteristicId(char11.getId());
+
+    dbSession.commit();
+    dbSession.clearCache();
+
+    RuleQuery query;
+    Result<Rule> results;
+
+    // 0. we have 4 rules in index
+    results = index.search(new RuleQuery(), new QueryOptions());
+    assertThat(results.getHits()).hasSize(4);
+
+    // filter by subChar
+    query = new RuleQuery().setDebtCharacteristics(ImmutableSet.of(char11.getKey()));
+    assertThat(ruleKeys(index.search(query, new QueryOptions()).getHits())).containsOnly("S001", "S002", "S004"); // FIXME S002 is missing
+
+    query = new RuleQuery().setDebtCharacteristics(ImmutableSet.of(char21.getKey()));
+    assertThat(ruleKeys(index.search(query, new QueryOptions()).getHits())).containsOnly("S003");
+
+    // filter by Char
+    query = new RuleQuery().setDebtCharacteristics(ImmutableSet.of(char1.getKey()));
+    assertThat(ruleKeys(index.search(query, new QueryOptions()).getHits())).containsOnly("S001", "S002", "S004"); // FIXME S002 is missing
+
+    query = new RuleQuery().setDebtCharacteristics(ImmutableSet.of(char2.getKey()));
+    assertThat(ruleKeys(index.search(query, new QueryOptions()).getHits())).containsOnly("S003");
+
+    // filter by Char and SubChar
+    query = new RuleQuery().setDebtCharacteristics(ImmutableSet.of(char11.getKey(), char1.getKey(), char2.getKey(), char21.getKey()));
+    assertThat(ruleKeys(index.search(query, new QueryOptions()).getHits())).containsOnly("S001", "S002", "S003", "S004"); // FIXME S002 is missing
+  }
+
   @Test
   public void search_by_any_of_severities() throws InterruptedException {
     dao.insert(dbSession, RuleTesting.newDto(RuleKey.of("java", "S001")).setSeverity(Severity.BLOCKER));
@@ -849,4 +914,13 @@ public class RuleIndexMediumTest {
       .setAvailableSince(DateUtils.addDays(since, 1));
     assertThat(index.search(availableSinceNowQuery, new QueryOptions()).getHits()).hasSize(0);
   }
+
+  private static List<String> ruleKeys(List<Rule> rules){
+    return newArrayList(Iterables.transform(rules, new Function<Rule, String>() {
+      @Override
+      public String apply(@Nullable Rule input) {
+        return input != null ? input.key().rule() : null;
+      }
+    }));
+  }
 }