it.issue.IssueFilterOnCommonRulesTest.java Source code

Java tutorial

Introduction

Here is the source code for it.issue.IssueFilterOnCommonRulesTest.java

Source

/*
 * SonarQube
 * Copyright (C) 2009-2017 SonarSource SA
 * mailto:info 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 java.util.List;
import org.apache.commons.lang.ArrayUtils;
import org.junit.Before;
import org.junit.Test;
import org.sonarqube.ws.Issues;
import org.sonarqube.ws.client.WsClient;
import org.sonarqube.ws.client.issue.SearchWsRequest;
import util.ItUtils;

import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
import static util.ItUtils.newAdminWsClient;
import static util.ItUtils.runProjectAnalysis;
import static util.ItUtils.setServerProperties;

public class IssueFilterOnCommonRulesTest extends AbstractIssueTest {

    private static WsClient adminWsClient;

    private static final String PROJECT_KEY = "common-rules-project";
    private static final String PROJECT_DIR = "issue/common-rules";

    private static final String FILE_KEY = "common-rules-project:src/Sample.xoo";

    @Before
    public void resetData() {
        ORCHESTRATOR.resetData();
        ItUtils.restoreProfile(ORCHESTRATOR,
                getClass().getResource("/issue/IssueFilterOnCommonRulesTest/xoo-common-rules-profile.xml"));
        ORCHESTRATOR.getServer().provisionProject(PROJECT_KEY, "Sample");
        ORCHESTRATOR.getServer().associateProjectToQualityProfile(PROJECT_KEY, "xoo", "xoo-common-rules");

        adminWsClient = newAdminWsClient(ORCHESTRATOR);
    }

    @Test
    public void ignore_all() {
        executeAnalysis("sonar.issue.ignore.multicriteria", "1", "sonar.issue.ignore.multicriteria.1.ruleKey", "*",
                "sonar.issue.ignore.multicriteria.1.resourceKey", "**/*.xoo");

        assertThat(findAllIssues()).hasSize(0);
    }

    @Test
    public void ignore_some_rule_and_file() {
        executeAnalysis("sonar.issue.ignore.multicriteria", "1,2", "sonar.issue.ignore.multicriteria.1.ruleKey",
                "common-xoo:DuplicatedBlocks", "sonar.issue.ignore.multicriteria.1.resourceKey", "**/Sample.xoo",
                "sonar.issue.ignore.multicriteria.2.ruleKey", "common-xoo:SkippedUnitTests",
                "sonar.issue.ignore.multicriteria.2.resourceKey", "**/SampleTest.xoo");

        assertThat(findAllIssues()).hasSize(4);
        assertThat(findIssuesByRuleKey("common-xoo:DuplicatedBlocks")).isEmpty();
        assertThat(findIssuesByRuleKey("common-xoo:SkippedUnitTests")).isEmpty();
    }

    @Test
    public void enforce_one_file() {
        executeAnalysis("sonar.issue.enforce.multicriteria", "1", "sonar.issue.enforce.multicriteria.1.ruleKey",
                "*",
                // Only issues on this file will be accepted
                "sonar.issue.enforce.multicriteria.1.resourceKey", "**/Sample.xoo");

        assertThat(findAllIssues()).hasSize(4);
    }

    @Test
    public void enforce_on_rules() {
        executeAnalysis("sonar.issue.enforce.multicriteria", "1,2", "sonar.issue.enforce.multicriteria.1.ruleKey",
                "common-xoo:DuplicatedBlocks", "sonar.issue.enforce.multicriteria.1.resourceKey", "**/Sample.xoo",
                // This rule should only be applied on a file that do not exist => no issue for this rule
                "sonar.issue.enforce.multicriteria.2.ruleKey", "common-xoo:InsufficientCommentDensity",
                "sonar.issue.enforce.multicriteria.2.resourceKey", "**/OtherFile.xoo");

        assertThat(findAllIssues()).hasSize(5);
        assertThat(findIssuesByRuleKey("common-xoo:DuplicatedBlocks")).hasSize(1);
        assertThat(findIssuesByRuleKey("common-xoo:InsufficientCommentDensity")).isEmpty();
    }

    private void executeAnalysis(String... serverProperties) {
        String[] cpdProperties = new String[] { "sonar.cpd.xoo.minimumTokens", "2", "sonar.cpd.xoo.minimumLines",
                "2" };
        setServerProperties(ORCHESTRATOR, PROJECT_KEY,
                (String[]) ArrayUtils.addAll(serverProperties, cpdProperties));
        runProjectAnalysis(ORCHESTRATOR, PROJECT_DIR);
    }

    private List<Issues.Issue> findIssuesByRuleKey(String ruleKey) {
        return adminWsClient.issues().search(
                new SearchWsRequest().setComponents(singletonList(FILE_KEY)).setRules(singletonList(ruleKey)))
                .getIssuesList();
    }

    private List<Issues.Issue> findAllIssues() {
        return adminWsClient.issues().search(new SearchWsRequest()).getIssuesList();
    }

}