]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5857 Leak period cannot be used on rating metrics
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Thu, 29 Sep 2016 14:05:41 +0000 (16:05 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Mon, 3 Oct 2016 16:19:34 +0000 (18:19 +0200)
it/it-tests/src/test/java/it/qualityGate/QualityGateOnRatingMeasuresTest.java
server/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGateConditionsUpdater.java
server/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGateConditionsUpdaterTest.java

index ad729f34bda5dd7e984a6ef76c8f994a93c4ca4d..2c7bbfd020f9dfcd685abb7f8b207fe07e376d77 100644 (file)
@@ -26,6 +26,7 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.sonar.wsclient.qualitygate.QualityGateClient;
 import org.sonar.wsclient.services.Measure;
@@ -92,6 +93,7 @@ public class QualityGateOnRatingMeasuresTest {
   }
 
   @Test
+  @Ignore("Wait for SONAR-7782 to be implemented => then use new metric new_security_rating")
   public void generate_error_qgate_on_rating_metric_on_leak_period() throws Exception {
     setServerProperty(orchestrator, "sonar.timemachine.period1", "previous_analysis");
     QUALITY_GATES.createCondition(CreateConditionRequest.builder()
index c1482037138bc35c6303bb1af0d714b830419034..91790dc4a4cb0b26c786bed8b07185abd9a13fe1 100644 (file)
@@ -137,7 +137,7 @@ public class QualityGateConditionsUpdater {
     checkOperator(metric, operator, errors);
     checkThresholds(warningThreshold, errorThreshold, errors);
     checkPeriod(metric, period, errors);
-    checkRatingMetric(metric, operator, warningThreshold, errorThreshold, errors);
+    checkRatingMetric(metric, operator, warningThreshold, errorThreshold, period, errors);
     if (!errors.isEmpty()) {
       throw new BadRequestException(errors);
     }
@@ -186,10 +186,14 @@ public class QualityGateConditionsUpdater {
     }
   }
 
-  private static void checkRatingMetric(MetricDto metric, String operator, @Nullable String warningThreshold, @Nullable String errorThreshold, Errors errors) {
+  private static void checkRatingMetric(MetricDto metric, String operator, @Nullable String warningThreshold, @Nullable String errorThreshold, @Nullable Integer period,
+    Errors errors) {
     if (!metric.getValueType().equals(RATING.name())) {
       return;
     }
+    if (period != null && !metric.getKey().startsWith("new_")) {
+      errors.add(Message.of(format("The metric '%s' cannot be used on the leak period", metric.getShortName())));
+    }
     if (!isValidRating(warningThreshold)) {
       addInvalidRatingError(warningThreshold, errors);
       return;
index 2b6f9b54cf7a9cb0cbe2b59ba1231e4b40a3af19..4f5a81e57978de2212eb72fa878d6349cfe59c9a 100644 (file)
@@ -71,6 +71,7 @@ public class QualityGateConditionsUpdaterTest {
 
   MetricDto ratingMetricDto = newMetricDto()
     .setKey("rating_metric")
+    .setShortName("Rating")
     .setValueType(RATING.name())
     .setHidden(false);
 
@@ -103,13 +104,6 @@ public class QualityGateConditionsUpdaterTest {
     verifyCondition(result, metricDto.getId(), "LT", null, "80", 1);
   }
 
-  @Test
-  public void create_condition_on_rating_metric() {
-    QualityGateConditionDto result = underTest.createCondition(dbSession, qualityGateDto.getId(), "rating_metric", "GT", null, "3", 1);
-
-    verifyCondition(result, ratingMetricDto.getId(), "GT", null, "3", 1);
-  }
-
   @Test
   public void fail_to_create_condition_when_condition_on_same_metric_already_exist() throws Exception {
     dbClient.gateConditionDao().insert(new QualityGateConditionDto()
@@ -184,6 +178,20 @@ public class QualityGateConditionsUpdaterTest {
     underTest.createCondition(dbSession, qualityGateDto.getId(), "coverage", "EQ", null, "90", 6);
   }
 
+  @Test
+  public void create_condition_on_rating_metric() {
+    QualityGateConditionDto result = underTest.createCondition(dbSession, qualityGateDto.getId(), "rating_metric", "GT", null, "3", null);
+
+    verifyCondition(result, ratingMetricDto.getId(), "GT", null, "3", null);
+  }
+
+  @Test
+  public void fail_to_create_condition_on_rating_metric_on_leak_period() {
+    expectedException.expect(BadRequestException.class);
+    expectedException.expectMessage("The metric 'Rating' cannot be used on the leak period");
+    underTest.createCondition(dbSession, qualityGateDto.getId(), "rating_metric", "GT", null, "3", 1);
+  }
+
   @Test
   public void fail_to_create_warning_condition_on_invalid_rating_metric() {
     expectedException.expect(BadRequestException.class);
@@ -227,9 +235,18 @@ public class QualityGateConditionsUpdaterTest {
   public void update_condition_on_rating_metric() {
     QualityGateConditionDto condition = insertCondition(ratingMetricDto.getId(), "LT", null, "3", null);
 
-    QualityGateConditionDto result = underTest.updateCondition(dbSession, condition.getId(), "rating_metric", "GT", "4", null, 1);
+    QualityGateConditionDto result = underTest.updateCondition(dbSession, condition.getId(), "rating_metric", "GT", "4", null, null);
+
+    verifyCondition(result, ratingMetricDto.getId(), "GT", "4", null, null);
+  }
 
-    verifyCondition(result, ratingMetricDto.getId(), "GT", "4", null, 1);
+  @Test
+  public void fail_to_update_condition_on_rating_metric_on_leak_period() {
+    QualityGateConditionDto condition = insertCondition(ratingMetricDto.getId(), "LT", null, "3", null);
+
+    expectedException.expect(BadRequestException.class);
+    expectedException.expectMessage("The metric 'Rating' cannot be used on the leak period");
+    underTest.updateCondition(dbSession, condition.getId(), "rating_metric", "GT", "4", null, 1);
   }
 
   @Test