public void setCloseDate(DefaultIssue issue, @Nullable Date d, IssueChangeContext context) { if (relevantDateDifference(d, issue.closeDate())) { issue.setCloseDate(d); issue.setUpdateDate(context.date()); issue.setChanged(true); } }
@Test @UseDataProvider("allResolutionsBeforeClosing") public void automatically_reopen_closed_issue_to_previous_resolution_from_changelog(String resolutionBeforeClosed) { String randomPreviousStatus = ALL_STATUSES_LEADING_TO_CLOSED[new Random().nextInt(ALL_STATUSES_LEADING_TO_CLOSED.length)]; DefaultIssue[] issues = Arrays.stream(SUPPORTED_RESOLUTIONS_FOR_UNCLOSING) .map(resolution -> { DefaultIssue issue = newClosedIssue(resolution); addResolutionAndStatusChange(issue, new Date(), randomPreviousStatus, STATUS_CLOSED, resolutionBeforeClosed, resolution); return issue; }) .toArray(DefaultIssue[]::new); Date now = new Date(); workflow.start(); Arrays.stream(issues).forEach(issue -> { workflow.doAutomaticTransition(issue, IssueChangeContext.createScan(now)); assertThat(issue.status()).isEqualTo(randomPreviousStatus); assertThat(issue.resolution()).isEqualTo(resolutionBeforeClosed); assertThat(issue.updateDate()).isEqualTo(DateUtils.truncate(now, Calendar.SECOND)); assertThat(issue.closeDate()).isNull(); assertThat(issue.isChanged()).isTrue(); }); }
@Test public void automatically_reopen_closed_issue_to_no_resolution_if_no_previous_one_changelog() { String randomPreviousStatus = ALL_STATUSES_LEADING_TO_CLOSED[new Random().nextInt(ALL_STATUSES_LEADING_TO_CLOSED.length)]; DefaultIssue[] issues = Arrays.stream(SUPPORTED_RESOLUTIONS_FOR_UNCLOSING) .map(resolution -> { DefaultIssue issue = newClosedIssue(resolution); setStatusPreviousToClosed(issue, randomPreviousStatus); return issue; }) .toArray(DefaultIssue[]::new); Date now = new Date(); workflow.start(); Arrays.stream(issues).forEach(issue -> { workflow.doAutomaticTransition(issue, IssueChangeContext.createScan(now)); assertThat(issue.status()).isEqualTo(randomPreviousStatus); assertThat(issue.resolution()).isNull(); assertThat(issue.updateDate()).isEqualTo(DateUtils.truncate(now, Calendar.SECOND)); assertThat(issue.closeDate()).isNull(); assertThat(issue.isChanged()).isTrue(); }); }
@Test @UseDataProvider("allStatusesLeadingToClosed") public void automatically_reopen_closed_issue_to_its_previous_status_from_changelog(String previousStatus) { DefaultIssue[] issues = Arrays.stream(SUPPORTED_RESOLUTIONS_FOR_UNCLOSING) .map(resolution -> { DefaultIssue issue = newClosedIssue(resolution); setStatusPreviousToClosed(issue, previousStatus); return issue; }) .toArray(DefaultIssue[]::new); Date now = new Date(); workflow.start(); Arrays.stream(issues).forEach(issue -> { workflow.doAutomaticTransition(issue, IssueChangeContext.createScan(now)); assertThat(issue.status()).isEqualTo(previousStatus); assertThat(issue.updateDate()).isEqualTo(DateUtils.truncate(now, Calendar.SECOND)); assertThat(issue.closeDate()).isNull(); assertThat(issue.isChanged()).isTrue(); }); }
@Test @UseDataProvider("allResolutionsBeforeClosing") public void automatically_reopen_closed_issue_to_previous_resolution_of_closing_the_issue_if_most_recent_of_all_resolution_changes(String resolutionBeforeClosed) { String randomPreviousStatus = ALL_STATUSES_LEADING_TO_CLOSED[new Random().nextInt(ALL_STATUSES_LEADING_TO_CLOSED.length)]; DefaultIssue[] issues = Arrays.stream(SUPPORTED_RESOLUTIONS_FOR_UNCLOSING) .map(resolution -> { DefaultIssue issue = newClosedIssue(resolution); Date now = new Date(); addResolutionChange(issue, addDays(now, -60), null, RESOLUTION_FALSE_POSITIVE); addResolutionChange(issue, addDays(now, -10), RESOLUTION_FALSE_POSITIVE, resolutionBeforeClosed); addResolutionAndStatusChange(issue, now, randomPreviousStatus, STATUS_CLOSED, resolutionBeforeClosed, resolution); return issue; }) .toArray(DefaultIssue[]::new); Date now = new Date(); workflow.start(); Arrays.stream(issues).forEach(issue -> { workflow.doAutomaticTransition(issue, IssueChangeContext.createScan(now)); assertThat(issue.status()).isEqualTo(randomPreviousStatus); assertThat(issue.resolution()).isEqualTo(resolutionBeforeClosed); assertThat(issue.updateDate()).isEqualTo(DateUtils.truncate(now, Calendar.SECOND)); assertThat(issue.closeDate()).isNull(); assertThat(issue.isChanged()).isTrue(); }); }
@Test @UseDataProvider("allStatusesLeadingToClosed") public void automatically_reopen_closed_issue_to_most_recent_previous_status_from_changelog(String previousStatus) { DefaultIssue[] issues = Arrays.stream(SUPPORTED_RESOLUTIONS_FOR_UNCLOSING) .map(resolution -> { DefaultIssue issue = newClosedIssue(resolution); Date now = new Date(); addStatusChange(issue, addDays(now, -60), STATUS_OPEN, STATUS_CONFIRMED); addStatusChange(issue, addDays(now, -10), STATUS_CONFIRMED, previousStatus); setStatusPreviousToClosed(issue, previousStatus); return issue; }) .toArray(DefaultIssue[]::new); Date now = new Date(); workflow.start(); Arrays.stream(issues).forEach(issue -> { workflow.doAutomaticTransition(issue, IssueChangeContext.createScan(now)); assertThat(issue.status()).isEqualTo(previousStatus); assertThat(issue.updateDate()).isEqualTo(DateUtils.truncate(now, Calendar.SECOND)); assertThat(issue.closeDate()).isNull(); assertThat(issue.isChanged()).isTrue(); }); }
@Test public void set_empty_dates() { issue .setCreationDate(null) .setUpdateDate(null) .setCloseDate(null) .setSelectedAt(null); assertThat(issue.creationDate()).isNull(); assertThat(issue.updateDate()).isNull(); assertThat(issue.closeDate()).isNull(); assertThat(issue.selectedAt()).isNull(); }
@Test public void close_open_dead_issue() { workflow.start(); DefaultIssue issue = new DefaultIssue() .setKey("ABCDE") .setResolution(null) .setStatus(STATUS_OPEN) .setNew(false) .setBeingClosed(true); Date now = new Date(); workflow.doAutomaticTransition(issue, IssueChangeContext.createScan(now)); assertThat(issue.resolution()).isEqualTo(RESOLUTION_FIXED); assertThat(issue.status()).isEqualTo(STATUS_CLOSED); assertThat(issue.closeDate()).isNotNull(); assertThat(issue.updateDate()).isEqualTo(DateUtils.truncate(now, Calendar.SECOND)); }
@Test public void close_reopened_dead_issue() { workflow.start(); DefaultIssue issue = new DefaultIssue() .setKey("ABCDE") .setResolution(null) .setStatus(STATUS_REOPENED) .setNew(false) .setBeingClosed(true); Date now = new Date(); workflow.doAutomaticTransition(issue, IssueChangeContext.createScan(now)); assertThat(issue.resolution()).isEqualTo(RESOLUTION_FIXED); assertThat(issue.status()).isEqualTo(STATUS_CLOSED); assertThat(issue.closeDate()).isNotNull(); assertThat(issue.updateDate()).isEqualTo(DateUtils.truncate(now, Calendar.SECOND)); }
@Test public void close_confirmed_dead_issue() { workflow.start(); DefaultIssue issue = new DefaultIssue() .setKey("ABCDE") .setResolution(null) .setStatus(STATUS_CONFIRMED) .setNew(false) .setBeingClosed(true); Date now = new Date(); workflow.doAutomaticTransition(issue, IssueChangeContext.createScan(now)); assertThat(issue.resolution()).isEqualTo(RESOLUTION_FIXED); assertThat(issue.status()).isEqualTo(STATUS_CLOSED); assertThat(issue.closeDate()).isNotNull(); assertThat(issue.updateDate()).isEqualTo(DateUtils.truncate(now, Calendar.SECOND)); }
@Test public void automatically_close_resolved_issue() { workflow.start(); DefaultIssue issue = new DefaultIssue() .setKey("ABCDE") .setRuleKey(RuleKey.of("js", "S001")) .setResolution(RESOLUTION_FIXED) .setStatus(STATUS_RESOLVED) .setNew(false) .setBeingClosed(true); Date now = new Date(); workflow.doAutomaticTransition(issue, IssueChangeContext.createScan(now)); assertThat(issue.resolution()).isEqualTo(RESOLUTION_FIXED); assertThat(issue.status()).isEqualTo(STATUS_CLOSED); assertThat(issue.closeDate()).isNotNull(); assertThat(issue.updateDate()).isEqualTo(DateUtils.truncate(now, Calendar.SECOND)); }
assertThat(issue.creationDate()).isEqualTo(new SimpleDateFormat("yyyy-MM-dd").parse("2013-08-19")); assertThat(issue.updateDate()).isEqualTo(new SimpleDateFormat("yyyy-MM-dd").parse("2013-08-20")); assertThat(issue.closeDate()).isEqualTo(new SimpleDateFormat("yyyy-MM-dd").parse("2013-08-21")); assertThat(issue.selectedAt()).isEqualTo(1400000000000L);
assertThat(issue.creationDate()).isEqualTo(DateUtils.truncate(createdAt, Calendar.SECOND)); assertThat(issue.updateDate()).isEqualTo(DateUtils.truncate(updatedAt, Calendar.SECOND)); assertThat(issue.closeDate()).isEqualTo(DateUtils.truncate(closedAt, Calendar.SECOND)); assertThat(issue.isNew()).isFalse();
private void copyFields(DefaultIssue toIssue, DefaultIssue fromIssue) { toIssue.setType(fromIssue.type()); toIssue.setCreationDate(fromIssue.creationDate()); toIssue.setUpdateDate(fromIssue.updateDate()); toIssue.setCloseDate(fromIssue.closeDate()); toIssue.setResolution(fromIssue.resolution()); toIssue.setStatus(fromIssue.status()); toIssue.setAssigneeUuid(fromIssue.assignee()); toIssue.setAuthorLogin(fromIssue.authorLogin()); toIssue.setTags(fromIssue.tags()); toIssue.setAttributes(fromIssue.attributes()); toIssue.setEffort(debtCalculator.calculate(toIssue)); toIssue.setOnDisabledRule(fromIssue.isOnDisabledRule()); toIssue.setSelectedAt(fromIssue.selectedAt()); } }
.setProjectKey(issue.projectKey()) .setIssueCreationDate(issue.creationDate()) .setIssueCloseDate(issue.closeDate()) .setIssueUpdateDate(issue.updateDate()) .setSelectedAt(issue.selectedAt())
.setAuthorLogin(issue.authorLogin()) .setIssueCreationDate(issue.creationDate()) .setIssueCloseDate(issue.closeDate()) .setIssueUpdateDate(issue.updateDate()) .setSelectedAt(issue.selectedAt())
public void setCloseDate(DefaultIssue issue, @Nullable Date d, IssueChangeContext context) { if (relevantDateDifference(d, issue.closeDate())) { issue.setCloseDate(d); issue.setUpdateDate(context.date()); issue.setChanged(true); } }
private void copyFields(DefaultIssue toIssue, DefaultIssue fromIssue) { toIssue.setType(fromIssue.type()); toIssue.setCreationDate(fromIssue.creationDate()); toIssue.setUpdateDate(fromIssue.updateDate()); toIssue.setCloseDate(fromIssue.closeDate()); toIssue.setResolution(fromIssue.resolution()); toIssue.setStatus(fromIssue.status()); toIssue.setAssigneeUuid(fromIssue.assignee()); toIssue.setAuthorLogin(fromIssue.authorLogin()); toIssue.setTags(fromIssue.tags()); toIssue.setAttributes(fromIssue.attributes()); toIssue.setEffort(debtCalculator.calculate(toIssue)); toIssue.setOnDisabledRule(fromIssue.isOnDisabledRule()); toIssue.setSelectedAt(fromIssue.selectedAt()); } }
.setProjectKey(issue.projectKey()) .setIssueCreationDate(issue.creationDate()) .setIssueCloseDate(issue.closeDate()) .setIssueUpdateDate(issue.updateDate()) .setSelectedAt(issue.selectedAt())