From 034611ad10d8a15cc4942552921362f9dc7f7143 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Thu, 29 Sep 2016 15:47:33 +0200 Subject: [PATCH] SONAR-5857 Only "better than" operator is available for rating metrics --- .../QualityGateConditionsUpdaterTest.java | 15 +++-------- .../qualitygate/QualityGateConditionDto.java | 23 ++++++++-------- .../QualityGateConditionDtoTest.java | 26 ++++++++++++++++--- 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGateConditionsUpdaterTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGateConditionsUpdaterTest.java index 09a3993fee9..2b6f9b54cf7 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGateConditionsUpdaterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGateConditionsUpdaterTest.java @@ -105,9 +105,9 @@ public class QualityGateConditionsUpdaterTest { @Test public void create_condition_on_rating_metric() { - QualityGateConditionDto result = underTest.createCondition(dbSession, qualityGateDto.getId(), "rating_metric", "LT", null, "3", 1); + QualityGateConditionDto result = underTest.createCondition(dbSession, qualityGateDto.getId(), "rating_metric", "GT", null, "3", 1); - verifyCondition(result, ratingMetricDto.getId(), "LT", null, "3", 1); + verifyCondition(result, ratingMetricDto.getId(), "GT", null, "3", 1); } @Test @@ -188,14 +188,14 @@ public class QualityGateConditionsUpdaterTest { public void fail_to_create_warning_condition_on_invalid_rating_metric() { expectedException.expect(BadRequestException.class); expectedException.expectMessage("'6' is not a valid rating"); - underTest.createCondition(dbSession, qualityGateDto.getId(), ratingMetricDto.getKey(), "LT", "6", null, null); + underTest.createCondition(dbSession, qualityGateDto.getId(), ratingMetricDto.getKey(), "GT", "6", null, null); } @Test public void fail_to_create_error_condition_on_invalid_rating_metric() { expectedException.expect(BadRequestException.class); expectedException.expectMessage("'80' is not a valid rating"); - underTest.createCondition(dbSession, qualityGateDto.getId(), ratingMetricDto.getKey(), "LT", null, "80", null); + underTest.createCondition(dbSession, qualityGateDto.getId(), ratingMetricDto.getKey(), "GT", null, "80", null); } @Test @@ -205,13 +205,6 @@ public class QualityGateConditionsUpdaterTest { underTest.createCondition(dbSession, qualityGateDto.getId(), ratingMetricDto.getKey(), "GT", "5", null, null); } - @Test - public void fail_to_create_condition_on_lesser_than_A() { - expectedException.expect(BadRequestException.class); - expectedException.expectMessage("There's no better rating than A (1)"); - underTest.createCondition(dbSession, qualityGateDto.getId(), ratingMetricDto.getKey(), "LT", null, "1", null); - } - @Test public void update_condition() { QualityGateConditionDto condition = insertCondition(coverageMetricDto.getId(), "LT", null, "80", null); diff --git a/sonar-db/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDto.java b/sonar-db/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDto.java index b475695b2ee..28bde237143 100644 --- a/sonar-db/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDto.java +++ b/sonar-db/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDto.java @@ -47,28 +47,29 @@ public class QualityGateConditionDto { OPERATOR_LESS_THAN, OPERATOR_GREATER_THAN, OPERATOR_EQUALS, - OPERATOR_NOT_EQUALS - ); + OPERATOR_NOT_EQUALS); private static final List NUMERIC_OPERATORS = ImmutableList.of( OPERATOR_LESS_THAN, OPERATOR_GREATER_THAN, OPERATOR_EQUALS, - OPERATOR_NOT_EQUALS - ); + OPERATOR_NOT_EQUALS); + private static final List STRING_OPERATORS = ImmutableList.of( OPERATOR_EQUALS, OPERATOR_NOT_EQUALS, OPERATOR_LESS_THAN, - OPERATOR_GREATER_THAN - ); + OPERATOR_GREATER_THAN); + private static final List LEVEL_OPERATORS = ImmutableList.of( OPERATOR_EQUALS, - OPERATOR_NOT_EQUALS - ); + OPERATOR_NOT_EQUALS); + private static final List BOOLEAN_OPERATORS = ImmutableList.of( - OPERATOR_EQUALS - ); + OPERATOR_EQUALS); + + private static final List RATING_OPERATORS = ImmutableList.of( + OPERATOR_GREATER_THAN); private static final Map> OPERATORS_BY_TYPE = ImmutableMap.>builder() .put(ValueType.BOOL, BOOLEAN_OPERATORS) @@ -78,7 +79,7 @@ public class QualityGateConditionDto { .put(ValueType.FLOAT, NUMERIC_OPERATORS) .put(ValueType.PERCENT, NUMERIC_OPERATORS) .put(ValueType.MILLISEC, NUMERIC_OPERATORS) - .put(ValueType.RATING, NUMERIC_OPERATORS) + .put(ValueType.RATING, RATING_OPERATORS) .put(ValueType.WORK_DUR, NUMERIC_OPERATORS) .build(); diff --git a/sonar-db/src/test/java/org/sonar/db/qualitygate/QualityGateConditionDtoTest.java b/sonar-db/src/test/java/org/sonar/db/qualitygate/QualityGateConditionDtoTest.java index d21715eded5..fdfc7b12028 100644 --- a/sonar-db/src/test/java/org/sonar/db/qualitygate/QualityGateConditionDtoTest.java +++ b/sonar-db/src/test/java/org/sonar/db/qualitygate/QualityGateConditionDtoTest.java @@ -19,6 +19,7 @@ */ package org.sonar.db.qualitygate; +import java.util.Arrays; import org.junit.Test; import org.sonar.api.measures.Metric.ValueType; @@ -37,25 +38,42 @@ import static org.sonar.db.qualitygate.QualityGateConditionDto.isOperatorAllowed public class QualityGateConditionDtoTest { @Test - public void should_validate_operators_for_metric_type() { - assertThat(isOperatorAllowed("WHATEVER", null)).isFalse(); + public void validate_operators_for_DATA() { assertThat(isOperatorAllowed("WHATEVER", DATA)).isFalse(); + } + @Test + public void validate_operators_for_BOOL() throws Exception { assertThat(isOperatorAllowed("EQ", BOOL)).isTrue(); assertThat(isOperatorAllowed("NE", BOOL)).isFalse(); assertThat(isOperatorAllowed("LT", BOOL)).isFalse(); assertThat(isOperatorAllowed("GT", BOOL)).isFalse(); + } + @Test + public void validate_operators_for_LEVEL() throws Exception { assertThat(isOperatorAllowed("EQ", LEVEL)).isTrue(); assertThat(isOperatorAllowed("NE", LEVEL)).isTrue(); assertThat(isOperatorAllowed("LT", LEVEL)).isFalse(); assertThat(isOperatorAllowed("GT", LEVEL)).isFalse(); + } - for (ValueType type : new ValueType[] {STRING, INT, FLOAT, PERCENT, MILLISEC, RATING}) { + @Test + public void validate_operators_for_RATING() throws Exception { + assertThat(isOperatorAllowed("EQ", RATING)).isFalse(); + assertThat(isOperatorAllowed("NE", RATING)).isFalse(); + assertThat(isOperatorAllowed("LT", RATING)).isFalse(); + assertThat(isOperatorAllowed("GT", RATING)).isTrue(); + } + + @Test + public void validate_operators_for_other_types() throws Exception { + Arrays.stream(new ValueType[] {STRING, INT, FLOAT, PERCENT, MILLISEC}).forEach(type -> { assertThat(isOperatorAllowed("EQ", type)).isTrue(); assertThat(isOperatorAllowed("NE", type)).isTrue(); assertThat(isOperatorAllowed("LT", type)).isTrue(); assertThat(isOperatorAllowed("GT", type)).isTrue(); - } + }); } + } -- 2.39.5