import org.sonar.wsclient.issue.Issue;
import org.sonar.wsclient.issue.IssueQuery;
import org.sonar.wsclient.user.UserParameters;
+import org.sonarqube.ws.Issues;
import org.sonarqube.ws.client.WsClient;
import org.sonarqube.ws.client.permission.AddUserWsRequest;
import org.sonarqube.ws.client.permission.RemoveGroupWsRequest;
import static junit.framework.TestCase.fail;
import static org.assertj.core.api.Assertions.assertThat;
import static util.ItUtils.newAdminWsClient;
+import static util.ItUtils.newUserWsClient;
import static util.ItUtils.projectDir;
public class IssuePermissionTest {
// Without user permission, a user cannot see issue changelog on the project
try {
- orchestrator.getServer().wsClient(withoutBrowsePermission, "password").issueClient().changes(issue.key());
+ changelog(issue.key(), withoutBrowsePermission, "password");
fail();
} catch (Exception e) {
- assertThat(e).isInstanceOf(HttpException.class).describedAs("404");
+ assertThat(e).isInstanceOf(org.sonarqube.ws.client.HttpException.class).describedAs("403");
}
// Without user permission, a user cannot see issues on the project
- assertThat(orchestrator.getServer().wsClient(withBrowsePermission, "password").issueClient().changes(issue.key())).isNotEmpty();
+ assertThat(changelog(issue.key(), withBrowsePermission, "password").getChangelogList()).isNotEmpty();
} finally {
client.userClient().deactivate(withBrowsePermission);
.setProjectKey(projectKey)
.setPermission(permission));
}
+
+ private static Issues.ChangelogWsResponse changelog(String issueKey, String login, String password) {
+ return newUserWsClient(orchestrator, login, password).issues().changelog(issueKey);
+ }
}
import org.junit.Rule;
import org.junit.Test;
import org.sonar.wsclient.issue.Issue;
-import org.sonar.wsclient.issue.IssueChange;
-import org.sonar.wsclient.issue.IssueChangeDiff;
+import org.sonarqube.ws.Issues;
+import org.sonarqube.ws.Issues.ChangelogWsResponse.Changelog;
import util.ProjectAnalysis;
import util.ProjectAnalysisRule;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.tuple;
+import static util.ItUtils.newAdminWsClient;
public class IssueChangelogTest extends AbstractIssueTest {
adminIssueClient().assign(issue.key(), "admin");
- List<IssueChange> changes = retrieveChangeForIssue(issue.key());
+ List<Changelog> changes = changelog(issue.key()).getChangelogList();
assertThat(changes).hasSize(1);
- IssueChange change = changes.get(0);
- assertThat(change.user()).isEqualTo("admin");
- assertThat(change.creationDate()).isNotNull();
- assertThat(change.diffs()).hasSize(1);
- IssueChangeDiff changeDiff = change.diffs().get(0);
- assertThat(changeDiff.key()).isEqualTo("assignee");
- assertThat(changeDiff.oldValue()).isNull();
- assertThat(changeDiff.newValue()).isEqualTo("Administrator");
+ Changelog change = changes.get(0);
+ assertThat(change.getUser()).isEqualTo("admin");
+ assertThat(change.getCreationDate()).isNotNull();
+ assertThat(change.getDiffsList())
+ .extracting(Changelog.Diff::getKey, Changelog.Diff::hasOldValue, Changelog.Diff::getNewValue)
+ .containsOnly(tuple("assignee", false, "Administrator"));
}
@Test
adminIssueClient().doTransition(issue.key(), "resolve");
xooSampleAnalysis.run();
- List<IssueChange> changes = retrieveChangeForIssue(issue.key());
+ List<Changelog> changes = changelog(issue.key()).getChangelogList();
assertThat(changes).hasSize(2);
// Change done by the user (first change is be the oldest one)
- IssueChange change1 = changes.get(0);
- assertThat(change1.user()).isEqualTo("admin");
- assertThat(change1.creationDate()).isNotNull();
- assertThat(change1.diffs()).hasSize(2);
-
- IssueChangeDiff change1Diff1 = change1.diffs().get(0);
- assertThat(change1Diff1.key()).isEqualTo("resolution");
- assertThat(change1Diff1.oldValue()).isNull();
- assertThat(change1Diff1.newValue()).isEqualTo("FIXED");
-
- IssueChangeDiff change1Diff2 = change1.diffs().get(1);
- assertThat(change1Diff2.key()).isEqualTo("status");
- assertThat(change1Diff2.oldValue()).isEqualTo("OPEN");
- assertThat(change1Diff2.newValue()).isEqualTo("RESOLVED");
+ Changelog change1 = changes.get(0);
+ assertThat(change1.getUser()).isEqualTo("admin");
+ assertThat(change1.getCreationDate()).isNotNull();
+ assertThat(change1.getDiffsList())
+ .extracting(Changelog.Diff::getKey, Changelog.Diff::getOldValue, Changelog.Diff::getNewValue)
+ .containsOnly(tuple("resolution", "", "FIXED"), tuple("status", "OPEN", "RESOLVED"));
// Change done by scan
- IssueChange change2 = changes.get(1);
- assertThat(change2.user()).isNull();
- assertThat(change2.creationDate()).isNotNull();
- assertThat(change2.diffs()).hasSize(2);
-
- IssueChangeDiff changeDiff1 = change2.diffs().get(0);
- assertThat(changeDiff1.key()).isEqualTo("resolution");
- assertThat(changeDiff1.oldValue()).isNull();
- assertThat(changeDiff1.newValue()).isNull();
-
- IssueChangeDiff changeDiff2 = change2.diffs().get(1);
- assertThat(changeDiff2.key()).isEqualTo("status");
- assertThat(changeDiff2.oldValue()).isEqualTo("RESOLVED");
- assertThat(changeDiff2.newValue()).isEqualTo("REOPENED");
+ Changelog change2 = changes.get(1);
+ assertThat(change2.hasUser()).isFalse();
+ assertThat(change2.getCreationDate()).isNotNull();
+ assertThat(change2.getDiffsList())
+ .extracting(Changelog.Diff::getKey, Changelog.Diff::getOldValue, Changelog.Diff::getNewValue)
+ .containsOnly(tuple("resolution", "", ""), tuple("status", "RESOLVED", "REOPENED"));
}
private void assertIssueHasNoChange(String issueKey) {
- assertThat(retrieveChangeForIssue(issueKey)).isEmpty();
+ assertThat(changelog(issueKey).getChangelogList()).isEmpty();
}
- private List<IssueChange> retrieveChangeForIssue(String issueKey) {
- return issueClient().changes(issueKey);
+ private static Issues.ChangelogWsResponse changelog(String issueKey) {
+ return newAdminWsClient(ORCHESTRATOR).issues().changelog(issueKey);
}
}
import org.junit.Rule;
import org.junit.Test;
import org.sonar.wsclient.issue.Issue;
-import org.sonar.wsclient.issue.IssueChange;
-import org.sonar.wsclient.issue.IssueChangeDiff;
import org.sonar.wsclient.issue.IssueClient;
import org.sonar.wsclient.issue.IssueQuery;
+import org.sonarqube.ws.Issues;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.tuple;
+import static util.ItUtils.newAdminWsClient;
import static util.ItUtils.projectDir;
/**
IssueClient issueClient = orchestrator.getServer().wsClient().issueClient();
Issue issue = issueClient.find(IssueQuery.create()).list().get(0);
- List<IssueChange> changes = issueClient.changes(issue.key());
+ List<Issues.ChangelogWsResponse.Changelog> changes = changelog(issue.key()).getChangelogList();
assertThat(changes).hasSize(1);
- IssueChange change = changes.get(0);
+ 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"));
+ }
- assertThat(change.diffs()).hasSize(1);
- IssueChangeDiff changeDiff = change.diffs().get(0);
- assertThat(changeDiff.key()).isEqualTo("effort");
- assertThat(changeDiff.oldValue()).isEqualTo("10");
- assertThat(changeDiff.newValue()).isEqualTo("100");
+ private static Issues.ChangelogWsResponse changelog(String issueKey) {
+ return newAdminWsClient(orchestrator).issues().changelog(issueKey);
}
}
import static org.sonar.core.util.Uuids.UUID_EXAMPLE_01;
import static org.sonar.server.issue.IssueFieldsSetter.TECHNICAL_DEBT;
import static org.sonar.server.ws.WsUtils.writeProtobuf;
+import static org.sonarqube.ws.client.issue.IssuesWsParameters.ACTION_CHANGELOG;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_ISSUE;
public class ChangelogAction implements IssuesWsAction {
- private static final String ACTION_CHANGELOG = "changelog";
private static final String EFFORT_CHANGELOG_KEY = "effort";
private final DbClient dbClient;
import org.sonar.api.server.ws.RailsHandler;
import org.sonar.api.server.ws.WebService;
-public class IssuesWs implements WebService {
+import static org.sonarqube.ws.client.issue.IssuesWsParameters.CONTROLLER_ISSUES;
- public static final String API_ENDPOINT = "api/issues";
+public class IssuesWs implements WebService {
public static final String ADD_COMMENT_ACTION = "add_comment";
public static final String DELETE_COMMENT_ACTION = "delete_comment";
@Override
public void define(Context context) {
- NewController controller = context.createController(API_ENDPOINT);
+ NewController controller = context.createController(CONTROLLER_ISSUES);
controller.setDescription("Read and update issues.");
controller.setSince("3.6");
for (IssuesWsAction action : actions) {
import static org.sonar.db.component.ComponentTesting.newFileDto;
import static org.sonar.db.component.ComponentTesting.newModuleDto;
import static org.sonar.db.component.SnapshotTesting.newAnalysis;
+import static org.sonarqube.ws.client.issue.IssuesWsParameters.CONTROLLER_ISSUES;
public class SearchActionComponentsMediumTest {
session.commit();
tester.get(IssueIndexer.class).indexAll();
- WsTester.Result result = wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION).execute();
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION).execute();
result.assertJson(this.getClass(), "issues_on_different_projects.json");
}
session.commit();
tester.get(IssueIndexer.class).indexAll();
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.PROJECT_UUIDS, project.uuid())
.execute()
.assertJson(this.getClass(), "search_by_project_uuid.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.PROJECT_UUIDS, "unknown")
.execute()
.assertJson(this.getClass(), "no_issue.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, project.uuid())
.execute()
.assertJson(this.getClass(), "search_by_project_uuid.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, "unknown")
.execute()
.assertJson(this.getClass(), "no_issue.json");
session.commit();
tester.get(IssueIndexer.class).indexAll();
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, project.uuid())
.setParam(IssuesWsParameters.SINCE_LEAK_PERIOD, "true")
.execute()
session.commit();
tester.get(IssueIndexer.class).indexAll();
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, project.uuid())
.setParam(IssuesWsParameters.FILE_UUIDS, file.uuid())
.setParam(IssuesWsParameters.SINCE_LEAK_PERIOD, "true")
session.commit();
tester.get(IssueIndexer.class).indexAll();
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.PROJECT_UUIDS, project1.uuid())
.setParam(WebService.Param.FACETS, "projectUuids")
.execute()
session.commit();
tester.get(IssueIndexer.class).indexAll();
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.FILE_UUIDS, file.uuid())
.execute()
.assertJson(this.getClass(), "search_by_file_uuid.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.FILE_UUIDS, "unknown")
.execute()
.assertJson(this.getClass(), "no_issue.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, file.uuid())
.execute()
.assertJson(this.getClass(), "search_by_file_uuid.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, "unknown")
.execute()
.assertJson(this.getClass(), "no_issue.json");
session.commit();
tester.get(IssueIndexer.class).indexAll();
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENTS, file.key())
.execute()
.assertJson(this.getClass(), "search_by_file_key.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENTS, unitTest.key())
.execute()
.assertJson(this.getClass(), "search_by_test_key.json");
session.commit();
tester.get(IssueIndexer.class).indexAll();
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, project.uuid())
.setParam(IssuesWsParameters.FILE_UUIDS, file1.uuid() + "," + file3.uuid())
.setParam(WebService.Param.FACETS, "fileUuids")
session.commit();
tester.get(IssueIndexer.class).indexAll();
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, directory.uuid())
.execute()
.assertJson(this.getClass(), "search_by_file_uuid.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, "unknown")
.execute()
.assertJson(this.getClass(), "no_issue.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.DIRECTORIES, "src/main/java/dir")
.execute()
.assertJson(this.getClass(), "search_by_file_uuid.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.DIRECTORIES, "src/main/java")
.execute()
.assertJson(this.getClass(), "no_issue.json");
tester.get(IssueIndexer.class).indexAll();
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, directory1.uuid())
.execute()
.assertJson(this.getClass(), "search_by_directory_uuid.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, directory2.uuid())
.execute()
.assertJson(this.getClass(), "no_issue.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.MODULE_UUIDS, module1.uuid())
.setParam(IssuesWsParameters.DIRECTORIES, "src/main/java/dir")
.execute()
.assertJson(this.getClass(), "search_by_directory_uuid.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.MODULE_UUIDS, module2.uuid())
.setParam(IssuesWsParameters.DIRECTORIES, "src/main/java/dir")
.execute()
.assertJson(this.getClass(), "no_issue.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.DIRECTORIES, "src/main/java/dir")
.execute()
.assertJson(this.getClass(), "search_by_directory_uuid.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.DIRECTORIES, "src/main/java")
.execute()
.assertJson(this.getClass(), "no_issue.json");
session.commit();
tester.get(IssueIndexer.class).indexAll();
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, module.uuid())
.setParam(IssuesWsParameters.MODULE_UUIDS, subModule1.uuid() + "," + subModule3.uuid())
.setParam(WebService.Param.FACETS, "moduleUuids")
tester.get(IssueIndexer.class).indexAll();
userSessionRule.login("john");
- WsTester.Result result = wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam("resolved", "false")
.setParam(WebService.Param.FACETS, "directories")
.execute();
setAnyoneProjectPermission(view, UserRole.USER);
userSessionRule.login("john").addProjectUuidPermissions(UserRole.USER, view.uuid());
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, view.uuid())
.execute()
.assertJson(this.getClass(), "search_by_view_uuid.json");
// User has wrong permission on the view, no issue will be returned
userSessionRule.login("john").addProjectUuidPermissions(UserRole.CODEVIEWER, view.uuid());
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, view.uuid())
.execute()
.assertJson(this.getClass(), "no_issue.json");
setAnyoneProjectPermission(view, UserRole.USER);
userSessionRule.login("john").addComponentUuidPermission(UserRole.USER, view.uuid(), subView.uuid());
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, subView.uuid())
.execute()
.assertJson(this.getClass(), "search_by_view_uuid.json");
// User has wrong permission on the view, no issue will be returned
userSessionRule.login("john").addComponentUuidPermission(UserRole.CODEVIEWER, view.uuid(), subView.uuid());
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, subView.uuid())
.execute()
.assertJson(this.getClass(), "no_issue.json");
session.commit();
tester.get(IssueIndexer.class).indexAll();
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.AUTHORS, "leia")
.setParam(WebService.Param.FACETS, "authors")
.execute()
.assertJson(this.getClass(), "search_by_authors.json");
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.AUTHORS, "unknown")
.execute()
.assertJson(this.getClass(), "no_issue.json");
session.commit();
tester.get(IssueIndexer.class).indexAll();
- wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, developer.uuid())
.execute()
.assertJson(this.getClass(), "search_by_developer.json");
session.commit();
tester.get(IssueIndexer.class).indexAll();
- Result result = wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
+ Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SearchAction.SEARCH_ACTION)
.setParam(IssuesWsParameters.COMPONENT_UUIDS, technicalProject.uuid())
.execute();
result
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.sonar.server.issue.ws.IssuesWs.API_ENDPOINT;
import static org.sonar.server.issue.ws.SearchAction.SEARCH_ACTION;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.ADDITIONAL_FIELDS;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.COMPONENTS;
+import static org.sonarqube.ws.client.issue.IssuesWsParameters.CONTROLLER_ISSUES;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.CREATED_AFTER;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.DEPRECATED_FACET_MODE_DEBT;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.FACET_MODE_EFFORT;
@Test
public void empty_search() throws Exception {
- WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION);
+ WsTester.TestRequest request = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION);
WsTester.Result result = request.execute();
assertThat(result).isNotNull();
session.commit();
tester.get(IssueIndexer.class).indexAll();
- WsTester.Result result = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION).execute();
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION).execute();
result.assertJson(this.getClass(), "response_contains_all_fields_except_additional_fields.json");
}
tester.get(IssueIndexer.class).indexAll();
userSessionRule.login("john");
- WsTester.Result result = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION)
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION)
.setParam("additionalFields", "comments,users")
.execute();
result.assertJson(this.getClass(), "issue_with_comments.json");
tester.get(IssueIndexer.class).indexAll();
userSessionRule.login("john");
- WsTester.Result result = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION).setParam(HIDE_COMMENTS, "true").execute();
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION).setParam(HIDE_COMMENTS, "true").execute();
result.assertJson(this.getClass(), "issue_with_comment_hidden.json");
assertThat(result.outputAsString()).doesNotContain("fabrice");
}
tester.get(IssueIndexer.class).indexAll();
userSessionRule.login("john");
- WsTester.Result result = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION)
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION)
.setParam("additionalFields", "_all").execute();
result.assertJson(this.getClass(), "load_additional_fields.json");
}
session.commit();
tester.get(IssueIndexer.class).indexAll();
- WsTester.Result result = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION)
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION)
.execute();
result.assertJson(this.getClass(), "issue_on_removed_file.json");
}
session.commit();
tester.get(IssueIndexer.class).indexAll();
- WsTester.Result result = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION).execute();
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION).execute();
assertThat(result.outputAsString()).contains("\"componentId\":" + file.getId() + ",");
}
session.commit();
tester.get(IssueIndexer.class).indexAll();
- WsTester.Result result = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION).setParam(COMPONENTS, file.getKey()).execute();
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION).setParam(COMPONENTS, file.getKey()).execute();
result.assertJson(this.getClass(), "apply_paging_with_one_component.json");
}
session.commit();
tester.get(IssueIndexer.class).indexAll();
- WsTester.Result result = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION).setParam(ADDITIONAL_FIELDS, "_all").execute();
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION).setParam(ADDITIONAL_FIELDS, "_all").execute();
result.assertJson(this.getClass(), "components_contains_sub_projects.json");
}
tester.get(IssueIndexer.class).indexAll();
userSessionRule.login("john");
- WsTester.Result result = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION)
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION)
.setParam("resolved", "false")
.setParam(WebService.Param.FACETS, "statuses,severities,resolutions,projectUuids,rules,fileUuids,assignees,languages,actionPlans,types")
.execute();
tester.get(IssueIndexer.class).indexAll();
userSessionRule.login("john");
- WsTester.Result result = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION)
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION)
.setParam("resolved", "false")
.setParam(WebService.Param.FACETS, "statuses,severities,resolutions,projectUuids,rules,fileUuids,assignees,languages,actionPlans")
.setParam("facetMode", FACET_MODE_EFFORT)
tester.get(IssueIndexer.class).indexAll();
userSessionRule.login("john");
- WsTester.Result result = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION)
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION)
.setParam("resolved", "false")
.setParam("severities", "MAJOR,MINOR")
.setParam("languages", "xoo,polop,palap")
userSessionRule.login("foo[");
// should not fail
- wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION)
.setParam(WebService.Param.FACETS, "assigned_to_me")
.execute()
.assertJson(this.getClass(), "assignedToMe_facet_must_escape_login_of_authenticated_user.json");
tester.get(IssueIndexer.class).indexAll();
userSessionRule.login("john");
- wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION)
.setParam("resolved", "false")
.setParam("assignees", "__me__")
.setParam(WebService.Param.FACETS, "assignees,assigned_to_me")
session.commit();
tester.get(IssueIndexer.class).indexAll();
- wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION)
.setParam("resolved", "false")
.setParam("assignees", "__me__")
.execute()
tester.get(IssueIndexer.class).indexAll();
userSessionRule.login("john-bob.polop");
- wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION)
.setParam("resolved", "false")
.setParam("assignees", "alice")
.setParam(WebService.Param.FACETS, "assignees,assigned_to_me")
session.commit();
tester.get(IssueIndexer.class).indexAll();
- WsTester.Result result = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION)
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION)
.setParam("sort", IssueQuery.SORT_BY_UPDATE_DATE)
.setParam("asc", "false")
.execute();
session.commit();
tester.get(IssueIndexer.class).indexAll();
- WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION);
+ WsTester.TestRequest request = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION);
request.setParam(WebService.Param.PAGE, "2");
request.setParam(WebService.Param.PAGE_SIZE, "9");
session.commit();
tester.get(IssueIndexer.class).indexAll();
- WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION);
+ WsTester.TestRequest request = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION);
request.setParam(WebService.Param.PAGE, "1");
request.setParam(WebService.Param.PAGE_SIZE, "-1");
session.commit();
tester.get(IssueIndexer.class).indexAll();
- WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION);
+ WsTester.TestRequest request = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION);
request.setParam(PAGE_INDEX, "2");
request.setParam(PAGE_SIZE, "9");
@Test
public void default_page_size_is_100() throws Exception {
- WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION);
+ WsTester.TestRequest request = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION);
WsTester.Result result = request.execute();
result.assertJson(this.getClass(), "default_page_size_is_100.json");
tester.get(IssueIndexer.class).indexAll();
userSessionRule.login("john");
- WsTester.Result result = wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION)
+ WsTester.Result result = wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION)
.setParam("resolved", "false")
.setParam(WebService.Param.FACETS, "severities")
.setParam("facetMode", DEPRECATED_FACET_MODE_DEBT)
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("Date 'wrong-date-input' cannot be parsed as either a date or date+time");
- wsTester.newGetRequest(API_ENDPOINT, SEARCH_ACTION)
+ wsTester.newGetRequest(CONTROLLER_ISSUES, SEARCH_ACTION)
.setParam(CREATED_AFTER, "wrong-date-input")
.execute();
}
*/
package org.sonarqube.ws.client.issue;
+import org.sonarqube.ws.Issues.ChangelogWsResponse;
import org.sonarqube.ws.Issues.SearchWsResponse;
import org.sonarqube.ws.client.BaseService;
import org.sonarqube.ws.client.GetRequest;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.COMPONENT_ROOTS;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.COMPONENT_ROOT_UUIDS;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.COMPONENT_UUIDS;
+import static org.sonarqube.ws.client.issue.IssuesWsParameters.CONTROLLER_ISSUES;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.CREATED_AFTER;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.CREATED_AT;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.CREATED_BEFORE;
public class IssuesService extends BaseService {
public IssuesService(WsConnector wsConnector) {
- super(wsConnector, "api/issues");
+ super(wsConnector, CONTROLLER_ISSUES);
}
public SearchWsResponse search(SearchWsRequest request) {
.setParam(TYPES, inlineMultipleParamValue(request.getTypes())),
SearchWsResponse.parser());
}
+
+ public ChangelogWsResponse changelog(String issueKey) {
+ return call(new GetRequest(path("changelog")).setParam(IssuesWsParameters.PARAM_ISSUE, issueKey), ChangelogWsResponse.parser());
+ }
}
*/
public class IssuesWsParameters {
+ public static final String CONTROLLER_ISSUES = "api/issues";
+
+ public static final String ACTION_CHANGELOG = "changelog";
+
public static final String PARAM_ISSUE = "issue";
public static final String ISSUES = "issues";
--- /dev/null
+/*
+ * 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 org.sonarqube.ws.client.issue;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonarqube.ws.Issues;
+import org.sonarqube.ws.client.GetRequest;
+import org.sonarqube.ws.client.ServiceTester;
+import org.sonarqube.ws.client.WsConnector;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_ISSUE;
+
+public class IssuesServiceTest {
+
+ @Rule
+ public ServiceTester<IssuesService> serviceTester = new ServiceTester<>(new IssuesService(mock(WsConnector.class)));
+
+ private IssuesService underTest = serviceTester.getInstanceUnderTest();
+
+ @Test
+ public void changelog() {
+ underTest.changelog("ABCD");
+
+ GetRequest getRequest = serviceTester.getGetRequest();
+
+ assertThat(serviceTester.getGetParser()).isSameAs(Issues.ChangelogWsResponse.parser());
+ serviceTester.assertThat(getRequest)
+ .hasParam(PARAM_ISSUE, "ABCD")
+ .andNoOtherParam();
+ }
+
+}