import org.sonar.server.search.QueryContext;
import org.sonar.server.search.Result;
import org.sonar.server.search.ws.SearchRequestHandler;
-import org.sonar.server.source.SourceService;
-import org.sonar.server.source.ws.ScmWriter;
import org.sonar.server.user.UserSession;
import javax.annotation.CheckForNull;
private final UserFinder userFinder;
private final I18n i18n;
private final Durations durations;
- private final SourceService sourceService;
- private final ScmWriter scmWriter;
public SearchAction(DbClient dbClient, IssueChangeDao issueChangeDao, IssueService service, IssueActionsWriter actionsWriter, IssueQueryService issueQueryService,
- RuleService ruleService, ActionPlanService actionPlanService, UserFinder userFinder, I18n i18n, Durations durations, SourceService sourceService, ScmWriter scmWriter) {
+ RuleService ruleService, ActionPlanService actionPlanService, UserFinder userFinder, I18n i18n, Durations durations) {
super(SEARCH_ACTION);
this.dbClient = dbClient;
this.issueChangeDao = issueChangeDao;
this.userFinder = userFinder;
this.i18n = i18n;
this.durations = durations;
- this.sourceService = sourceService;
- this.scmWriter = scmWriter;
}
@Override
.prop("fUpdateAge", formatAgeDate(updateDate))
.prop("closeDate", isoDate(issue.closeDate()));
- writeIssueSnippet(issue, file, json);
writeIssueComments(commentsByIssues.get(issue.key()), usersByLogin, json);
writeIssueAttributes(issue, json);
writeIssueExtraFields(issue, project != null ? project.getKey() : null, usersByLogin, actionPlanByKeys, extraFields, json);
json.endArray();
}
- private void writeIssueSnippet(Issue issue, @Nullable ComponentDto file, JsonWriter json) {
- Integer lineNumber = issue.line();
- if (lineNumber == null || file == null) {
- return;
- }
-
- String componentKey = file.key();
- int from = Math.max(lineNumber - 1, 1);
- int to = from + 2;
- int lineCounter = from;
- List<String> lines = sourceService.getLinesAsHtml(componentKey, from, to);
- if (lines != null) {
- json.name("sources").beginArray();
- for (String line : lines) {
- json.beginArray().value(lineCounter).value(line).endArray();
- lineCounter++;
- }
- json.endArray();
- String scmAuthorData = sourceService.getScmAuthorData(componentKey);
- String scmDateData = sourceService.getScmDateData(componentKey);
- scmWriter.write(scmAuthorData, scmDateData, from, to, true, json);
- }
- }
-
private void writeIssueComments(Collection<DefaultIssueComment> issueComments, Map<String, User> usersByLogin, JsonWriter json) {
if (!issueComments.isEmpty()) {
json.name("comments").beginArray();
import org.sonar.server.rule.Rule;
import org.sonar.server.rule.RuleService;
import org.sonar.server.source.SourceService;
-import org.sonar.server.source.ws.ScmWriter;
import org.sonar.server.user.MockUserSession;
import org.sonar.server.user.UserSession;
import org.sonar.server.ws.WsTester;
new IssueActionsWriter(issueService, actionService), actionPlanService, userFinder, debtModel, ruleService, i18n, durations),
new SearchAction(mock(DbClient.class), mock(IssueChangeDao.class), mock(IssueService.class), mock(IssueActionsWriter.class), mock(IssueQueryService.class),
mock(RuleService.class),
- mock(ActionPlanService.class), mock(UserFinder.class), mock(I18n.class), mock(Durations.class), mock(SourceService.class), mock(ScmWriter.class))));
+ mock(ActionPlanService.class), mock(UserFinder.class), mock(I18n.class), mock(Durations.class))));
}
@Test
import org.sonar.server.issue.IssueService;
import org.sonar.server.issue.actionplan.ActionPlanService;
import org.sonar.server.rule.RuleService;
-import org.sonar.server.source.SourceService;
-import org.sonar.server.source.ws.ScmWriter;
import org.sonar.server.ws.WsTester;
import static org.fest.assertions.Assertions.assertThat;
debtModelService, mock(RuleService.class), i18n, durations);
SearchAction searchAction = new SearchAction(mock(DbClient.class), mock(IssueChangeDao.class), mock(IssueService.class), mock(IssueActionsWriter.class),
mock(IssueQueryService.class), mock(RuleService.class),
- mock(ActionPlanService.class), mock(UserFinder.class), mock(I18n.class), mock(Durations.class), mock(SourceService.class), mock(ScmWriter.class));
+ mock(ActionPlanService.class), mock(UserFinder.class), mock(I18n.class), mock(Durations.class));
tester = new WsTester(new IssuesWs(showAction, searchAction));
}
result.assertJson(this.getClass(), "default_page_size_is_100.json", false);
}
- @Test
- public void issue_on_line() throws Exception {
- db.userDao().insert(session, new UserDto().setLogin("simon").setName("Simon").setEmail("simon@email.com"));
- db.userDao().insert(session, new UserDto().setLogin("fabrice").setName("Fabrice").setEmail("fabrice@email.com"));
-
- IssueDto issue = IssueTesting.newDto(rule, file, project)
- .setLine(3)
- .setRule(rule)
- .setDebt(10L)
- .setProject(project)
- .setComponent(file)
- .setStatus("OPEN").setResolution("OPEN")
- .setKee("82fd47d4-b650-4037-80bc-7b112bd4eac2")
- .setSeverity("MAJOR")
- .setAuthorLogin("John")
- .setAssignee("simon")
- .setReporter("fabrice")
- .setIssueCreationDate(DateUtils.parseDate("2014-09-04"))
- .setIssueUpdateDate(DateUtils.parseDate("2014-12-04"));
- db.issueDao().insert(session, issue);
- session.commit();
-
- WsTester.Result result = wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION).execute();
- // TODO date assertion is complex to test, and components id are not predictable, that's why strict boolean is set to false
- result.assertJson(this.getClass(), "issue_with_snippet.json", false);
- }
-
}