aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Schwarz <daniel.schwarz@sonarsource.com>2017-05-23 15:01:18 +0200
committerGrégoire Aubert <gregoire.aubert@sonarsource.com>2017-06-09 08:26:48 +0200
commit3fbd83b3c0ca94b26c4968af2dc51a6ff46cc2de (patch)
tree0935c7fae29bfc4f44145254f1b606e5d1bbee6e
parentc72da32c69c14f71b68c81f46adfe219ecc40c9e (diff)
downloadsonarqube-3fbd83b3c0ca94b26c4968af2dc51a6ff46cc2de.tar.gz
sonarqube-3fbd83b3c0ca94b26c4968af2dc51a6ff46cc2de.zip
SONAR-9260 add "NO_DATA" range for coverage facets of project search
-rw-r--r--it/it-tests/src/test/java/it/projectSearch/SearchProjectsTest.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java6
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchProjectsActionTest.java8
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java24
4 files changed, 32 insertions, 8 deletions
diff --git a/it/it-tests/src/test/java/it/projectSearch/SearchProjectsTest.java b/it/it-tests/src/test/java/it/projectSearch/SearchProjectsTest.java
index 4d4b50369a3..4906a0481ce 100644
--- a/it/it-tests/src/test/java/it/projectSearch/SearchProjectsTest.java
+++ b/it/it-tests/src/test/java/it/projectSearch/SearchProjectsTest.java
@@ -164,6 +164,7 @@ public class SearchProjectsTest {
tuple("WARN", 0L),
tuple("ERROR", 0L));
checkFacet(response, "coverage",
+ tuple("NO_DATA", 2L),
tuple("*-30.0", 0L),
tuple("30.0-50.0", 0L),
tuple("50.0-70.0", 0L),
@@ -239,6 +240,7 @@ public class SearchProjectsTest {
tuple("4", 0L),
tuple("5", 0L));
checkFacet(response, "new_coverage",
+ tuple("NO_DATA", 2L),
tuple("*-30.0", 0L),
tuple("30.0-50.0", 0L),
tuple("50.0-70.0", 0L),
diff --git a/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java b/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java
index 8fb31c3ee65..c784e13abbf 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java
@@ -121,8 +121,8 @@ public class ProjectMeasuresIndex {
(esSearch, query, facetBuilder) -> addRangeFacetIncludingNoData(esSearch, DUPLICATED_LINES_DENSITY_KEY, facetBuilder, DUPLICATIONS_THRESHOLDS))
.put(NEW_DUPLICATED_LINES_DENSITY_KEY,
(esSearch, query, facetBuilder) -> addRangeFacetIncludingNoData(esSearch, NEW_DUPLICATED_LINES_DENSITY_KEY, facetBuilder, DUPLICATIONS_THRESHOLDS))
- .put(COVERAGE_KEY, (esSearch, query, facetBuilder) -> addRangeFacet(esSearch, COVERAGE_KEY, facetBuilder, COVERAGE_THRESHOLDS))
- .put(NEW_COVERAGE_KEY, (esSearch, query, facetBuilder) -> addRangeFacet(esSearch, NEW_COVERAGE_KEY, facetBuilder, COVERAGE_THRESHOLDS))
+ .put(COVERAGE_KEY, (esSearch, query, facetBuilder) -> addRangeFacetIncludingNoData(esSearch, COVERAGE_KEY, facetBuilder, COVERAGE_THRESHOLDS))
+ .put(NEW_COVERAGE_KEY, (esSearch, query, facetBuilder) -> addRangeFacetIncludingNoData(esSearch, NEW_COVERAGE_KEY, facetBuilder, COVERAGE_THRESHOLDS))
.put(SQALE_RATING_KEY, (esSearch, query, facetBuilder) -> addRatingFacet(esSearch, SQALE_RATING_KEY, facetBuilder))
.put(NEW_MAINTAINABILITY_RATING_KEY, (esSearch, query, facetBuilder) -> addRatingFacet(esSearch, NEW_MAINTAINABILITY_RATING_KEY, facetBuilder))
.put(RELIABILITY_RATING_KEY, (esSearch, query, facetBuilder) -> addRatingFacet(esSearch, RELIABILITY_RATING_KEY, facetBuilder))
@@ -284,7 +284,7 @@ public class ProjectMeasuresIndex {
BoolQueryBuilder metricFilters = boolQuery();
entry.getValue()
.stream()
- .map(criterion -> toQuery(criterion))
+ .map(ProjectMeasuresIndex::toQuery)
.forEach(metricFilters::must);
filters.put(entry.getKey(), metricFilters);
});
diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchProjectsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchProjectsActionTest.java
index f54ef4b2e94..534cd77fdbc 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchProjectsActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchProjectsActionTest.java
@@ -743,6 +743,7 @@ public class SearchProjectsActionTest {
userSession.logIn();
OrganizationDto organizationDto = db.organizations().insert();
MetricDto coverage = db.measureDbTester().insertMetric(c -> c.setKey(COVERAGE).setValueType(PERCENT.name()));
+ insertProject(organizationDto);
insertProject(organizationDto, new Measure(coverage, c -> c.setValue(80d)));
insertProject(organizationDto, new Measure(coverage, c -> c.setValue(85d)));
insertProject(organizationDto, new Measure(coverage, c -> c.setValue(10d)));
@@ -754,7 +755,8 @@ public class SearchProjectsActionTest {
.findFirst().orElseThrow(IllegalStateException::new);
assertThat(facet.getValuesList())
.extracting(Common.FacetValue::getVal, Common.FacetValue::getCount)
- .containsExactly(
+ .containsOnly(
+ tuple("NO_DATA", 1L),
tuple("*-30.0", 1L),
tuple("30.0-50.0", 0L),
tuple("50.0-70.0", 0L),
@@ -767,6 +769,7 @@ public class SearchProjectsActionTest {
userSession.logIn();
OrganizationDto organizationDto = db.organizations().insert();
MetricDto coverage = db.measureDbTester().insertMetric(c -> c.setKey(NEW_COVERAGE).setValueType(PERCENT.name()));
+ insertProject(organizationDto);
insertProject(organizationDto, new Measure(coverage, c -> c.setVariation(80d)));
insertProject(organizationDto, new Measure(coverage, c -> c.setVariation(85d)));
insertProject(organizationDto, new Measure(coverage, c -> c.setVariation(10d)));
@@ -778,7 +781,8 @@ public class SearchProjectsActionTest {
.findFirst().orElseThrow(IllegalStateException::new);
assertThat(facet.getValuesList())
.extracting(Common.FacetValue::getVal, Common.FacetValue::getCount)
- .containsExactly(
+ .containsOnly(
+ tuple("NO_DATA", 1L),
tuple("*-30.0", 1L),
tuple("30.0-50.0", 0L),
tuple("50.0-70.0", 0L),
diff --git a/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java
index 3affb0a44be..e6d819df1f4 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java
@@ -533,7 +533,8 @@ public class ProjectMeasuresIndexTest {
entry("100000.0-500000.0", 2L),
entry("500000.0-*", 0L));
// But facet on coverage does well take into into filters
- assertThat(facets.get(COVERAGE)).containsExactly(
+ assertThat(facets.get(COVERAGE)).containsOnly(
+ entry("NO_DATA", 0L),
entry("*-30.0", 3L),
entry("30.0-50.0", 0L),
entry("50.0-70.0", 0L),
@@ -611,6 +612,8 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_coverage() {
index(
+ // 1 doc with no coverage
+ newDocWithNoMeasure(),
// 3 docs with coverage<30%
newDoc(COVERAGE, 0d),
newDoc(COVERAGE, 0d),
@@ -635,7 +638,8 @@ public class ProjectMeasuresIndexTest {
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(COVERAGE)).getFacets();
- assertThat(facets.get(COVERAGE)).containsExactly(
+ assertThat(facets.get(COVERAGE)).containsOnly(
+ entry("NO_DATA", 1L),
entry("*-30.0", 3L),
entry("30.0-50.0", 2L),
entry("50.0-70.0", 4L),
@@ -646,6 +650,10 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_coverage_is_sticky() {
index(
+ // docs with no coverage
+ newDoc(NCLOC, 999d, DUPLICATION, 0d),
+ newDoc(NCLOC, 999d, DUPLICATION, 1d),
+ newDoc(NCLOC, 999d, DUPLICATION, 20d),
// docs with coverage<30%
newDoc(NCLOC, 999d, COVERAGE, 0d, DUPLICATION, 0d),
newDoc(NCLOC, 1_000d, COVERAGE, 10d, DUPLICATION, 0d),
@@ -668,6 +676,7 @@ public class ProjectMeasuresIndexTest {
// Sticky facet on coverage does not take into account coverage filter
assertThat(facets.get(COVERAGE)).containsExactly(
+ entry("NO_DATA", 2L),
entry("*-30.0", 3L),
entry("30.0-50.0", 2L),
entry("50.0-70.0", 1L),
@@ -686,6 +695,8 @@ public class ProjectMeasuresIndexTest {
public void facet_coverage_contains_only_projects_authorized_for_user() throws Exception {
// User can see these projects
indexForUser(USER1,
+ // 1 doc with no coverage
+ newDocWithNoMeasure(),
// docs with coverage<30%
newDoc(COVERAGE, 0d),
newDoc(COVERAGE, 0d),
@@ -696,6 +707,9 @@ public class ProjectMeasuresIndexTest {
// User cannot see these projects
indexForUser(USER2,
+ // 2 docs with no coverage
+ newDocWithNoMeasure(),
+ newDocWithNoMeasure(),
// docs with coverage>=50% and coverage<70%
newDoc(COVERAGE, 50d),
// docs with coverage>=70% and coverage<80%
@@ -707,6 +721,7 @@ public class ProjectMeasuresIndexTest {
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(COVERAGE)).getFacets();
assertThat(facets.get(COVERAGE)).containsExactly(
+ entry("NO_DATA", 1L),
entry("*-30.0", 3L),
entry("30.0-50.0", 2L),
entry("50.0-70.0", 0L),
@@ -717,6 +732,8 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_new_coverage() {
index(
+ // 1 doc with no coverage
+ newDocWithNoMeasure(),
// 3 docs with coverage<30%
newDoc(NEW_COVERAGE, 0d),
newDoc(NEW_COVERAGE, 0d),
@@ -741,7 +758,8 @@ public class ProjectMeasuresIndexTest {
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(NEW_COVERAGE)).getFacets();
- assertThat(facets.get(NEW_COVERAGE)).containsExactly(
+ assertThat(facets.get(NEW_COVERAGE)).containsOnly(
+ entry("NO_DATA", 1L),
entry("*-30.0", 3L),
entry("30.0-50.0", 2L),
entry("50.0-70.0", 4L),