aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/sonar-core-plugin/src
diff options
context:
space:
mode:
authorGodin <mandrikov@gmail.com>2010-12-06 15:25:47 +0000
committerGodin <mandrikov@gmail.com>2010-12-06 15:25:47 +0000
commitdef5c589d4d2b79c8e4a0c6da5d18c34ca22a889 (patch)
treeada2bac9cbd22216648f6464149b663c6c2e90d6 /plugins/sonar-core-plugin/src
parent8c32fa320d796fe4672dd671ea8219989bcaa2eb (diff)
downloadsonarqube-def5c589d4d2b79c8e4a0c6da5d18c34ca22a889.tar.gz
sonarqube-def5c589d4d2b79c8e4a0c6da5d18c34ca22a889.zip
NewViolationsDecorator :
* Fix bug * Add unit tests
Diffstat (limited to 'plugins/sonar-core-plugin/src')
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java6
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PastSnapshot.java2
-rw-r--r--plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/NewViolationsDecoratorTest.java158
3 files changed, 151 insertions, 15 deletions
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java
index d3bc967772e..e3294c0de25 100644
--- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java
+++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java
@@ -22,6 +22,7 @@ package org.sonar.plugins.core.timemachine;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
+import com.google.common.collect.Sets;
import org.sonar.api.batch.Decorator;
import org.sonar.api.batch.DecoratorContext;
import org.sonar.api.batch.DependedUpon;
@@ -122,7 +123,10 @@ public class NewViolationsDecorator implements Decorator {
}
}
- for (Rule rule : childrenByRule.keys()) {
+ Set<Rule> rules = Sets.newHashSet(violationsByRule.keys());
+ rules.addAll(childrenByRule.keys());
+
+ for (Rule rule : rules) {
RuleMeasure measure = RuleMeasure.createForRule(CoreMetrics.NEW_VIOLATIONS, rule, null);
measure.setRulePriority(ruleToLevel.get(rule));
for (PastSnapshot variationSnapshot : timeMachineConfiguration.getProjectPastSnapshots()) {
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PastSnapshot.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PastSnapshot.java
index 87d803612e8..f4c0e545652 100644
--- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PastSnapshot.java
+++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PastSnapshot.java
@@ -24,7 +24,7 @@ import org.sonar.api.database.model.Snapshot;
import java.util.Date;
-public final class PastSnapshot {
+public class PastSnapshot {
private int index;
private String mode, modeParameter;
diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/NewViolationsDecoratorTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/NewViolationsDecoratorTest.java
index 0ab3cfaa4a3..520b5551a55 100644
--- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/NewViolationsDecoratorTest.java
+++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/NewViolationsDecoratorTest.java
@@ -19,34 +19,74 @@
*/
package org.sonar.plugins.core.timemachine;
+import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.time.DateUtils;
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.batch.DecoratorContext;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.measures.Measure;
+import org.sonar.api.measures.Metric;
+import org.sonar.api.measures.RuleMeasure;
import org.sonar.api.resources.Project;
+import org.sonar.api.resources.Resource;
+import org.sonar.api.rules.Rule;
+import org.sonar.api.rules.RulePriority;
import org.sonar.api.rules.Violation;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
-import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
+import static org.mockito.Matchers.argThat;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class NewViolationsDecoratorTest {
+ private Rule rule1;
+ private Rule rule2;
+ private Rule rule3;
private NewViolationsDecorator decorator;
private DecoratorContext context;
+ private Resource resource;
+
+ private Date rightNow;
+ private Date tenDaysAgo;
+ private Date fiveDaysAgo;
@Before
public void setUp() {
+ rightNow = new Date();
+ tenDaysAgo = DateUtils.addDays(rightNow, -10);
+ fiveDaysAgo = DateUtils.addDays(rightNow, -5);
+
+ PastSnapshot pastSnapshot = mock(PastSnapshot.class);
+ when(pastSnapshot.getIndex()).thenReturn(1);
+ when(pastSnapshot.getDate()).thenReturn(fiveDaysAgo);
+
+ PastSnapshot pastSnapshot2 = mock(PastSnapshot.class);
+ when(pastSnapshot2.getIndex()).thenReturn(2);
+ when(pastSnapshot2.getDate()).thenReturn(tenDaysAgo);
+
+ TimeMachineConfiguration timeMachineConfiguration = mock(TimeMachineConfiguration.class);
+ when(timeMachineConfiguration.getProjectPastSnapshots()).thenReturn(Arrays.asList(pastSnapshot, pastSnapshot2));
+
context = mock(DecoratorContext.class);
- decorator = new NewViolationsDecorator(null);
+ resource = mock(Resource.class);
+ when(context.getResource()).thenReturn(resource);
+
+ decorator = new NewViolationsDecorator(timeMachineConfiguration);
+
+ rule1 = Rule.create().setPluginName("rule1").setKey("rule1").setName("name1");
+ rule2 = Rule.create().setPluginName("rule2").setKey("rule2").setName("name2");
+ rule3 = Rule.create().setPluginName("rule3").setKey("rule3").setName("name3");
}
@Test
@@ -62,21 +102,16 @@ public class NewViolationsDecoratorTest {
@Test
public void shouldBeDependedUponMetric() {
- assertThat(decorator.generatesMetric().size(), greaterThan(0));
+ assertThat(decorator.generatesMetric().size(), is(6));
}
@Test
public void shouldCountViolationsAfterDate() {
- Date date1 = new Date();
- Date date2 = DateUtils.addDays(date1, -20);
- Project project = new Project("project");
- project.setAnalysisDate(date1);
- Violation violation1 = new Violation(null).setCreatedAt(date1);
- Violation violation2 = new Violation(null).setCreatedAt(date2);
- List<Violation> violations = Arrays.asList(violation1, violation2);
-
- assertThat(decorator.countViolations(violations, DateUtils.addDays(date1, -10)), is(1));
- assertThat(decorator.countViolations(violations, DateUtils.addDays(date1, -30)), is(2));
+ List<Violation> violations = createViolations();
+
+ assertThat(decorator.countViolations(null, fiveDaysAgo), is(0));
+ assertThat(decorator.countViolations(violations, fiveDaysAgo), is(3));
+ assertThat(decorator.countViolations(violations, tenDaysAgo), is(6));
}
@Test
@@ -89,4 +124,101 @@ public class NewViolationsDecoratorTest {
assertThat(decorator.sumChildren(2, children), is(3));
assertThat(decorator.sumChildren(3, children), is(6));
}
+
+ @Test
+ public void priorityViolations() {
+ when(context.getViolations()).thenReturn(createViolations());
+
+ decorator.decorate(resource, context);
+
+ verify(context).saveMeasure(argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_VIOLATIONS, null, RulePriority.BLOCKER, 0.0, 0.0)));
+ verify(context).saveMeasure(argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_VIOLATIONS, null, RulePriority.CRITICAL, 1.0, 2.0)));
+ verify(context).saveMeasure(argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_VIOLATIONS, null, RulePriority.MAJOR, 1.0, 2.0)));
+ verify(context).saveMeasure(argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_VIOLATIONS, null, RulePriority.MINOR, 1.0, 2.0)));
+ verify(context).saveMeasure(argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_VIOLATIONS, null, RulePriority.INFO, 0.0, 0.0)));
+
+ verify(context).saveMeasure(argThat(new IsVariationMeasure(CoreMetrics.NEW_BLOCKER_VIOLATIONS, 0.0, 0.0)));
+ verify(context).saveMeasure(argThat(new IsVariationMeasure(CoreMetrics.NEW_CRITICAL_VIOLATIONS, 1.0, 2.0)));
+ verify(context).saveMeasure(argThat(new IsVariationMeasure(CoreMetrics.NEW_MAJOR_VIOLATIONS, 1.0, 2.0)));
+ verify(context).saveMeasure(argThat(new IsVariationMeasure(CoreMetrics.NEW_MINOR_VIOLATIONS, 1.0, 2.0)));
+ verify(context).saveMeasure(argThat(new IsVariationMeasure(CoreMetrics.NEW_INFO_VIOLATIONS, 0.0, 0.0)));
+ }
+
+ @Test
+ public void ruleViolations() {
+ when(context.getViolations()).thenReturn(createViolations());
+
+ decorator.decorate(resource, context);
+
+ verify(context).saveMeasure(argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_VIOLATIONS, rule1, RulePriority.CRITICAL, 1.0, 2.0)));
+ verify(context).saveMeasure(argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_VIOLATIONS, rule2, RulePriority.MAJOR, 1.0, 2.0)));
+ verify(context).saveMeasure(argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_VIOLATIONS, rule3, RulePriority.MINOR, 1.0, 2.0)));
+ }
+
+ private List<Violation> createViolations() {
+ List<Violation> violations = new ArrayList<Violation>();
+ violations.add(Violation.create(rule1, resource).setPriority(RulePriority.CRITICAL).setCreatedAt(rightNow));
+ violations.add(Violation.create(rule1, resource).setPriority(RulePriority.CRITICAL).setCreatedAt(tenDaysAgo));
+ violations.add(Violation.create(rule2, resource).setPriority(RulePriority.MAJOR).setCreatedAt(fiveDaysAgo));
+ violations.add(Violation.create(rule2, resource).setPriority(RulePriority.MAJOR).setCreatedAt(tenDaysAgo));
+ violations.add(Violation.create(rule3, resource).setPriority(RulePriority.MINOR).setCreatedAt(fiveDaysAgo));
+ violations.add(Violation.create(rule3, resource).setPriority(RulePriority.MINOR).setCreatedAt(tenDaysAgo));
+ return violations;
+ }
+
+ private class IsVariationRuleMeasure extends BaseMatcher<Measure> {
+ private Metric metric = null;
+ private Rule rule = null;
+ private RulePriority priority = null;
+ private Double var1 = null;
+ private Double var2 = null;
+
+ public IsVariationRuleMeasure(Metric metric, Rule rule, RulePriority priority, Double var1, Double var2) {
+ this.metric = metric;
+ this.rule = rule;
+ this.priority = priority;
+ this.var1 = var1;
+ this.var2 = var2;
+ }
+
+ public boolean matches(Object o) {
+ if (!(o instanceof RuleMeasure)) {
+ return false;
+ }
+ RuleMeasure m = (RuleMeasure) o;
+ return ObjectUtils.equals(metric, m.getMetric()) &&
+ ObjectUtils.equals(rule, m.getRule()) &&
+ ObjectUtils.equals(priority, m.getRulePriority()) &&
+ ObjectUtils.equals(var1, m.getVariation1()) &&
+ ObjectUtils.equals(var2, m.getVariation2());
+ }
+
+ public void describeTo(Description arg0) {
+ }
+ }
+
+ private class IsVariationMeasure extends BaseMatcher<Measure> {
+ private Metric metric = null;
+ private Double var1 = null;
+ private Double var2 = null;
+
+ public IsVariationMeasure(Metric metric, Double var1, Double var2) {
+ this.metric = metric;
+ this.var1 = var1;
+ this.var2 = var2;
+ }
+
+ public boolean matches(Object o) {
+ if (!(o instanceof Measure)) {
+ return false;
+ }
+ Measure m = (Measure) o;
+ return ObjectUtils.equals(metric, m.getMetric()) &&
+ ObjectUtils.equals(var1, m.getVariation1()) &&
+ ObjectUtils.equals(var2, m.getVariation2());
+ }
+
+ public void describeTo(Description o) {
+ }
+ }
}