From d679eff77635a52fc8ce60d44dfcd30eed999fbb Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Tue, 9 Feb 2016 17:37:22 +0100 Subject: [PATCH] Move ManualIssueRelocationTest ITs --- .../xoo-sample-v2/sonar-project.properties | 5 + .../src/main/xoo/sample/Sample.xoo | 15 ++ .../src/main/xoo/sample/Sample.xoo.measures | 10 ++ .../xoo-sample-v3/sonar-project.properties | 5 + .../src/main/xoo/sample/Sample.xoo | 15 ++ .../src/main/xoo/sample/Sample.xoo.measures | 10 ++ .../xoo-sample-v4/sonar-project.properties | 5 + .../src/main/xoo/sample/Sample.xoo | 15 ++ .../src/main/xoo/sample/Sample.xoo.measures | 10 ++ .../xoo-sample-v5/sonar-project.properties | 5 + .../src/main/xoo/sample/Sample.xoo | 2 + .../src/main/xoo/sample/Sample.xoo.measures | 10 ++ .../src/test/java/it/Category2Suite.java | 2 + .../it/issue/ManualIssueRelocationTest.java | 145 ++++++++++++++++++ 14 files changed, 254 insertions(+) create mode 100644 it/it-projects/issue/xoo-sample-v2/sonar-project.properties create mode 100644 it/it-projects/issue/xoo-sample-v2/src/main/xoo/sample/Sample.xoo create mode 100644 it/it-projects/issue/xoo-sample-v2/src/main/xoo/sample/Sample.xoo.measures create mode 100644 it/it-projects/issue/xoo-sample-v3/sonar-project.properties create mode 100644 it/it-projects/issue/xoo-sample-v3/src/main/xoo/sample/Sample.xoo create mode 100644 it/it-projects/issue/xoo-sample-v3/src/main/xoo/sample/Sample.xoo.measures create mode 100644 it/it-projects/issue/xoo-sample-v4/sonar-project.properties create mode 100644 it/it-projects/issue/xoo-sample-v4/src/main/xoo/sample/Sample.xoo create mode 100644 it/it-projects/issue/xoo-sample-v4/src/main/xoo/sample/Sample.xoo.measures create mode 100644 it/it-projects/issue/xoo-sample-v5/sonar-project.properties create mode 100644 it/it-projects/issue/xoo-sample-v5/src/main/xoo/sample/Sample.xoo create mode 100644 it/it-projects/issue/xoo-sample-v5/src/main/xoo/sample/Sample.xoo.measures create mode 100644 it/it-tests/src/test/java/it/issue/ManualIssueRelocationTest.java diff --git a/it/it-projects/issue/xoo-sample-v2/sonar-project.properties b/it/it-projects/issue/xoo-sample-v2/sonar-project.properties new file mode 100644 index 00000000000..e01f062e51b --- /dev/null +++ b/it/it-projects/issue/xoo-sample-v2/sonar-project.properties @@ -0,0 +1,5 @@ +sonar.projectKey=sample +sonar.projectName=Sample +sonar.projectVersion=1.0-SNAPSHOT +sonar.sources=src/main/xoo +sonar.language=xoo \ No newline at end of file diff --git a/it/it-projects/issue/xoo-sample-v2/src/main/xoo/sample/Sample.xoo b/it/it-projects/issue/xoo-sample-v2/src/main/xoo/sample/Sample.xoo new file mode 100644 index 00000000000..df0c06c819a --- /dev/null +++ b/it/it-projects/issue/xoo-sample-v2/src/main/xoo/sample/Sample.xoo @@ -0,0 +1,15 @@ +package sample; + +/** + * Documentation for Sample + */ +public class Sample { + + public Sample(int i) { + int j = i++; + } + + private String myMethod() { + return "hello"; + } +} diff --git a/it/it-projects/issue/xoo-sample-v2/src/main/xoo/sample/Sample.xoo.measures b/it/it-projects/issue/xoo-sample-v2/src/main/xoo/sample/Sample.xoo.measures new file mode 100644 index 00000000000..8cb5c5ed655 --- /dev/null +++ b/it/it-projects/issue/xoo-sample-v2/src/main/xoo/sample/Sample.xoo.measures @@ -0,0 +1,10 @@ +ncloc:16 +#Used by dashboard/widgets tests +complexity_in_classes:3 +classes:1 +comment_lines:6 +public_api:5 +public_undocumented_api:2 +duplicated_files:1 +duplicated_blocks:2 +duplicated_lines:3 diff --git a/it/it-projects/issue/xoo-sample-v3/sonar-project.properties b/it/it-projects/issue/xoo-sample-v3/sonar-project.properties new file mode 100644 index 00000000000..e01f062e51b --- /dev/null +++ b/it/it-projects/issue/xoo-sample-v3/sonar-project.properties @@ -0,0 +1,5 @@ +sonar.projectKey=sample +sonar.projectName=Sample +sonar.projectVersion=1.0-SNAPSHOT +sonar.sources=src/main/xoo +sonar.language=xoo \ No newline at end of file diff --git a/it/it-projects/issue/xoo-sample-v3/src/main/xoo/sample/Sample.xoo b/it/it-projects/issue/xoo-sample-v3/src/main/xoo/sample/Sample.xoo new file mode 100644 index 00000000000..ace652b1ce9 --- /dev/null +++ b/it/it-projects/issue/xoo-sample-v3/src/main/xoo/sample/Sample.xoo @@ -0,0 +1,15 @@ +package sample; + +/** + * Documentation for Foo + */ +public class Sample { // With misleading comment + + public Sample(int i) { + int j = i++; + } + + private String myMethod() { + return "hello"; + } +} diff --git a/it/it-projects/issue/xoo-sample-v3/src/main/xoo/sample/Sample.xoo.measures b/it/it-projects/issue/xoo-sample-v3/src/main/xoo/sample/Sample.xoo.measures new file mode 100644 index 00000000000..8cb5c5ed655 --- /dev/null +++ b/it/it-projects/issue/xoo-sample-v3/src/main/xoo/sample/Sample.xoo.measures @@ -0,0 +1,10 @@ +ncloc:16 +#Used by dashboard/widgets tests +complexity_in_classes:3 +classes:1 +comment_lines:6 +public_api:5 +public_undocumented_api:2 +duplicated_files:1 +duplicated_blocks:2 +duplicated_lines:3 diff --git a/it/it-projects/issue/xoo-sample-v4/sonar-project.properties b/it/it-projects/issue/xoo-sample-v4/sonar-project.properties new file mode 100644 index 00000000000..e01f062e51b --- /dev/null +++ b/it/it-projects/issue/xoo-sample-v4/sonar-project.properties @@ -0,0 +1,5 @@ +sonar.projectKey=sample +sonar.projectName=Sample +sonar.projectVersion=1.0-SNAPSHOT +sonar.sources=src/main/xoo +sonar.language=xoo \ No newline at end of file diff --git a/it/it-projects/issue/xoo-sample-v4/src/main/xoo/sample/Sample.xoo b/it/it-projects/issue/xoo-sample-v4/src/main/xoo/sample/Sample.xoo new file mode 100644 index 00000000000..7a66b9b5098 --- /dev/null +++ b/it/it-projects/issue/xoo-sample-v4/src/main/xoo/sample/Sample.xoo @@ -0,0 +1,15 @@ +package sample; + +/** + * Documentation for Foo + */ +public class Sample { + + public Sample(int i) { + int j = i++; + } + + public class Sample { + // inner class with same name + } +} diff --git a/it/it-projects/issue/xoo-sample-v4/src/main/xoo/sample/Sample.xoo.measures b/it/it-projects/issue/xoo-sample-v4/src/main/xoo/sample/Sample.xoo.measures new file mode 100644 index 00000000000..662a414f478 --- /dev/null +++ b/it/it-projects/issue/xoo-sample-v4/src/main/xoo/sample/Sample.xoo.measures @@ -0,0 +1,10 @@ +ncloc:16 +#Used by dashboard/widgets tests +complexity_in_classes:3 +classes:2 +comment_lines:7 +public_api:5 +public_undocumented_api:2 +duplicated_files:1 +duplicated_blocks:2 +duplicated_lines:3 diff --git a/it/it-projects/issue/xoo-sample-v5/sonar-project.properties b/it/it-projects/issue/xoo-sample-v5/sonar-project.properties new file mode 100644 index 00000000000..e01f062e51b --- /dev/null +++ b/it/it-projects/issue/xoo-sample-v5/sonar-project.properties @@ -0,0 +1,5 @@ +sonar.projectKey=sample +sonar.projectName=Sample +sonar.projectVersion=1.0-SNAPSHOT +sonar.sources=src/main/xoo +sonar.language=xoo \ No newline at end of file diff --git a/it/it-projects/issue/xoo-sample-v5/src/main/xoo/sample/Sample.xoo b/it/it-projects/issue/xoo-sample-v5/src/main/xoo/sample/Sample.xoo new file mode 100644 index 00000000000..e2190584d73 --- /dev/null +++ b/it/it-projects/issue/xoo-sample-v5/src/main/xoo/sample/Sample.xoo @@ -0,0 +1,2 @@ +package sample; +public class Sample { /* empty class */ } \ No newline at end of file diff --git a/it/it-projects/issue/xoo-sample-v5/src/main/xoo/sample/Sample.xoo.measures b/it/it-projects/issue/xoo-sample-v5/src/main/xoo/sample/Sample.xoo.measures new file mode 100644 index 00000000000..164af02c5e3 --- /dev/null +++ b/it/it-projects/issue/xoo-sample-v5/src/main/xoo/sample/Sample.xoo.measures @@ -0,0 +1,10 @@ +ncloc:2 +#Used by dashboard/widgets tests +complexity_in_classes:0 +classes:1 +comment_lines:1 +public_api:0 +public_undocumented_api:0 +duplicated_files:0 +duplicated_blocks:0 +duplicated_lines:0 diff --git a/it/it-tests/src/test/java/it/Category2Suite.java b/it/it-tests/src/test/java/it/Category2Suite.java index 77f17dd5e88..871f8c1a702 100644 --- a/it/it-tests/src/test/java/it/Category2Suite.java +++ b/it/it-tests/src/test/java/it/Category2Suite.java @@ -39,6 +39,7 @@ import it.issue.IssuePurgeTest; import it.issue.IssueSearchTest; import it.issue.IssueTrackingTest; import it.issue.IssueWorkflowTest; +import it.issue.ManualIssueRelocationTest; import it.issue.ManualIssueTest; import it.issue.NewIssuesMeasureTest; import it.measure.NewDebtRatioMeasureTest; @@ -82,6 +83,7 @@ import static util.ItUtils.xooPlugin; IssueSearchTest.class, IssueTrackingTest.class, IssueWorkflowTest.class, + ManualIssueRelocationTest.class, ManualIssueTest.class, NewIssuesMeasureTest.class, // rule diff --git a/it/it-tests/src/test/java/it/issue/ManualIssueRelocationTest.java b/it/it-tests/src/test/java/it/issue/ManualIssueRelocationTest.java new file mode 100644 index 00000000000..33f4de419af --- /dev/null +++ b/it/it-tests/src/test/java/it/issue/ManualIssueRelocationTest.java @@ -0,0 +1,145 @@ +/* + * SonarQube + * Copyright (C) 2009-2016 SonarSource SA + * mailto:contact AT sonarsource DOT com + * + * This program 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. + * + * This program 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 it.issue; + +import com.google.common.collect.ImmutableMap; +import java.util.Date; +import java.util.List; +import javax.annotation.Nullable; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.sonar.wsclient.issue.Issue; +import org.sonar.wsclient.issue.IssueQuery; +import org.sonar.wsclient.issue.NewIssue; + +import static org.assertj.core.api.Assertions.assertThat; +import static util.ItUtils.runProjectAnalysis; + +public class ManualIssueRelocationTest extends AbstractIssueTest { + + private final static String COMPONENT_KEY = "sample:src/main/xoo/sample/Sample.xoo"; + + private Date issueCreationDate; + + @Before + public void before() { + ORCHESTRATOR.resetData(); + analyzeInitialProject(); + createManualRule(); + createManualIssue(); + } + + /** + * SONAR-3387 + */ + @Test + public void should_move_manual_issue_if_same_line_found() { + analyzeModifiedProject("issue/xoo-sample-v2"); + checkManualIssueOpenAt(6); + } + + /** + * SONAR-3387 + */ + @Test + public void should_not_touch_issue_if_same_line_not_found() { + analyzeModifiedProject("issue/xoo-sample-v3"); + checkManualIssueOpenAt(3); + } + + /** + * SONAR-3387 + */ + @Test + @Ignore("DO WE REALLY WANT THAT -> TO BE DISCUSSED WITH PO") + public void should_not_touch_issue_if_same_line_found_multiple_times() { + analyzeModifiedProject("issue/xoo-sample-v4"); + checkManualIssueOpenAt(3); + } + + /** + * SONAR-3387 + */ + @Test + public void should_close_issue_if_same_line_not_found_and_old_line_out_of_new_source() { + analyzeModifiedProject("issue/xoo-sample-v5"); + checkManualIssueStatus(null, "CLOSED", "FIXED"); + } + + private void checkManualIssueOpenAt(int line) { + checkManualIssueStatus(line, "OPEN", null); + } + + private void checkManualIssueStatus(@Nullable Integer line, String status, String resolution) { + List issues = searchIssuesByComponent(COMPONENT_KEY); + assertThat(issues).hasSize(1); + Issue issue = issues.get(0); + assertThat(issue.ruleKey()).isEqualTo("manual:invalidclassname"); + if (line == null) { + assertThat(issue.line()).isNull(); + } else { + assertThat(issue.line()).isEqualTo(line); + } + assertThat(issue.severity()).isEqualTo(("MAJOR")); + assertThat(issue.message()).isEqualTo(("The name 'Sample' is too generic")); + assertThat(issue.status()).isEqualTo(status); + if (resolution == null) { + assertThat(issue.resolution()).isNull(); + } else { + assertThat(issue.resolution()).isEqualTo(resolution); + } + assertThat(issue.creationDate()).isEqualTo(issueCreationDate); + assertThat(issue.updateDate()).isNotNull(); + assertThat(issue.reporter()).isEqualTo("admin"); + } + + private void analyzeInitialProject() { + // no active rules + runProjectAnalysis(ORCHESTRATOR, "shared/xoo-sample"); + } + + private void analyzeModifiedProject(String project) { + runProjectAnalysis(ORCHESTRATOR, project); + } + + private void createManualIssue() { + ORCHESTRATOR.getServer().adminWsClient().issueClient().create( + NewIssue.create() + .component(COMPONENT_KEY) + .line(3) + .rule("manual:invalidclassname") + .message("The name 'Sample' is too generic") + ); + this.issueCreationDate = searchIssuesByComponent(COMPONENT_KEY).get(0).creationDate(); + } + + private static void createManualRule() { + ORCHESTRATOR.getServer().adminWsClient().post("/api/rules/create", ImmutableMap.of( + "manual_key", "invalidclassname", + "name", "InvalidClassName", + "markdown_description", "Invalid class name" + )); + } + + private static List searchIssuesByComponent(String componentKey) { + return search(IssueQuery.create().components(componentKey)).list(); + } +} -- 2.39.5