From 9a4d88a0ff796a50040f30e23b9842abe3b0bf43 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Fri, 12 Jun 2015 10:22:31 +0200 Subject: [PATCH] fix QualityGateServiceImpl: QualityGateConditionDto has only metricId and no metricKey has was initially assumed by the implementation of QualityGateServiceImpl, --- .../server/computation/metric/MetricRepository.java | 7 +++++++ .../computation/metric/MetricRepositoryImpl.java | 12 ++++++++++++ .../qualitygate/QualityGateServiceImpl.java | 2 +- .../qualitygate/QualityGateServiceImplTest.java | 12 ++++++------ 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/metric/MetricRepository.java b/server/sonar-server/src/main/java/org/sonar/server/computation/metric/MetricRepository.java index 9120ce8fea1..f49101bb3de 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/metric/MetricRepository.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/metric/MetricRepository.java @@ -32,4 +32,11 @@ public interface MetricRepository { */ Metric getByKey(String key); + /** + * Gets the {@link Metric} with the specific id. + * + * @throws IllegalStateException if no Metric with the specified id is found + */ + Metric getById(long id); + } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/metric/MetricRepositoryImpl.java b/server/sonar-server/src/main/java/org/sonar/server/computation/metric/MetricRepositoryImpl.java index 63766adab99..84f572f7e58 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/metric/MetricRepositoryImpl.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/metric/MetricRepositoryImpl.java @@ -46,6 +46,18 @@ public class MetricRepositoryImpl implements MetricRepository { } } + @Override + public Metric getById(long id) { + try (DbSession dbSession = dbClient.openSession(false)) { + MetricDto metricDto = dbClient.metricDao().selectNullableById(dbSession, id); + if (metricDto == null) { + throw new IllegalStateException(String.format("Metric with id '%s' does not exist", id)); + } + + return toMetric(metricDto); + } + } + private static Metric toMetric(MetricDto metricDto) { return new MetricImpl(metricDto.getKey(), metricDto.getShortName(), Metric.MetricType.valueOf(metricDto.getValueType())); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/qualitygate/QualityGateServiceImpl.java b/server/sonar-server/src/main/java/org/sonar/server/computation/qualitygate/QualityGateServiceImpl.java index 2f3d3ef0168..97cc2e00b7d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/qualitygate/QualityGateServiceImpl.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/qualitygate/QualityGateServiceImpl.java @@ -43,7 +43,7 @@ public class QualityGateServiceImpl implements QualityGateService { @Override @Nonnull public Condition apply(@Nonnull QualityGateConditionDto input) { - Metric metric = metricRepository.getByKey(input.getMetricKey()); + Metric metric = metricRepository.getById(input.getMetricId()); return new Condition(metric, input.getPeriod(), input.getOperator(), input.getErrorThreshold(), input.getWarningThreshold()); } }; diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/qualitygate/QualityGateServiceImplTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/qualitygate/QualityGateServiceImplTest.java index dfb6bd3b843..2bb3d5174cb 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/qualitygate/QualityGateServiceImplTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/qualitygate/QualityGateServiceImplTest.java @@ -39,12 +39,12 @@ public class QualityGateServiceImplTest { private static final long SOME_ID = 123; private static final String SOME_NAME = "some name"; private static final QualityGateDto QUALITY_GATE_DTO = new QualityGateDto().setId(SOME_ID).setName(SOME_NAME); - private static final String METRIC_KEY_1 = "metric_key_1"; - private static final String METRIC_KEY_2 = "metric_key_2"; + private static final long METRIC_ID_1 = 951; + private static final long METRIC_ID_2 = 753; private static final Metric METRIC_1 = mock(Metric.class); private static final Metric METRIC_2 = mock(Metric.class); - private static final QualityGateConditionDto CONDITION_1 = new QualityGateConditionDto().setId(321).setMetricKey(METRIC_KEY_1).setOperator("=").setPeriod(1).setWarningThreshold("warnin_th").setErrorThreshold("error_th"); - private static final QualityGateConditionDto CONDITION_2 = new QualityGateConditionDto().setId(456).setMetricKey(METRIC_KEY_2).setOperator("="); + private static final QualityGateConditionDto CONDITION_1 = new QualityGateConditionDto().setId(321).setMetricId(METRIC_ID_1).setOperator("=").setPeriod(1).setWarningThreshold("warnin_th").setErrorThreshold("error_th"); + private static final QualityGateConditionDto CONDITION_2 = new QualityGateConditionDto().setId(456).setMetricId(METRIC_ID_2).setOperator("="); private QualityGateDao qualityGateDao = mock(QualityGateDao.class); private QualityGateConditionDao qualityGateConditionDao = mock(QualityGateConditionDao.class); @@ -73,8 +73,8 @@ public class QualityGateServiceImplTest { when(qualityGateDao.selectById(SOME_ID)).thenReturn(QUALITY_GATE_DTO); when(qualityGateConditionDao.selectForQualityGate(SOME_ID)).thenReturn(ImmutableList.of(CONDITION_1, CONDITION_2)); // metrics are always supposed to be there - when(metricRepository.getByKey(METRIC_KEY_1)).thenReturn(METRIC_1); - when(metricRepository.getByKey(METRIC_KEY_2)).thenReturn(METRIC_2); + when(metricRepository.getById(METRIC_ID_1)).thenReturn(METRIC_1); + when(metricRepository.getById(METRIC_ID_2)).thenReturn(METRIC_2); Optional res = underTest.findById(SOME_ID); -- 2.39.5