use of org.sonarqube.ws.Issues in project sonarqube by SonarSource.
the class LiteTest method call_issues_ws.
@Test
public void call_issues_ws() {
// all issues
Issues.SearchWsResponse response = wsClient.issues().search(new SearchWsRequest());
assertThat(response.getIssuesCount()).isGreaterThan(0);
// project issues
response = wsClient.issues().search(new SearchWsRequest().setProjectKeys(singletonList(PROJECT_KEY)));
assertThat(response.getIssuesCount()).isGreaterThan(0);
}
use of org.sonarqube.ws.Issues in project sonarqube by SonarSource.
the class TechnicalDebtInIssueChangelogTest method display_debt_in_issue_changelog.
@Test
public void display_debt_in_issue_changelog() throws Exception {
orchestrator.getServer().restoreProfile(FileLocation.ofClasspath("/qualityModel/one-issue-per-file.xml"));
orchestrator.getServer().provisionProject("sample", "sample");
orchestrator.getServer().associateProjectToQualityProfile("sample", "xoo", "one-issue-per-file");
// Execute a first analysis to have a past snapshot
orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-sample")));
// Second analysis, existing issues on OneIssuePerFile will have their technical debt updated with the effort to fix
orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-sample")).setProperties("sonar.oneIssuePerFile.effortToFix", "10"));
IssueClient issueClient = orchestrator.getServer().wsClient().issueClient();
Issue issue = issueClient.find(IssueQuery.create()).list().get(0);
List<Issues.ChangelogWsResponse.Changelog> changes = changelog(issue.key()).getChangelogList();
assertThat(changes).hasSize(1);
assertThat(changes.get(0).getDiffsList()).extracting(Issues.ChangelogWsResponse.Changelog.Diff::getKey, Issues.ChangelogWsResponse.Changelog.Diff::getOldValue, Issues.ChangelogWsResponse.Changelog.Diff::getNewValue).containsOnly(tuple("effort", "10", "100"));
}
use of org.sonarqube.ws.Issues in project sonarqube by SonarSource.
the class ClusterTest method start_cluster_of_elasticsearch_and_web_nodes.
@Test
public void start_cluster_of_elasticsearch_and_web_nodes() throws IOException {
Orchestrator elasticsearch = null;
Orchestrator web = null;
try {
ElasticsearchStartupWatcher esWatcher = new ElasticsearchStartupWatcher();
elasticsearch = Orchestrator.builderEnv().setServerProperty("sonar.cluster.enabled", "true").setServerProperty("sonar.cluster.name", "start_cluster_of_elasticsearch_and_web_nodes").setServerProperty("sonar.cluster.web.disabled", "true").setServerProperty("sonar.cluster.ce.disabled", "true").setStartupLogWatcher(esWatcher).build();
elasticsearch.start();
assertThat(esWatcher.port).isGreaterThan(0);
assertThat(FileUtils.readFileToString(elasticsearch.getServer().getAppLogs())).doesNotContain("Process[web]");
web = Orchestrator.builderEnv().setServerProperty("sonar.cluster.enabled", "true").setServerProperty("sonar.cluster.name", "start_cluster_of_elasticsearch_and_web_nodes").setServerProperty("sonar.cluster.web.startupLeader", "true").setServerProperty("sonar.cluster.search.disabled", "true").setServerProperty("sonar.cluster.search.hosts", "localhost:" + esWatcher.port).setServerProperty("sonar.cluster.ce.disabled", "true").setStartupLogWatcher(log -> log.contains("SonarQube is up")).build();
web.start();
String coreId = getPropertyValue(web, "sonar.core.id");
String startTime = getPropertyValue(web, "sonar.core.startTime");
assertThat(FileUtils.readFileToString(web.getServer().getAppLogs())).doesNotContain("Process[es]");
// call a web service that requires Elasticsearch
Issues.SearchWsResponse wsResponse = ItUtils.newWsClient(web).issues().search(new org.sonarqube.ws.client.issue.SearchWsRequest());
assertThat(wsResponse.getIssuesCount()).isEqualTo(0);
web.restartServer();
// sonar core id must not change after restart
assertThat(getPropertyValue(web, "sonar.core.id")).isEqualTo(coreId);
// startTime must change at each startup
assertThat(getPropertyValue(web, "sonar.core.startTime")).isNotEqualTo(startTime);
} finally {
if (web != null) {
web.stop();
}
if (elasticsearch != null) {
elasticsearch.stop();
}
}
}
use of org.sonarqube.ws.Issues in project sonarqube by SonarSource.
the class IssuePermissionTest method need_administer_issue_permission_on_project_to_bulk_change_severity_and_false_positive.
/**
* SONAR-2447
*/
@Test
public void need_administer_issue_permission_on_project_to_bulk_change_severity_and_false_positive() {
SonarClient client = orchestrator.getServer().adminWsClient();
Issue issueOnSample = client.issueClient().find(IssueQuery.create().componentRoots("sample")).list().get(0);
Issue issueOnSample2 = client.issueClient().find(IssueQuery.create().componentRoots("sample2")).list().get(0);
String user = "user";
try {
client.userClient().create(UserParameters.create().login(user).name(user).password("password").passwordConfirmation("password"));
addUserPermission(user, "sample", "issueadmin");
Issues.BulkChangeWsResponse response = newUserWsClient(orchestrator, user, "password").issues().bulkChange(BulkChangeRequest.builder().setIssues(asList(issueOnSample.key(), issueOnSample2.key())).setSetSeverity("BLOCKER").setDoTransition("falsepositive").build());
assertThat(response.getTotal()).isEqualTo(2);
assertThat(response.getSuccess()).isEqualTo(1);
assertThat(response.getIgnored()).isEqualTo(1);
} finally {
client.userClient().deactivate(user);
}
}
use of org.sonarqube.ws.Issues in project sonarqube by SonarSource.
the class BulkChangeAction method sendNotification.
private void sendNotification(Collection<DefaultIssue> issues, BulkChangeData bulkChangeData, Map<String, UserDto> userDtoByUuid, UserDto author) {
if (!bulkChangeData.sendNotification) {
return;
}
Set<ChangedIssue> changedIssues = issues.stream().filter(issue -> issue.updateDate() != null).map(issue -> toNotification(bulkChangeData, userDtoByUuid, issue)).filter(Objects::nonNull).collect(toSet(issues.size()));
if (changedIssues.isEmpty()) {
return;
}
IssuesChangesNotificationBuilder builder = new IssuesChangesNotificationBuilder(changedIssues, new UserChange(oldestUpdateDate(issues), new User(author.getUuid(), author.getLogin(), author.getName())));
notificationService.scheduleForSending(notificationSerializer.serialize(builder));
}
Aggregations