summaryrefslogtreecommitdiffstats
path: root/tests/src
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2018-02-05 16:59:48 +0100
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>2018-02-08 13:41:00 +0100
commitfc7ff3ff910868bd3e1032b21d79ba67edcf1abe (patch)
tree272b7e35b8aa156f831491fdee715222e5a565f0 /tests/src
parente6dbc80a0d82fb12c9bd19cfdb68767484521d87 (diff)
downloadsonarqube-fc7ff3ff910868bd3e1032b21d79ba67edcf1abe.tar.gz
sonarqube-fc7ff3ff910868bd3e1032b21d79ba67edcf1abe.zip
SONAR-10311 add IT on rule rekeying applying to issues
Diffstat (limited to 'tests/src')
-rw-r--r--tests/src/test/java/org/sonarqube/tests/rule/RuleReKeyingTest.java50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/src/test/java/org/sonarqube/tests/rule/RuleReKeyingTest.java b/tests/src/test/java/org/sonarqube/tests/rule/RuleReKeyingTest.java
index 0f0ec465846..719b2ec6dfc 100644
--- a/tests/src/test/java/org/sonarqube/tests/rule/RuleReKeyingTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/rule/RuleReKeyingTest.java
@@ -20,14 +20,21 @@
package org.sonarqube.tests.rule;
import com.sonar.orchestrator.Orchestrator;
+import com.sonar.orchestrator.build.SonarScanner;
import java.io.File;
+import java.util.List;
+import org.assertj.core.api.iterable.ThrowingExtractor;
import org.junit.After;
import org.junit.Test;
import org.sonarqube.qa.util.Tester;
+import org.sonarqube.ws.Issues;
import org.sonarqube.ws.client.PostRequest;
+import org.sonarqube.ws.client.issues.SearchRequest;
+import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
import static util.ItUtils.pluginArtifact;
+import static util.ItUtils.projectDir;
public class RuleReKeyingTest {
@@ -56,6 +63,14 @@ public class RuleReKeyingTest {
verifyRuleCount(16, 16);
+ analyseProject("2017-12-31");
+ List<Issues.Issue> issues = tester.wsClient().issues()
+ .search(new SearchRequest().setProjects(singletonList("sample")))
+ .getIssuesList();
+ verifyRuleKey(issues, "foo:ToBeRenamed", "foo:ToBeRenamedAndMoved");
+ verifyDate(issues, Issues.Issue::getCreationDate, "2017-12-31");
+ verifyDate(issues, Issues.Issue::getUpdateDate, "2017-12-31");
+
// uninstall plugin V1
tester.wsClient().wsConnector().call(new PostRequest("api/plugins/uninstall").setParam("key", "foo")).failIfNotSuccessful();
// install plugin V2
@@ -67,6 +82,14 @@ public class RuleReKeyingTest {
// one rule deleted, one rule added, two rules re-keyed
verifyRuleCount(16, 17);
+ analyseProject("2018-01-02");
+ List<Issues.Issue> issuesAfterUpgrade = tester.wsClient().issues()
+ .search(new SearchRequest().setProjects(singletonList("sample")))
+ .getIssuesList();
+ verifyRuleKey(issuesAfterUpgrade, "foo:Renamed", "foo2:RenamedAndMoved");
+ verifyDate(issuesAfterUpgrade, Issues.Issue::getCreationDate, "2017-12-31");
+ verifyDate(issuesAfterUpgrade, Issues.Issue::getUpdateDate, "2018-01-02");
+
// uninstall plugin V2
tester.wsClient().wsConnector().call(new PostRequest("api/plugins/uninstall").setParam("key", "foo")).failIfNotSuccessful();
// install plugin V1
@@ -76,10 +99,37 @@ public class RuleReKeyingTest {
// new rule removed, removed rule recreated, two rules re-keyed back
verifyRuleCount(16, 17);
+
+ analyseProject("2018-01-16");
+ List<Issues.Issue> issuesAfterDowngrade = tester.wsClient().issues()
+ .search(new SearchRequest().setProjects(singletonList("sample")))
+ .getIssuesList();
+ verifyRuleKey(issuesAfterDowngrade, "foo:ToBeRenamed", "foo:ToBeRenamedAndMoved");
+ verifyDate(issuesAfterDowngrade, Issues.Issue::getCreationDate, "2017-12-31");
+ verifyDate(issuesAfterDowngrade, Issues.Issue::getUpdateDate, "2018-01-16");
+ }
+
+ private static void verifyRuleKey(List<Issues.Issue> issuesAfterDowngrade, String... ruleKeys) {
+ assertThat(issuesAfterDowngrade)
+ .extracting(Issues.Issue::getRule)
+ .containsOnly(ruleKeys);
+ }
+
+ private static void verifyDate(List<Issues.Issue> issuesAfterUpgrade, ThrowingExtractor<Issues.Issue, String, RuntimeException> getUpdateDate, String date) {
+ assertThat(issuesAfterUpgrade)
+ .extracting(getUpdateDate)
+ .usingElementComparator((a, b) -> a.startsWith(b) ? 0 : -1)
+ .containsOnly(date + "T00:00:00");
}
private void verifyRuleCount(int wsRuleCount, int dbRuleCount) {
assertThat(tester.wsClient().rules().list().getRulesList()).hasSize(wsRuleCount);
assertThat(orchestrator.getDatabase().countSql("select count(*) from rules")).isEqualTo(dbRuleCount);
}
+
+ private void analyseProject(String projectDate) {
+ orchestrator.executeBuild(
+ SonarScanner.create(projectDir("foo-sample"))
+ .setProperty("sonar.projectDate", projectDate));
+ }
}