}
/**
- * Returns true if at least one user is subscribed to at least one notifications with given types.
- * Subscription can be globally or on the specific project.
+ * Returns true if at least one user is subscribed to at least one notification with given types.
+ * Subscription can be global or on the specific project.
*/
public boolean hasProjectSubscribersForTypes(String projectUuid, Set<String> notificationTypes) {
Collection<String> dispatcherKeys = new ArrayList<>();
private IssueDto doSaveIssue(DbSession session, DefaultIssue issue, IssueChangeContext context, @Nullable String comment,
Optional<RuleDefinitionDto> rule, ComponentDto project, ComponentDto component) {
- IssueDto issueDto = issueStorage.save(session, issue);
+ IssueDto issueDto = issueStorage.save(session, singletonList(issue)).iterator().next();
if (issue.type() != RuleType.SECURITY_HOTSPOT) {
String assigneeUuid = issue.assignee();
UserDto assignee = assigneeUuid == null ? null : dbClient.userDao().selectByUuid(session, assigneeUuid);
return dbClient;
}
- public void save(DefaultIssue issue) {
- save(newArrayList(issue));
- }
-
- public IssueDto save(DbSession session, DefaultIssue issue) {
- return doSave(session, newArrayList(issue)).iterator().next();
- }
-
- public Collection<IssueDto> save(Iterable<DefaultIssue> issues) {
- try (DbSession session = dbClient.openSession(true)) {
- return doSave(session, issues);
- }
- }
-
- private Collection<IssueDto> doSave(DbSession dbSession, Iterable<DefaultIssue> issues) {
+ public Collection<IssueDto> save(DbSession dbSession, Iterable<DefaultIssue> issues) {
// Batch session can not be used for updates. It does not return the number of updated rows,
// required for detecting conflicts.
long now = system2.now();
List<DefaultIssue> items = bulkChangeData.issues.stream()
.filter(bulkChange(issueChangeContext, bulkChangeData, result))
.collect(MoreCollectors.toList());
- issueStorage.save(items);
+ issueStorage.save(dbSession, items);
refreshLiveMeasures(dbSession, bulkChangeData, result);
import org.sonar.db.rule.RuleDefinitionDto;
import org.sonar.server.issue.index.IssueIndexer;
+import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
private WebIssueStorage underTest = new WebIssueStorage(system2, dbClient, new FakeRuleFinder(), mock(IssueIndexer.class));
@Before
- public void setupDbClient() {
- when(system2.now()).thenReturn(2000000000L);
+ public void setup() {
+ when(system2.now()).thenReturn(2_000_000_000L);
}
@Test
.setUpdateDate(date)
.setCloseDate(date);
- underTest.save(issue);
+ underTest.save(db.getSession(), singletonList(issue));
assertThat(db.countRowsOfTable("issues")).isEqualTo(1);
assertThat(db.selectFirst("select * from issues"))
.setUpdateDate(date)
.setCloseDate(date);
- underTest.save(issue);
+ underTest.save(db.getSession(), singletonList(issue));
assertThat(db.countRowsOfTable("issues")).isEqualTo(1);
assertThat(db.countRowsOfTable("issue_changes")).isEqualTo(0);
.setComponentKey("struts:Action")
.setProjectKey("struts");
- underTest.save(updated);
+ underTest.save(db.getSession(), singletonList(updated));
assertThat(db.countRowsOfTable("issues")).isEqualTo(1);
assertThat(db.selectFirst("select * from issues"))
.containsExactlyInAnyOrder("severity=INFO|BLOCKER", "diff", "user_uuid");
}
- static class FakeRuleFinder implements RuleFinder {
+ private static class FakeRuleFinder implements RuleFinder {
@Override
public Rule findById(int ruleId) {