*/
package org.sonar.server.measure.ws;
-import java.util.Optional;
-import java.util.function.Function;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.api.server.ws.WebService;
import org.sonarqube.ws.Measures.ComponentWsResponse;
import static java.lang.Double.parseDouble;
-import static java.util.function.Predicate.not;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.api.Assertions.tuple;
.containsExactlyInAnyOrder(tuple(complexity.getKey(), measure.getValue()));
}
- @Test
- public void new_issue_count_measures_are_transformed_in_pr() {
- ProjectData projectData = db.components().insertPrivateProject();
- ComponentDto mainBranch = projectData.getMainBranchComponent();
- userSession.addProjectPermission(USER, projectData.getProjectDto())
- .registerBranches(projectData.getMainBranchDto());
- ComponentDto branch = db.components().insertProjectBranch(mainBranch, b -> b.setKey("pr-123").setBranchType(PULL_REQUEST));
- userSession.addProjectBranchMapping(projectData.projectUuid(), branch);
- SnapshotDto analysis = db.components().insertSnapshot(branch);
- ComponentDto file = db.components().insertComponent(newFileDto(branch, mainBranch.uuid()));
- MetricDto bugs = db.measures().insertMetric(m1 -> m1.setKey("bugs").setValueType("INT"));
- MetricDto newBugs = db.measures().insertMetric(m1 -> m1.setKey("new_bugs").setValueType("INT"));
- MetricDto violations = db.measures().insertMetric(m1 -> m1.setKey("violations").setValueType("INT"));
- MetricDto newViolations = db.measures().insertMetric(m1 -> m1.setKey("new_violations").setValueType("INT"));
- LiveMeasureDto bugMeasure = db.measures().insertLiveMeasure(file, bugs, m -> m.setValue(12.0d));
- LiveMeasureDto newBugMeasure = db.measures().insertLiveMeasure(file, newBugs, m -> m.setValue(1d));
- LiveMeasureDto violationMeasure = db.measures().insertLiveMeasure(file, violations, m -> m.setValue(20.0d));
-
- ComponentWsResponse response = ws.newRequest()
- .setParam(PARAM_COMPONENT, file.getKey())
- .setParam(PARAM_PULL_REQUEST, "pr-123")
- .setParam(PARAM_METRIC_KEYS, newBugs.getKey() + "," + bugs.getKey() + "," + newViolations.getKey())
- .executeProtobuf(ComponentWsResponse.class);
-
- assertThat(response.getComponent()).extracting(Component::getKey, Component::getPullRequest)
- .containsExactlyInAnyOrder(file.getKey(), "pr-123");
-
- Function<Measures.Measure, Double> extractVariation = m -> Optional.ofNullable(m.getPeriod())
- .map(Measures.PeriodValue::getValue)
- .filter(not(String::isEmpty))
- .map(Double::parseDouble)
- .orElse(null);
- assertThat(response.getComponent().getMeasuresList())
- .extracting(Measures.Measure::getMetric, extractVariation, m -> m.getValue().isEmpty() ? null : parseDouble(m.getValue()))
- .containsExactlyInAnyOrder(
- tuple(newBugs.getKey(), bugMeasure.getValue(), null),
- tuple(bugs.getKey(), null, bugMeasure.getValue()),
- tuple(newViolations.getKey(), violationMeasure.getValue(), null));
- }
-
- @Test
- public void new_issue_count_measures_are_not_transformed_if_they_dont_exist_in_pr() {
- ProjectData projectData = db.components().insertPrivateProject();
- ComponentDto mainBranch = projectData.getMainBranchComponent();
- userSession.addProjectPermission(USER, projectData.getProjectDto());
- ComponentDto branch = db.components().insertProjectBranch(mainBranch, b -> b.setKey("pr-123").setBranchType(PULL_REQUEST));
- userSession.addProjectBranchMapping(projectData.projectUuid(), branch);
- SnapshotDto analysis = db.components().insertSnapshot(branch);
- ComponentDto file = db.components().insertComponent(newFileDto(branch, mainBranch.uuid()));
- MetricDto bugs = db.measures().insertMetric(m1 -> m1.setKey("bugs").setOptimizedBestValue(false).setValueType("INT"));
- MetricDto newBugs = db.measures().insertMetric(m1 -> m1.setKey("new_bugs").setOptimizedBestValue(false).setValueType("INT"));
-
- ComponentWsResponse response = ws.newRequest()
- .setParam(PARAM_COMPONENT, file.getKey())
- .setParam(PARAM_PULL_REQUEST, "pr-123")
- .setParam(PARAM_METRIC_KEYS, newBugs.getKey() + "," + bugs.getKey())
- .executeProtobuf(ComponentWsResponse.class);
-
- assertThat(response.getComponent()).extracting(Component::getKey, Component::getPullRequest)
- .containsExactlyInAnyOrder(file.getKey(), "pr-123");
-
- assertThat(response.getComponent().getMeasuresList()).isEmpty();
- }
-
@Test
public void reference_key_in_the_response() {
ComponentDto mainBranch = db.components().insertPrivateProject().getMainBranchComponent();
import java.util.stream.IntStream;
import org.junit.Rule;
import org.junit.Test;
-import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.measures.Metric;
import org.sonar.api.resources.ResourceTypeTree;
import org.sonar.api.resources.ResourceTypes;
.containsExactlyInAnyOrder(tuple(complexity.getKey(), measure.getValue()));
}
- @Test
- public void fix_pull_request_new_issue_count_metrics() {
- ProjectData projectData = db.components().insertPrivateProject();
- ComponentDto mainBranch = projectData.getMainBranchComponent();
- addProjectPermission(projectData);
- ComponentDto branch = db.components().insertProjectBranch(mainBranch, b -> b.setKey("pr-123").setBranchType(PULL_REQUEST));
- userSession.addProjectBranchMapping(projectData.projectUuid(), branch);
- SnapshotDto analysis = db.components().insertSnapshot(branch);
- ComponentDto file = db.components().insertComponent(newFileDto(branch, mainBranch.uuid()));
- MetricDto bug = db.measures().insertMetric(m -> m.setValueType(INT.name()).setKey(CoreMetrics.BUGS_KEY));
- MetricDto newBug = db.measures().insertMetric(m -> m.setValueType(INT.name()).setKey(CoreMetrics.NEW_BUGS_KEY));
-
- LiveMeasureDto measure = db.measures().insertLiveMeasure(file, bug, m -> m.setValue(12.0d));
-
- ComponentTreeWsResponse response = ws.newRequest()
- .setParam(PARAM_COMPONENT, file.getKey())
- .setParam(PARAM_PULL_REQUEST, "pr-123")
- .setParam(PARAM_METRIC_KEYS, newBug.getKey())
- .executeProtobuf(ComponentTreeWsResponse.class);
-
- assertThat(response.getBaseComponent()).extracting(Component::getKey, Component::getPullRequest)
- .containsExactlyInAnyOrder(file.getKey(), "pr-123");
- assertThat(response.getBaseComponent().getMeasuresList())
- .extracting(Measure::getMetric, m -> parseDouble(m.getPeriod().getValue()), Measure::getValue)
- .containsExactlyInAnyOrder(tuple(newBug.getKey(), measure.getValue(), ""));
-
- assertThat(response.getBaseComponent().getMeasuresList())
- .extracting(Measure::getMetric, m -> parseDouble(m.getPeriod().getValue()), Measure::getValue)
- .containsExactlyInAnyOrder(tuple(newBug.getKey(), measure.getValue(), ""));
- }
-
- @Test
- public void new_issue_count_measures_are_not_transformed_if_they_dont_exist_in_pr() {
- ProjectData projectData = db.components().insertPrivateProject();
- ComponentDto mainBranch = projectData.getMainBranchComponent();
- addProjectPermission(projectData);
- ComponentDto pr = db.components().insertProjectBranch(mainBranch, b -> b.setKey("pr").setBranchType(PULL_REQUEST));
- userSession.addProjectBranchMapping(projectData.projectUuid(), pr);
- SnapshotDto analysis = db.components().insertSnapshot(pr);
- ComponentDto file = db.components().insertComponent(newFileDto(pr, mainBranch.uuid()));
- MetricDto bug = db.measures().insertMetric(m -> m.setValueType(INT.name()).setKey(CoreMetrics.BUGS_KEY));
- MetricDto newBug = db.measures().insertMetric(m -> m.setValueType(INT.name()).setKey(CoreMetrics.NEW_BUGS_KEY));
-
- ComponentTreeWsResponse response = ws.newRequest()
- .setParam(PARAM_COMPONENT, file.getKey())
- .setParam(PARAM_PULL_REQUEST, "pr")
- .setParam(PARAM_METRIC_KEYS, newBug.getKey() + "," + bug.getKey())
- .executeProtobuf(ComponentTreeWsResponse.class);
-
- assertThat(response.getBaseComponent()).extracting(Component::getKey, Component::getPullRequest)
- .containsExactlyInAnyOrder(file.getKey(), "pr");
- assertThat(response.getBaseComponent().getMeasuresList())
- .isEmpty();
- }
-
@Test
public void metric_without_a_domain() {
ProjectData projectData = db.components().insertPrivateProject();
checkPermissions(component);
SnapshotDto analysis = dbClient.snapshotDao().selectLastAnalysisByRootComponentUuid(dbSession, component.branchUuid()).orElse(null);
- boolean isPR = isPR(pullRequest);
-
- Set<String> metricKeysToRequest = new HashSet<>(request.metricKeys);
-
- if (isPR) {
- PrMeasureFix.addReplacementMetricKeys(metricKeysToRequest);
- }
-
- List<MetricDto> metrics = searchMetrics(dbSession, metricKeysToRequest);
+ List<MetricDto> metrics = searchMetrics(dbSession, new HashSet<>(request.getMetricKeys()));
List<LiveMeasureDto> measures = searchMeasures(dbSession, component, metrics);
Map<MetricDto, LiveMeasureDto> measuresByMetric = getMeasuresByMetric(measures, metrics);
- if (isPR) {
- Set<String> originalMetricKeys = new HashSet<>(request.metricKeys);
- PrMeasureFix.createReplacementMeasures(metrics, measuresByMetric, originalMetricKeys);
- PrMeasureFix.removeMetricsNotRequested(metrics, originalMetricKeys);
- }
-
Optional<Measures.Period> period = snapshotToWsPeriods(analysis);
Optional<RefComponent> reference = getReference(dbSession, component);
return buildResponse(dbSession, request, component, reference, measuresByMetric, metrics, period);
}
}
- public List<MetricDto> searchMetrics(DbSession dbSession, Collection<String> metricKeys) {
+ public List<MetricDto> searchMetrics(DbSession dbSession, Set<String> metricKeys) {
List<MetricDto> metrics = dbClient.metricDao().selectByKeys(dbSession, metricKeys);
if (metrics.size() < metricKeys.size()) {
Set<String> foundMetricKeys = metrics.stream().map(MetricDto::getKey).collect(Collectors.toSet());
}
}
- private static boolean isPR(@Nullable String pullRequest) {
- return pullRequest != null;
- }
-
private ComponentDto loadComponent(DbSession dbSession, ComponentRequest request, @Nullable String branch, @Nullable String pullRequest) {
String componentKey = request.getComponent();
checkRequest(componentKey != null, "The '%s' parameter is missing", PARAM_COMPONENT);
import static org.sonar.server.ws.KeyExamples.KEY_BRANCH_EXAMPLE_001;
import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001;
import static org.sonar.server.ws.KeyExamples.KEY_PULL_REQUEST_EXAMPLE_001;
-import static org.sonar.server.ws.WsParameterBuilder.createQualifiersParameter;
import static org.sonar.server.ws.WsParameterBuilder.QualifierParameterContext.newQualifierParameterContext;
+import static org.sonar.server.ws.WsParameterBuilder.createQualifiersParameter;
import static org.sonar.server.ws.WsUtils.writeProtobuf;
/**
.build();
}
- Set<String> requestedMetricKeys = new HashSet<>(wsRequest.getMetricKeys());
- Set<String> metricKeysToSearch = new HashSet<>(requestedMetricKeys);
-
- boolean isPR = isPR(wsRequest.getPullRequest());
- if (isPR) {
- PrMeasureFix.addReplacementMetricKeys(metricKeysToSearch);
- }
-
ComponentTreeQuery componentTreeQuery = toComponentTreeQuery(wsRequest, baseComponent);
List<ComponentDto> components = searchComponents(dbSession, componentTreeQuery);
- List<MetricDto> metrics = searchMetrics(dbSession, metricKeysToSearch);
- Table<String, MetricDto, ComponentTreeData.Measure> measuresByComponentUuidAndMetric = searchMeasuresByComponentUuidAndMetric(dbSession, baseComponent, componentTreeQuery,
- components,
- metrics);
-
- if (isPR) {
- PrMeasureFix.removeMetricsNotRequested(metrics, requestedMetricKeys);
- PrMeasureFix.createReplacementMeasures(metrics, measuresByComponentUuidAndMetric, requestedMetricKeys);
- }
+ List<MetricDto> metrics = searchMetrics(dbSession, new HashSet<>(wsRequest.getMetricKeys()));
+ Table<String, MetricDto, ComponentTreeData.Measure> measuresByComponentUuidAndMetric =
+ searchMeasuresByComponentUuidAndMetric(dbSession, baseComponent, componentTreeQuery, components, metrics);
components = filterComponents(components, measuresByComponentUuidAndMetric, metrics, wsRequest);
components = filterAuthorizedComponents(components);
.collect(Collectors.toMap(BranchDto::getUuid, BranchDto::getBranchKey));
}
- private static boolean isPR(@Nullable String pullRequest) {
- return pullRequest != null;
- }
-
private ComponentDto loadComponent(DbSession dbSession, ComponentTreeRequest request) {
String componentKey = request.getComponent();
String branch = request.getBranch();
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2023 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.measure.ws;
-
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Table;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-import org.sonar.db.measure.LiveMeasureDto;
-import org.sonar.db.metric.MetricDto;
-
-import static org.sonar.api.measures.CoreMetrics.BLOCKER_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.BUGS_KEY;
-import static org.sonar.api.measures.CoreMetrics.CODE_SMELLS_KEY;
-import static org.sonar.api.measures.CoreMetrics.CRITICAL_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.INFO_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.MAJOR_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.MINOR_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_BLOCKER_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_BUGS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_CODE_SMELLS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_CRITICAL_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_INFO_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_MAJOR_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_MINOR_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_RELIABILITY_RATING_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_RELIABILITY_REMEDIATION_EFFORT_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_SECURITY_RATING_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_SECURITY_REMEDIATION_EFFORT_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_TECHNICAL_DEBT_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_VULNERABILITIES_KEY;
-import static org.sonar.api.measures.CoreMetrics.RELIABILITY_RATING_KEY;
-import static org.sonar.api.measures.CoreMetrics.RELIABILITY_REMEDIATION_EFFORT_KEY;
-import static org.sonar.api.measures.CoreMetrics.SECURITY_RATING_KEY;
-import static org.sonar.api.measures.CoreMetrics.SECURITY_REMEDIATION_EFFORT_KEY;
-import static org.sonar.api.measures.CoreMetrics.TECHNICAL_DEBT_KEY;
-import static org.sonar.api.measures.CoreMetrics.VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.VULNERABILITIES_KEY;
-
-/**
- * See SONAR-11736
- * This class should be removed in 8.0.
- */
-class PrMeasureFix {
- static final BiMap<String, String> METRICS;
-
- static {
- METRICS = HashBiMap.create();
-
- METRICS.put(NEW_VIOLATIONS_KEY, VIOLATIONS_KEY);
-
- // issue severities
- METRICS.put(NEW_BLOCKER_VIOLATIONS_KEY, BLOCKER_VIOLATIONS_KEY);
- METRICS.put(NEW_CRITICAL_VIOLATIONS_KEY, CRITICAL_VIOLATIONS_KEY);
- METRICS.put(NEW_MAJOR_VIOLATIONS_KEY, MAJOR_VIOLATIONS_KEY);
- METRICS.put(NEW_MINOR_VIOLATIONS_KEY, MINOR_VIOLATIONS_KEY);
- METRICS.put(NEW_INFO_VIOLATIONS_KEY, INFO_VIOLATIONS_KEY);
-
- // issue types
- METRICS.put(NEW_BUGS_KEY, BUGS_KEY);
- METRICS.put(NEW_CODE_SMELLS_KEY, CODE_SMELLS_KEY);
- METRICS.put(NEW_VULNERABILITIES_KEY, VULNERABILITIES_KEY);
-
- // ratings
- METRICS.put(NEW_SECURITY_RATING_KEY, SECURITY_RATING_KEY);
- METRICS.put(NEW_RELIABILITY_RATING_KEY, RELIABILITY_RATING_KEY);
-
- // effort
- METRICS.put(NEW_TECHNICAL_DEBT_KEY, TECHNICAL_DEBT_KEY);
- METRICS.put(NEW_SECURITY_REMEDIATION_EFFORT_KEY, SECURITY_REMEDIATION_EFFORT_KEY);
- METRICS.put(NEW_RELIABILITY_REMEDIATION_EFFORT_KEY, RELIABILITY_REMEDIATION_EFFORT_KEY);
- }
-
- private PrMeasureFix() {
- // static only
- }
-
- static void addReplacementMetricKeys(Collection<String> metricKeys) {
- Set<String> keysToAdd = metricKeys.stream()
- .filter(METRICS::containsKey)
- .map(METRICS::get)
- .collect(Collectors.toSet());
- metricKeys.addAll(keysToAdd);
- }
-
- static void removeMetricsNotRequested(List<MetricDto> metrics, Set<String> requestedMetricKeys) {
- metrics.removeIf(m -> !requestedMetricKeys.contains(m.getKey()));
- }
-
- static void createReplacementMeasures(List<MetricDto> metrics, Table<String, MetricDto, ComponentTreeData.Measure> measuresByComponentUuidAndMetric,
- Set<String> requestedMetricKeys) {
- Map<String, MetricDto> metricByKey = Maps.uniqueIndex(metrics, MetricDto::getKey);
-
- for (MetricDto metric : measuresByComponentUuidAndMetric.columnKeySet()) {
- Map<String, ComponentTreeData.Measure> newEntries = new HashMap<>();
-
- String originalKey = METRICS.inverse().get(metric.getKey());
- if (originalKey != null && requestedMetricKeys.contains(originalKey)) {
- for (Map.Entry<String, ComponentTreeData.Measure> e : measuresByComponentUuidAndMetric.column(metric).entrySet()) {
- newEntries.put(e.getKey(), e.getValue());
- }
-
- MetricDto originalMetric = metricByKey.get(originalKey);
- newEntries.forEach((k, v) -> measuresByComponentUuidAndMetric.put(k, originalMetric, v));
- }
- }
-
- List<MetricDto> toRemove = measuresByComponentUuidAndMetric.columnKeySet().stream().filter(m -> !requestedMetricKeys.contains(m.getKey())).toList();
- measuresByComponentUuidAndMetric.columnKeySet().removeAll(toRemove);
- }
-
- static void createReplacementMeasures(List<MetricDto> metrics, Map<MetricDto, LiveMeasureDto> measuresByMetric, Set<String> requestedMetricKeys) {
- Map<String, MetricDto> metricByKey = Maps.uniqueIndex(metrics, MetricDto::getKey);
- Map<MetricDto, LiveMeasureDto> newEntries = new HashMap<>();
-
- for (Map.Entry<MetricDto, LiveMeasureDto> e : measuresByMetric.entrySet()) {
- String originalKey = METRICS.inverse().get(e.getKey().getKey());
-
- if (originalKey != null && requestedMetricKeys.contains(originalKey)) {
- MetricDto metricDto = metricByKey.get(originalKey);
- newEntries.put(metricDto, copyMeasure(e.getValue(), metricDto.getUuid()));
- }
- }
-
- measuresByMetric.entrySet().removeIf(e -> !requestedMetricKeys.contains(e.getKey().getKey()));
- measuresByMetric.putAll(newEntries);
- }
-
- private static LiveMeasureDto copyMeasure(LiveMeasureDto dto, String metricUuid) {
- LiveMeasureDto copy = new LiveMeasureDto();
- copy.setValue(dto.getValue());
- copy.setProjectUuid(dto.getProjectUuid());
- copy.setComponentUuid(dto.getComponentUuid());
- copy.setMetricUuid(metricUuid);
- return copy;
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2023 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.measure.ws;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.annotation.Nullable;
-import org.junit.Test;
-import org.sonar.db.measure.LiveMeasureDto;
-import org.sonar.db.metric.MetricDto;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.tuple;
-import static org.sonar.api.measures.CoreMetrics.BUGS_KEY;
-import static org.sonar.api.measures.CoreMetrics.MINOR_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_BUGS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_MINOR_VIOLATIONS_KEY;
-
-public class prMeasureFixTest {
-
- @Test
- public void should_add_replacement_metrics() {
- List<String> metricList = new ArrayList<>(Arrays.asList(NEW_BUGS_KEY, NEW_MINOR_VIOLATIONS_KEY));
- PrMeasureFix.addReplacementMetricKeys(metricList);
- assertThat(metricList).contains(BUGS_KEY, NEW_BUGS_KEY, MINOR_VIOLATIONS_KEY, NEW_MINOR_VIOLATIONS_KEY);
- }
-
- @Test
- public void should_remove_metrics_not_initially_requested() {
- Set<String> originalMetricList = new HashSet<>(Arrays.asList(NEW_BUGS_KEY, MINOR_VIOLATIONS_KEY, NEW_MINOR_VIOLATIONS_KEY));
- MetricDto dto1 = new MetricDto().setKey(BUGS_KEY).setUuid("1");
- MetricDto dto2 = new MetricDto().setKey(NEW_BUGS_KEY).setUuid("2");
- MetricDto dto3 = new MetricDto().setKey(MINOR_VIOLATIONS_KEY).setUuid("3");
- MetricDto dto4 = new MetricDto().setKey(NEW_MINOR_VIOLATIONS_KEY).setUuid("4");
-
- List<MetricDto> metricList = new ArrayList<>(Arrays.asList(dto1, dto2, dto3, dto4));
-
- PrMeasureFix.removeMetricsNotRequested(metricList, originalMetricList);
- assertThat(metricList).containsOnly(dto2, dto3, dto4);
- }
-
- @Test
- public void should_transform_measures() {
- Set<String> requestedKeys = new HashSet<>(Arrays.asList(NEW_BUGS_KEY, MINOR_VIOLATIONS_KEY, NEW_MINOR_VIOLATIONS_KEY));
-
- MetricDto bugsMetric = new MetricDto().setKey(BUGS_KEY).setUuid("1");
- MetricDto newBugsMetric = new MetricDto().setKey(NEW_BUGS_KEY).setUuid("2");
- MetricDto violationsMetric = new MetricDto().setKey(MINOR_VIOLATIONS_KEY).setUuid("3");
- MetricDto newViolationsMetric = new MetricDto().setKey(NEW_MINOR_VIOLATIONS_KEY).setUuid("4");
-
- List<MetricDto> metricList = Arrays.asList(bugsMetric, newBugsMetric, violationsMetric, newViolationsMetric);
-
- LiveMeasureDto bugs = createLiveMeasure(bugsMetric.getUuid(), 10.0);
- LiveMeasureDto newBugs = createLiveMeasure(newBugsMetric.getUuid(), 5.0);
- LiveMeasureDto violations = createLiveMeasure(violationsMetric.getUuid(), 20.0);
- LiveMeasureDto newViolations = createLiveMeasure(newViolationsMetric.getUuid(), 3.0);
-
- Map<MetricDto, LiveMeasureDto> measureByMetric = new HashMap<>();
- measureByMetric.put(bugsMetric, bugs);
- measureByMetric.put(newBugsMetric, newBugs);
- measureByMetric.put(violationsMetric, violations);
- measureByMetric.put(newViolationsMetric, newViolations);
-
- PrMeasureFix.createReplacementMeasures(metricList, measureByMetric, requestedKeys);
- assertThat(measureByMetric.entrySet()).extracting(e -> e.getKey().getKey(), e -> e.getValue().getValue())
- .containsOnly(tuple(NEW_BUGS_KEY, 10.0),
- tuple(MINOR_VIOLATIONS_KEY, 20.0),
- tuple(NEW_MINOR_VIOLATIONS_KEY, 20.0));
- }
-
- private static LiveMeasureDto createLiveMeasure(String metricUuid, @Nullable Double value) {
- return new LiveMeasureDto().setMetricUuid(metricUuid).setValue(value);
- }
-}