*/
package org.sonar.server.issue.ws;
+import org.sonar.api.component.Component;
import org.sonar.api.i18n.I18n;
import org.sonar.api.issue.*;
import org.sonar.api.issue.action.Action;
}
private void writeIssue(IssueQueryResult result, DefaultIssue issue, JsonWriter json) {
+ Component component = result.component(issue);
+ Component project = result.project(issue);
String actionPlanKey = issue.actionPlanKey();
WorkDayDuration technicalDebt = issue.technicalDebt();
Date updateDate = issue.updateDate();
json
.prop("key", issue.key())
.prop("component", issue.componentKey())
- .prop("componentLongName", result.component(issue).longName())
- .prop("componentQualifier", result.component(issue).qualifier())
- .prop("project", result.project(issue).key())
- .prop("projectLongName", result.project(issue).longName())
+ .prop("componentLongName", component != null ? component.longName() : null)
+ .prop("componentQualifier", component != null ? component.qualifier() : null)
+ .prop("project", issue.projectKey())
+ .prop("projectLongName", project != null ? project.longName() : null)
.prop("rule", issue.ruleKey().toString())
.prop("ruleName", result.rule(issue).getName())
.prop("line", issue.line())
List<Issue> issues;
DefaultIssueQueryResult result;
+ private Date issue_creation_date;
+
WsTester tester;
@Before
public void setUp() throws Exception {
issues = new ArrayList<Issue>();
result = new DefaultIssueQueryResult(issues);
-
- Component component = mock(Component.class);
- when(component.key()).thenReturn("org.sonar.server.issue.IssueClient");
- when(component.longName()).thenReturn("SonarQube :: Issue Client");
- when(component.qualifier()).thenReturn("FIL");
- result.addComponents(newArrayList(component));
- Component project = mock(Component.class);
- when(project.key()).thenReturn("org.sonar.Sonar");
- when(project.longName()).thenReturn("SonarQube");
- result.addProjects(newArrayList(project));
-
result.addRules(newArrayList(Rule.create("squid", "AvoidCycle").setName("Avoid cycle")));
when(issueFinder.find(any(IssueQuery.class))).thenReturn(result);
when(issueChangelogService.changelog(any(Issue.class))).thenReturn(mock(IssueChangelog.class));
+ issue_creation_date = DateUtils.parseDateTime("2014-01-22T19:10:03+0100");
+ when(i18n.formatDateTime(any(Locale.class), eq(issue_creation_date))).thenReturn("Jan 22, 2014 10:03 AM");
+
+ when(i18n.message(any(Locale.class), eq("created"), eq((String) null))).thenReturn("Created");
+
tester = new WsTester(new IssuesWs(new IssueShowWsHandler(issueFinder, issueService, issueChangelogService, actionService, technicalDebtFormatter, i18n)));
}
.setResolution("FIXED")
.setStatus("CLOSED")
.setSeverity("MAJOR")
- .setCreationDate(DateUtils.parseDateTime("2014-01-22T19:10:03+0100"));
+ .setCreationDate(issue_creation_date);
issues.add(issue);
- when(i18n.formatDateTime(any(Locale.class), eq(issue.creationDate()))).thenReturn("Jan 22, 2014 10:03 AM");
- when(i18n.message(any(Locale.class), eq("created"), eq((String) null))).thenReturn("Created");
+ Component component = mock(Component.class);
+ when(component.key()).thenReturn("org.sonar.server.issue.IssueClient");
+ when(component.longName()).thenReturn("SonarQube :: Issue Client");
+ when(component.qualifier()).thenReturn("FIL");
+ result.addComponents(newArrayList(component));
+
+ Component project = mock(Component.class);
+ when(project.key()).thenReturn("org.sonar.Sonar");
+ when(project.longName()).thenReturn("SonarQube");
+ result.addProjects(newArrayList(project));
MockUserSession.set();
WsTester.TestRequest request = tester.newRequest("show").setParam("key", issueKey);
request.execute().assertJson(getClass(), "show_issue.json");
}
+ @Test
+ public void show_issue_on_removed_component() throws Exception {
+ String issueKey = "ABCD";
+ Issue issue = createIssue();
+ issues.add(issue);
+
+ Component project = mock(Component.class);
+ when(project.key()).thenReturn("org.sonar.Sonar");
+ when(project.longName()).thenReturn("SonarQube");
+ result.addProjects(newArrayList(project));
+
+ MockUserSession.set();
+ WsTester.TestRequest request = tester.newRequest("show").setParam("key", issueKey);
+ request.execute().assertJson(getClass(), "show_issue_on_removed_component.json");
+ }
+
+ @Test
+ public void show_issue_on_removed_project_and_component() throws Exception {
+ String issueKey = "ABCD";
+ Issue issue = createIssue();
+ issues.add(issue);
+
+ MockUserSession.set();
+ WsTester.TestRequest request = tester.newRequest("show").setParam("key", issueKey);
+ request.execute().assertJson(getClass(), "show_issue_on_removed_project_and_component.json");
+ }
+
@Test
public void show_issue_with_action_plan() throws Exception {
Issue issue = createStandardIssue()
}
private DefaultIssue createStandardIssue() {
- DefaultIssue issue = new DefaultIssue()
+ DefaultIssue issue = createIssue();
+ addComponentAndProject();
+ return issue;
+ }
+
+ private DefaultIssue createIssue() {
+ return new DefaultIssue()
.setKey("ABCD")
.setComponentKey("org.sonar.server.issue.IssueClient")
.setProjectKey("org.sonar.Sonar")
.setRuleKey(RuleKey.of("squid", "AvoidCycle"))
- .setCreationDate(DateUtils.parseDateTime("2014-01-22T19:10:03+0100"));
- when(i18n.formatDateTime(any(Locale.class), eq(issue.creationDate()))).thenReturn("Jan 22, 2014 10:03 AM");
- when(i18n.message(any(Locale.class), eq("created"), eq((String) null))).thenReturn("Created");
- return issue;
+ .setCreationDate(issue_creation_date);
+ }
+
+ private void addComponentAndProject(){
+ Component component = mock(Component.class);
+ when(component.key()).thenReturn("org.sonar.server.issue.IssueClient");
+ when(component.longName()).thenReturn("SonarQube :: Issue Client");
+ when(component.qualifier()).thenReturn("FIL");
+ result.addComponents(newArrayList(component));
+
+ Component project = mock(Component.class);
+ when(project.key()).thenReturn("org.sonar.Sonar");
+ when(project.longName()).thenReturn("SonarQube");
+ result.addProjects(newArrayList(project));
}
}