]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6620 Condition should expose operator as an enum 375/head
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Mon, 15 Jun 2015 09:34:11 +0000 (11:34 +0200)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Mon, 15 Jun 2015 11:38:45 +0000 (13:38 +0200)
server/sonar-server/src/main/java/org/sonar/server/computation/qualitygate/Condition.java
server/sonar-server/src/main/java/org/sonar/server/computation/qualitygate/QualityGateServiceImpl.java
server/sonar-server/src/test/java/org/sonar/server/computation/qualitygate/ConditionTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/qualitygate/QualityGateServiceImplTest.java

index 7e18390fb5a69219b56594f494bb8afb4196c320..826edf08a0ffbbd891ceb47eef9d451577f77ff2 100644 (file)
@@ -31,24 +31,44 @@ import static java.util.Objects.requireNonNull;
 @Immutable
 public class Condition {
 
+  enum Operator {
+    EQUALS("EQ"), NOT_EQUALS("NE"), GREATER_THAN("GT"), LESS_THAN("LT");
+
+    private final String dbValue;
+
+    Operator(String dbValue) {
+      this.dbValue = dbValue;
+    }
+  }
+
   private final Metric metric;
-  @CheckForNull
-  private final Integer period;
-  private final String operator;
+  private final Operator operator;
   @CheckForNull
   private final String warningThreshold;
   @CheckForNull
   private final String errorThreshold;
+  @CheckForNull
+  private final Integer period;
 
-  public Condition(Metric metric, @Nullable Integer period,
-    String operator, @Nullable String errorThreshold, @Nullable String warningThreshold) {
+  public Condition(Metric metric, String operator,
+    @Nullable String errorThreshold, @Nullable String warningThreshold,
+    @Nullable Integer period) {
     this.metric = requireNonNull(metric);
-    this.operator = requireNonNull(operator);
+    this.operator = parseFromDbValue(requireNonNull(operator));
     this.period = period;
     this.errorThreshold = errorThreshold;
     this.warningThreshold = warningThreshold;
   }
 
+  private static Operator parseFromDbValue(String str) {
+    for (Operator operator : Operator.values()) {
+      if (operator.dbValue.equals(str)) {
+        return operator;
+      }
+    }
+    throw new IllegalArgumentException(String.format("Unsupported operator value: '%s'", str));
+  }
+
   public Metric getMetric() {
     return metric;
   }
@@ -58,7 +78,7 @@ public class Condition {
     return period;
   }
 
-  public String getOperator() {
+  public Operator getOperator() {
     return operator;
   }
 
index 97cc2e00b7d6d868b69b2319dbae4c87abdbe293..98e8cf3d6cbad8b17e33c96773d52ef71d0b098a 100644 (file)
@@ -44,7 +44,7 @@ public class QualityGateServiceImpl implements QualityGateService {
       @Nonnull
       public Condition apply(@Nonnull QualityGateConditionDto input) {
         Metric metric = metricRepository.getById(input.getMetricId());
-        return new Condition(metric, input.getPeriod(), input.getOperator(), input.getErrorThreshold(), input.getWarningThreshold());
+        return new Condition(metric, input.getOperator(), input.getErrorThreshold(), input.getWarningThreshold(), input.getPeriod());
       }
     };
   }
index e53d09f3d5afc5c85fef98a8276b1449ceb5a742..b9d018e5aa9465c712c6f6c7aed990f352ec8855 100644 (file)
@@ -19,7 +19,9 @@
  */
 package org.sonar.server.computation.qualitygate;
 
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
 import org.sonar.server.computation.metric.Metric;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -27,12 +29,16 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 public class ConditionTest {
+
+  @Rule
+  public ExpectedException expectedException = ExpectedException.none();
+
   private static final Metric SOME_METRIC = mock(Metric.class);
-  private static final String SOME_OPERATOR = "ope";
+  private static final String SOME_OPERATOR = "EQ";
 
   @Test(expected = NullPointerException.class)
   public void constructor_throws_NPE_for_null_metric_argument() {
-    new Condition(null, null, SOME_OPERATOR, null, null);
+    new Condition(null, SOME_OPERATOR, null, null, null);
   }
 
   @Test(expected = NullPointerException.class)
@@ -40,16 +46,24 @@ public class ConditionTest {
     new Condition(SOME_METRIC, null, null, null, null);
   }
 
+  @Test
+  public void constructor_throws_IAE_if_operator_is_not_valid() {
+    expectedException.expect(IllegalArgumentException.class);
+    expectedException.expectMessage("Unsupported operator value: 'troloto'");
+
+    new Condition(SOME_METRIC, "troloto", null, null, null);
+  }
+
   @Test
   public void verify_getters() {
     Integer period = 1;
     String error = "error threshold";
     String warning = "warning threshold";
 
-    Condition condition = new Condition(SOME_METRIC, period, SOME_OPERATOR, error, warning);
+    Condition condition = new Condition(SOME_METRIC, SOME_OPERATOR, error, warning, period);
 
     assertThat(condition.getMetric()).isSameAs(SOME_METRIC);
-    assertThat(condition.getOperator()).isSameAs(SOME_OPERATOR);
+    assertThat(condition.getOperator()).isSameAs(Condition.Operator.EQUALS);
     assertThat(condition.getPeriod()).isEqualTo(period);
     assertThat(condition.getErrorThreshold()).isEqualTo(error);
     assertThat(condition.getWarningThreshold()).isEqualTo(warning);
@@ -59,8 +73,8 @@ public class ConditionTest {
   public void all_fields_are_displayed_in_toString() {
     when(SOME_METRIC.toString()).thenReturn("metric1");
 
-    assertThat(new Condition(SOME_METRIC, 1, SOME_OPERATOR, "error_l", "warn").toString())
-        .isEqualTo("Condition{metric=metric1, period=1, operator=ope, warningThreshold=warn, errorThreshold=error_l}");
+    assertThat(new Condition(SOME_METRIC, SOME_OPERATOR, "error_l", "warn", 1).toString())
+        .isEqualTo("Condition{metric=metric1, period=1, operator=EQUALS, warningThreshold=warn, errorThreshold=error_l}");
 
   }
 
index 2bb3d5174cb60c44ffd2952345ee2c57d455bcde..df05d59e0bf5c8eed96e3f23d564d69974a2e40e 100644 (file)
@@ -43,8 +43,8 @@ public class QualityGateServiceImplTest {
   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).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 static final QualityGateConditionDto CONDITION_1 = new QualityGateConditionDto().setId(321).setMetricId(METRIC_ID_1).setOperator("EQ").setPeriod(1).setWarningThreshold("warnin_th").setErrorThreshold("error_th");
+  private static final QualityGateConditionDto CONDITION_2 = new QualityGateConditionDto().setId(456).setMetricId(METRIC_ID_2).setOperator("NE");
 
   private QualityGateDao qualityGateDao = mock(QualityGateDao.class);
   private QualityGateConditionDao qualityGateConditionDao = mock(QualityGateConditionDao.class);
@@ -81,8 +81,8 @@ public class QualityGateServiceImplTest {
     assertThat(res).isPresent();
     assertThat(res.get().getName()).isEqualTo(SOME_NAME);
     assertThat(res.get().getConditions()).containsOnly(
-        new Condition(METRIC_1, CONDITION_1.getPeriod(), CONDITION_1.getOperator(), CONDITION_1.getErrorThreshold(), CONDITION_1.getWarningThreshold()),
-        new Condition(METRIC_2, CONDITION_2.getPeriod(), CONDITION_2.getOperator(), CONDITION_2.getErrorThreshold(), CONDITION_2.getWarningThreshold())
+        new Condition(METRIC_1, CONDITION_1.getOperator(), CONDITION_1.getErrorThreshold(), CONDITION_1.getWarningThreshold(), CONDITION_1.getPeriod()),
+        new Condition(METRIC_2, CONDITION_2.getOperator(), CONDITION_2.getErrorThreshold(), CONDITION_2.getWarningThreshold(), CONDITION_2.getPeriod())
         );
   }
 }