aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-core/src/test
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@gmail.com>2013-04-22 17:57:20 +0200
committerSimon Brandhof <simon.brandhof@gmail.com>2013-04-22 17:57:41 +0200
commite5e0c1076f177f79ab3024d8800e1c01ae7c40a2 (patch)
treecb434fc24d939d945e0f0e12fb6134441515be49 /sonar-core/src/test
parentd78b5f1ef8a5516d18ae8ba0b158eb57a5c8777d (diff)
downloadsonarqube-e5e0c1076f177f79ab3024d8800e1c01ae7c40a2.tar.gz
sonarqube-e5e0c1076f177f79ab3024d8800e1c01ae7c40a2.zip
SONAR-3755 first draft of issue state machine
Diffstat (limited to 'sonar-core/src/test')
-rw-r--r--sonar-core/src/test/java/org/sonar/core/issue/IssueDtoTest.java2
-rw-r--r--sonar-core/src/test/java/org/sonar/core/issue/UpdateIssueFieldsTest.java (renamed from sonar-core/src/test/java/org/sonar/core/issue/ApplyIssueChangeTest.java)8
-rw-r--r--sonar-core/src/test/java/org/sonar/core/issue/workflow/TransitionTest.java113
3 files changed, 117 insertions, 6 deletions
diff --git a/sonar-core/src/test/java/org/sonar/core/issue/IssueDtoTest.java b/sonar-core/src/test/java/org/sonar/core/issue/IssueDtoTest.java
index d8e6a2dc036..d7f5fcfce9c 100644
--- a/sonar-core/src/test/java/org/sonar/core/issue/IssueDtoTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/issue/IssueDtoTest.java
@@ -87,7 +87,7 @@ public class IssueDtoTest {
assertThat(issue.title()).isEqualTo("title");
assertThat(issue.description()).isEqualTo("message");
assertThat(issue.isManualSeverity()).isTrue();
- assertThat(issue.isManual()).isTrue();
+ assertThat(issue.manual()).isTrue();
assertThat(issue.userLogin()).isEqualTo("arthur");
assertThat(issue.assignee()).isEqualTo("perceval");
assertThat(issue.attribute("key")).isEqualTo("value");
diff --git a/sonar-core/src/test/java/org/sonar/core/issue/ApplyIssueChangeTest.java b/sonar-core/src/test/java/org/sonar/core/issue/UpdateIssueFieldsTest.java
index b538cf1c269..4e17798bdb3 100644
--- a/sonar-core/src/test/java/org/sonar/core/issue/ApplyIssueChangeTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/issue/UpdateIssueFieldsTest.java
@@ -26,14 +26,13 @@ import org.sonar.api.rule.Severity;
import static org.fest.assertions.Assertions.assertThat;
-public class ApplyIssueChangeTest {
+public class UpdateIssueFieldsTest {
@Test
public void should_change_fields() throws Exception {
DefaultIssue issue = new DefaultIssue().setComponentKey("org/struts/Action.java").setKey("ABCDE");
- ApplyIssueChange.apply(issue, IssueChange.create()
+ UpdateIssueFields.apply(issue, IssueChange.create()
.setLine(200)
- .setResolution(Issue.RESOLUTION_FALSE_POSITIVE)
.setAttribute("JIRA", "FOO-123")
.setManualSeverity(true)
.setSeverity(Severity.CRITICAL)
@@ -43,7 +42,6 @@ public class ApplyIssueChangeTest {
.setCost(4.2)
);
assertThat(issue.line()).isEqualTo(200);
- assertThat(issue.resolution()).isEqualTo(Issue.RESOLUTION_FALSE_POSITIVE);
assertThat(issue.title()).isEqualTo("new title");
assertThat(issue.description()).isEqualTo("new desc");
assertThat(issue.attribute("JIRA")).isEqualTo("FOO-123");
@@ -67,7 +65,7 @@ public class ApplyIssueChangeTest {
.setSeverity("BLOCKER")
.setStatus("CLOSED")
.setResolution("FIXED");
- ApplyIssueChange.apply(issue, IssueChange.create());
+ UpdateIssueFields.apply(issue, IssueChange.create());
assertThat(issue.componentKey()).isEqualTo("org/struts/Action.java");
assertThat(issue.key()).isEqualTo("ABCDE");
diff --git a/sonar-core/src/test/java/org/sonar/core/issue/workflow/TransitionTest.java b/sonar-core/src/test/java/org/sonar/core/issue/workflow/TransitionTest.java
new file mode 100644
index 00000000000..c3ab3e52bbc
--- /dev/null
+++ b/sonar-core/src/test/java/org/sonar/core/issue/workflow/TransitionTest.java
@@ -0,0 +1,113 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.core.issue.workflow;
+
+import org.junit.Test;
+import org.sonar.core.issue.DefaultIssue;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+public class TransitionTest {
+
+ Condition condition1 = mock(Condition.class);
+ Condition condition2 = mock(Condition.class);
+ Function function1 = mock(Function.class);
+ Function function2 = mock(Function.class);
+
+ @Test
+ public void test_builder() throws Exception {
+ Transition transition = Transition.builder("close")
+ .from("OPEN").to("CLOSED")
+ .conditions(condition1, condition2)
+ .functions(function1, function2)
+ .build();
+ assertThat(transition.key()).isEqualTo("close");
+ assertThat(transition.from()).isEqualTo("OPEN");
+ assertThat(transition.to()).isEqualTo("CLOSED");
+ assertThat(transition.conditions()).containsOnly(condition1, condition2);
+ assertThat(transition.functions()).containsOnly(function1, function2);
+ }
+
+ @Test
+ public void test_simplest_transition() throws Exception {
+ Transition transition = Transition.builder("close")
+ .from("OPEN").to("CLOSED")
+ .build();
+ assertThat(transition.key()).isEqualTo("close");
+ assertThat(transition.from()).isEqualTo("OPEN");
+ assertThat(transition.to()).isEqualTo("CLOSED");
+ assertThat(transition.conditions()).isEmpty();
+ assertThat(transition.functions()).isEmpty();
+ }
+
+ @Test
+ public void key_should_be_set() throws Exception {
+ try {
+ Transition.builder("").from("OPEN").to("CLOSED").build();
+ } catch (Exception e) {
+ assertThat(e).hasMessage("Transition key must be set");
+ }
+ }
+
+ @Test
+ public void key_should_be_lower_case() throws Exception {
+ try {
+ Transition.builder("CLOSE").from("OPEN").to("CLOSED").build();
+ } catch (Exception e) {
+ assertThat(e).hasMessage("Transition key must be lower-case");
+ }
+ }
+
+ @Test
+ public void originating_status_should_be_set() throws Exception {
+ try {
+ Transition.builder("close").from("").to("CLOSED").build();
+ } catch (Exception e) {
+ assertThat(e).hasMessage("Originating status must be set");
+ }
+ }
+
+ @Test
+ public void destination_status_should_be_set() throws Exception {
+ try {
+ Transition.builder("close").from("OPEN").to("").build();
+ } catch (Exception e) {
+ assertThat(e).hasMessage("Destination status must be set");
+ }
+ }
+
+ @Test
+ public void should_execute_functions() throws Exception {
+ DefaultIssue issue = new DefaultIssue();
+ Transition transition = Transition.builder("close")
+ .from("OPEN").to("CLOSED")
+ .conditions(condition1, condition2)
+ .functions(function1, function2)
+ .build();
+ transition.execute(issue);
+
+ assertThat(issue.status()).isEqualTo("CLOSED");
+ assertThat(issue.updatedAt()).isNotNull();
+ verify(function1).execute(issue);
+ verify(function2).execute(issue);
+ }
+}