@Override public Function.Context setCloseDate() { updater.setCloseDate(issue, changeContext.date(), changeContext); return this; }
@Test public void test_end_user_context() { Date now = new Date(); IssueChangeContext context = IssueChangeContext.createUser(now, "user_uuid"); assertThat(context.scan()).isFalse(); assertThat(context.userUuid()).isEqualTo("user_uuid"); assertThat(context.date()).isEqualTo(now); } }
@Test public void test_scan_context() { Date now = new Date(); IssueChangeContext context = IssueChangeContext.createScan(now); assertThat(context.scan()).isTrue(); assertThat(context.userUuid()).isNull(); assertThat(context.date()).isEqualTo(now); }
public DefaultIssue setFieldChange(IssueChangeContext context, String field, @Nullable Serializable oldValue, @Nullable Serializable newValue) { if (!Objects.equals(oldValue, newValue)) { if (currentChange == null) { currentChange = new FieldDiffs(); currentChange.setUserUuid(context.userUuid()); currentChange.setCreationDate(context.date()); } currentChange.setDiff(field, oldValue, newValue); } addChange(currentChange); return this; }
private BulkChangeResult executeBulkChange(DbSession dbSession, Request request) { BulkChangeData bulkChangeData = new BulkChangeData(dbSession, request); BulkChangeResult result = new BulkChangeResult(bulkChangeData.issues.size()); IssueChangeContext issueChangeContext = IssueChangeContext.createUser(new Date(system2.now()), userSession.getUuid()); List<DefaultIssue> items = bulkChangeData.issues.stream() .filter(bulkChange(issueChangeContext, bulkChangeData, result)) .collect(MoreCollectors.toList()); issueStorage.save(dbSession, items); refreshLiveMeasures(dbSession, bulkChangeData, result); Set<String> assigneeUuids = items.stream().map(DefaultIssue::assignee).filter(Objects::nonNull).collect(toSet()); Map<String, UserDto> userDtoByUuid = dbClient.userDao().selectByUuids(dbSession, assigneeUuids).stream().collect(toMap(UserDto::getUuid, u -> u)); String authorUuid = requireNonNull(userSession.getUuid(), "User uuid cannot be null"); UserDto author = dbClient.userDao().selectByUuid(dbSession, authorUuid); checkState(author != null, "User with uuid '%s' does not exist"); items.forEach(sendNotification(bulkChangeData, userDtoByUuid, author)); return result; }
@Test public void onIssue_update_component_and_module_fields_to_component_and_flag_issue_has_changed() { MovedFilesRepository.OriginalFile originalFile = new MovedFilesRepository.OriginalFile(6451, "original uuid", "original key"); DefaultIssue issue = mockIssue(originalFile.getUuid()); when(movedFilesRepository.getOriginalFile(FILE)) .thenReturn(Optional.of(originalFile)); underTest.onIssue(FILE, issue); verify(issue).setComponentUuid(FILE.getUuid()); verify(issue).setComponentKey(FILE.getKey()); verify(issue).setModuleUuid(null); verify(issue).setModuleUuidPath(null); verify(issue).setChanged(true); ArgumentCaptor<IssueChangeContext> issueChangeContextCaptor = ArgumentCaptor.forClass(IssueChangeContext.class); verify(issue).setFieldChange(issueChangeContextCaptor.capture(), eq("file"), eq(originalFile.getUuid()), eq(FILE.getUuid())); assertThat(issueChangeContextCaptor.getValue().date()).isEqualTo(new Date(ANALYSIS_DATE)); assertThat(issueChangeContextCaptor.getValue().userUuid()).isNull(); assertThat(issueChangeContextCaptor.getValue().scan()).isFalse(); }
public IssueAssigner(AnalysisMetadataHolder analysisMetadataHolder, ScmInfoRepository scmInfoRepository, ScmAccountToUser scmAccountToUser, DefaultAssignee defaultAssignee, IssueFieldsSetter issueUpdater) { this.scmInfoRepository = scmInfoRepository; this.scmAccountToUser = scmAccountToUser; this.defaultAssignee = defaultAssignee; this.issueUpdater = issueUpdater; this.changeContext = createScan(new Date(analysisMetadataHolder.getAnalysisDate())); }
private IssueDto doSaveIssue(DbSession session, DefaultIssue issue, IssueChangeContext context, @Nullable String comment, Optional<RuleDefinitionDto> rule, ComponentDto project, ComponentDto component) { 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); String authorUuid = context.userUuid(); UserDto author = authorUuid == null ? null : dbClient.userDao().selectByUuid(session, authorUuid); notificationService.scheduleForSending(new IssueChangeNotification() .setIssue(issue) .setAssignee(assignee) .setChangeAuthor(author) .setRuleName(rule.map(RuleDefinitionDto::getName).orElse(null)) .setProject(project) .setComponent(component) .setComment(comment)); } return issueDto; }
public static IssueChangeContext createScan(Date date) { return new IssueChangeContext(null, date, true); }
@Before public void setUp() throws Exception { workflow.start(); when(context.issue()).thenReturn(issue); when(context.issueChangeContext()).thenReturn(IssueChangeContext.createUser(new Date(), "user_uuid")); }
public IssueCreationDateCalculator(AnalysisMetadataHolder analysisMetadataHolder, ScmInfoRepository scmInfoRepository, IssueFieldsSetter issueUpdater, ActiveRulesHolder activeRulesHolder, RuleRepository ruleRepository, AddedFileRepository addedFileRepository, QProfileStatusRepository qProfileStatusRepository) { this.scmInfoRepository = scmInfoRepository; this.issueUpdater = issueUpdater; this.analysisMetadataHolder = analysisMetadataHolder; this.ruleRepository = ruleRepository; this.changeContext = createScan(new Date(analysisMetadataHolder.getAnalysisDate())); this.activeRulesHolder = activeRulesHolder; this.addedFileRepository = addedFileRepository; this.qProfileStatusRepository = qProfileStatusRepository; }
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); String assigneeUuid = issue.assignee(); UserDto assignee = assigneeUuid == null ? null : dbClient.userDao().selectByUuid(session, assigneeUuid); String authorUuid = context.userUuid(); UserDto author = authorUuid == null ? null : dbClient.userDao().selectByUuid(session, authorUuid); notificationService.scheduleForSending(new IssueChangeNotification() .setIssue(issue) .setAssignee(assignee) .setChangeAuthor(author) .setRuleName(rule.map(RuleDefinitionDto::getName).orElse(null)) .setProject(project) .setComponent(component) .setComment(comment)); return issueDto; }
public static IssueChangeContext createUser(Date date, @Nullable String userUuid) { return new IssueChangeContext(userUuid, date, false); }
public boolean setMessage(DefaultIssue issue, @Nullable String s, IssueChangeContext context) { if (!Objects.equals(s, issue.message())) { issue.setMessage(s); issue.setUpdateDate(context.date()); issue.setChanged(true); return true; } return false; }
public DefaultIssue setFieldChange(IssueChangeContext context, String field, @Nullable Serializable oldValue, @Nullable Serializable newValue) { if (!Objects.equals(oldValue, newValue)) { if (currentChange == null) { currentChange = new FieldDiffs(); currentChange.setUserUuid(context.userUuid()); currentChange.setCreationDate(context.date()); } currentChange.setDiff(field, oldValue, newValue); } addChange(currentChange); return this; }
private SearchResponseData doTransition(DbSession session, IssueDto issueDto, String transitionKey) { DefaultIssue defaultIssue = issueDto.toDefaultIssue(); IssueChangeContext context = IssueChangeContext.createUser(new Date(system2.now()), userSession.getUuid()); transitionService.checkTransitionPermission(transitionKey, defaultIssue); if (transitionService.doTransition(defaultIssue, context, transitionKey)) { return issueUpdater.saveIssueAndPreloadSearchResponseData(session, defaultIssue, context, null, true); } return new SearchResponseData(issueDto); } }
public IssueLifecycle(AnalysisMetadataHolder analysisMetadataHolder, IssueWorkflow workflow, IssueFieldsSetter updater, DebtCalculator debtCalculator, RuleRepository ruleRepository) { this(analysisMetadataHolder, IssueChangeContext.createScan(new Date(analysisMetadataHolder.getAnalysisDate())), workflow, updater, debtCalculator, ruleRepository); }
public static IssueChangeContext createScan(Date date) { return new IssueChangeContext(null, date, true); }
public boolean setGap(DefaultIssue issue, @Nullable Double d, IssueChangeContext context) { if (!Objects.equals(d, issue.gap())) { issue.setGap(d); issue.setUpdateDate(context.date()); issue.setChanged(true); // Do not send notifications to prevent spam when installing the SQALE plugin, // and do not complete the changelog (for the moment) return true; } return false; }