import org.sonar.api.web.UserRole;
import org.sonar.core.component.ComponentDto;
import org.sonar.markdown.Markdown;
+import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.issue.filter.IssueFilterParameters;
import org.sonar.server.user.UserSession;
action.createParam(IssueFilterParameters.ASC)
.setDescription("Ascending sort")
.setBooleanPossibleValues();
+ action.createParam("format")
+ .setDescription("Only json format is available. This parameter is kept only for backward compatibility and shouldn't be used anymore");
}
@Override
public void handle(Request request, Response response) {
+ checkFormatParameter(request);
IssueQueryResult queryResult = issueFinder.find(createQuery(request));
JsonWriter json = response.newJsonWriter();
json.endObject().close();
}
+ private void checkFormatParameter(Request request) {
+ String format = request.param("format");
+ if (!Strings.isNullOrEmpty(format) && !format.equals("json")){
+ throw new BadRequestException("Only json format is supported.");
+ }
+ }
+
private void writePaging(IssueQueryResult result, JsonWriter json) {
json.prop("maxResultsReached", result.maxResultsReached());
json.name("paging").beginObject()
package org.sonar.server.issue.ws;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import org.junit.Before;
import org.junit.Test;
import org.sonar.core.issue.DefaultIssueQueryResult;
import org.sonar.core.issue.workflow.Transition;
import org.sonar.core.user.DefaultUser;
+import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.issue.ActionService;
import org.sonar.server.issue.IssueService;
import org.sonar.server.user.MockUserSession;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Maps.newHashMap;
import static org.fest.assertions.Assertions.assertThat;
+import static org.fest.assertions.Fail.fail;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
Date updateDate = DateUtils.parseDateTime("2014-01-23T19:10:03+0100");
Date closedDate = DateUtils.parseDateTime("2014-01-24T19:10:03+0100");
- Issue issue = createStandardIssue()
+ Issue issue = createIssue()
.setCreationDate(creationDate)
.setUpdateDate(updateDate)
.setCloseDate(closedDate);
@Test
public void issues_with_debt() throws Exception {
Duration debt = (Duration.create(7260L));
- Issue issue = createStandardIssue().setDebt(debt);
+ Issue issue = createIssue().setDebt(debt);
issues.add(issue);
when(durations.encode(debt)).thenReturn("2h1min");
@Test
public void issues_with_action_plan() throws Exception {
- Issue issue = createStandardIssue()
+ Issue issue = createIssue()
.setActionPlanKey("AP-ABCD");
issues.add(issue);
@Test
public void issues_with_comments() throws Exception {
- Issue issue = createStandardIssue()
+ Issue issue = createIssue()
.addComment(
new DefaultIssueComment()
.setKey("COMMENT-ABCD")
@Test
public void issues_with_attributes() throws Exception {
- Issue issue = createStandardIssue()
+ Issue issue = createIssue()
.setAttribute("jira-issue-key", "SONAR-1234");
issues.add(issue);
@Test
public void issues_with_extra_fields() throws Exception {
- Issue issue = createStandardIssue()
+ Issue issue = createIssue()
.setActionPlanKey("AP-ABCD")
.setAssignee("john");
issues.add(issue);
@Test
public void issues_with_components() throws Exception {
- issues.add(createStandardIssue());
+ issues.add(createIssue());
ComponentDto component = new ComponentDto()
.setId(10L)
@Test
public void issues_with_sub_project() throws Exception {
- Issue issue = createStandardIssue().setComponentKey("sample:sample-module:src/main/xoo/sample/Sample.xoo");
+ Issue issue = createIssue().setComponentKey("sample:sample-module:src/main/xoo/sample/Sample.xoo");
issues.add(issue);
// File
@Test
public void issues_with_rules() throws Exception {
- issues.add(createStandardIssue());
+ issues.add(createIssue());
result.addRules(newArrayList(
Rule.create("squid", "AvoidCycle").setName("Avoid cycle").setDescription("Avoid cycle description")
@Test
public void issues_with_users() throws Exception {
- Issue issue = createStandardIssue()
+ Issue issue = createIssue()
.setAssignee("john")
.setReporter("steven")
.setAuthorLogin("Henry");
assertThat(query.asc()).isTrue();
}
- private DefaultIssue createStandardIssue() {
- return createIssue();
+ @Test
+ public void verify_format_parameter() throws Exception {
+ // No error if json
+ tester.newGetRequest("api/issues", "search").setParams(ImmutableMap.of("format", "json")).execute();
+
+ // No error if empty
+ tester.newGetRequest("api/issues", "search").setParams(ImmutableMap.of("format", "")).execute();
+
+ // Error if not empty and not json
+ try {
+ tester.newGetRequest("api/issues", "search").setParams(ImmutableMap.of("format", "xml")).execute();
+ fail();
+ } catch (Exception e) {
+ assertThat(e).isInstanceOf(BadRequestException.class);
+ }
}
private DefaultIssue createIssue() {