static void updateMeasureBuilder(Measure.Builder measureBuilder, MetricDto metric, double doubleValue, @Nullable String stringValue, double variation) { measureBuilder.setMetric(metric.getKey()); Double bestValue = metric.getBestValue(); // a measure value can be null, new_violations metric for example if (!Double.isNaN(doubleValue) || stringValue != null) { measureBuilder.setValue(formatMeasureValue(doubleValue, stringValue, metric)); ofNullable(bestValue).ifPresent(v -> measureBuilder.setBestValue(compare(doubleValue, v) == 0)); } Measures.PeriodValue.Builder periodBuilder = Measures.PeriodValue.newBuilder(); if (Double.isNaN(variation)) { return; } Measures.PeriodValue.Builder builderForValue = periodBuilder .clear() .setIndex(1) .setValue(formatNumericalValue(variation, metric)); ofNullable(bestValue).ifPresent(v -> builderForValue.setBestValue(compare(variation, v) == 0)); measureBuilder.getPeriodsBuilder().addPeriodsValue(builderForValue); } }
static void updateMeasureBuilder(Measure.Builder measureBuilder, MetricDto metric, double doubleValue, @Nullable String stringValue, double variation) { measureBuilder.setMetric(metric.getKey()); Double bestValue = metric.getBestValue(); // a measure value can be null, new_violations metric for example if (!Double.isNaN(doubleValue) || stringValue != null) { measureBuilder.setValue(formatMeasureValue(doubleValue, stringValue, metric)); setNullable(bestValue, v -> measureBuilder.setBestValue(doubleValue == v)); } Measures.PeriodValue.Builder periodBuilder = Measures.PeriodValue.newBuilder(); if (Double.isNaN(variation)) { return; } Measures.PeriodValue.Builder builderForValue = periodBuilder .clear() .setIndex(1) .setValue(formatNumericalValue(variation, metric)); setNullable(bestValue, v -> builderForValue.setBestValue(variation == v)); measureBuilder.getPeriodsBuilder().addPeriodsValue(builderForValue); } }
.extracting(Measure::getMetric, m -> m.getPeriods().getPeriodsValueList()) .containsExactlyInAnyOrder( tuple(matchingBestValue.getKey(), singletonList(PeriodValue.newBuilder().setIndex(1).setValue("100").setBestValue(true).build())), tuple(doesNotMatchBestValue.getKey(), singletonList(PeriodValue.newBuilder().setIndex(1).setValue("10").setBestValue(false).build())), tuple(noBestValue.getKey(), singletonList(PeriodValue.newBuilder().setIndex(1).setValue("42").build())));
@Test public void use_best_value_for_rating() { ComponentDto project = db.components().insertPrivateProject(); userSession.anonymous().addProjectPermission(UserRole.USER, project); SnapshotDto projectSnapshot = dbClient.snapshotDao().insert(dbSession, newAnalysis(project) .setPeriodDate(parseDateTime("2016-01-11T10:49:50+0100").getTime()) .setPeriodMode("previous_version") .setPeriodParam("1.0-SNAPSHOT")); ComponentDto directory = newDirectory(project, "directory-uuid", "path/to/directory").setName("directory-1"); db.components().insertComponent(directory); ComponentDto file = newFileDto(directory, null, "file-uuid").setName("file-1"); db.components().insertComponent(file); MetricDto metric = dbClient.metricDao().insert(dbSession, newMetricDto() .setKey(NEW_SECURITY_RATING_KEY) .setOptimizedBestValue(true) .setBestValue(1d) .setValueType(RATING.name())); db.commit(); db.measures().insertLiveMeasure(directory, metric, m -> m.setVariation(2d)); ComponentTreeWsResponse response = ws.newRequest() .setParam(PARAM_COMPONENT, project.getKey()) .setParam(PARAM_METRIC_KEYS, NEW_SECURITY_RATING_KEY) .setParam(PARAM_ADDITIONAL_FIELDS, "metrics") .executeProtobuf(ComponentTreeWsResponse.class); // directory assertThat(response.getComponentsList().get(0).getMeasuresList().get(0).getPeriods().getPeriodsValue(0).getValue()).isEqualTo("2.0"); // file measures assertThat(response.getComponentsList().get(1).getMeasuresList().get(0).getPeriods().getPeriodsValue(0).getValue()).isEqualTo("1.0"); }