@CheckForNull public Long effortInMinutes() { return effort != null ? effort.toMinutes() : null; }
/** * Return the formatted work duration using the english bundles. * <br> * Example : format(Duration.encode("9d 10h")) -> 10d 2h * */ public String format(Duration duration) { Long durationInMinutes = duration.toMinutes(); if (durationInMinutes == 0) { return "0"; } boolean isNegative = durationInMinutes < 0; Long absDuration = Math.abs(durationInMinutes); int days = ((Double) ((double) absDuration / HOURS_IN_DAY / 60)).intValue(); Long remainingDuration = absDuration - (days * HOURS_IN_DAY * 60); int hours = ((Double) (remainingDuration.doubleValue() / 60)).intValue(); remainingDuration = remainingDuration - (hours * 60); int minutes = remainingDuration.intValue(); return format(days, hours, minutes, isNegative); }
public boolean setEffort(DefaultIssue issue, @Nullable Duration value, IssueChangeContext context) { Duration oldValue = issue.effort(); if (!Objects.equals(value, oldValue)) { issue.setEffort(value); issue.setFieldChange(context, TECHNICAL_DEBT, oldValue != null ? oldValue.toMinutes() : null, value != null ? value.toMinutes() : null); issue.setUpdateDate(context.date()); issue.setChanged(true); return true; } return false; }
@Test public void create_from_minutes() { assertThat(underTest.create(10L).toMinutes()).isEqualTo(10L); }
@Test public void create_from_duration_in_minutes() { Duration duration = Duration.create(ONE_DAY_IN_MINUTES + ONE_HOUR_IN_MINUTES + ONE_MINUTE); assertThat(duration.toMinutes()).isEqualTo(ONE_DAY_IN_MINUTES + ONE_HOUR_IN_MINUTES + ONE_MINUTE); }
public void add(DefaultIssue issue) { boolean isOnLeak = onLeakPredicate.test(issue); distributions.get(RULE_TYPE).increment(issue.type().name(), isOnLeak); String componentUuid = issue.componentUuid(); if (componentUuid != null) { distributions.get(COMPONENT).increment(componentUuid, isOnLeak); } RuleKey ruleKey = issue.ruleKey(); if (ruleKey != null) { distributions.get(RULE).increment(ruleKey.toString(), isOnLeak); } String assigneeUuid = issue.assignee(); if (assigneeUuid != null) { distributions.get(ASSIGNEE).increment(assigneeUuid, isOnLeak); } for (String tag : issue.tags()) { distributions.get(TAG).increment(tag, isOnLeak); } Duration effort = issue.effort(); if (effort != null) { effortStats.add(effort.toMinutes(), isOnLeak); } }
@Test public void default_effort_to_fix_is_one_for_linear_function() { int coefficient = 2; rule.setFunction(new DefaultDebtRemediationFunction(DebtRemediationFunction.Type.LINEAR, coefficient + "min", null)); assertThat(underTest.calculate(issue).toMinutes()).isEqualTo(coefficient * 1); }
@Test public void linear_function() { double effortToFix = 3.0; int coefficient = 2; issue.setGap(effortToFix); rule.setFunction(new DefaultDebtRemediationFunction(DebtRemediationFunction.Type.LINEAR, coefficient + "min", null)); assertThat(underTest.calculate(issue).toMinutes()).isEqualTo((int) (coefficient * effortToFix)); }
@Test public void constant_function() { int constant = 2; issue.setGap(null); rule.setFunction(new DefaultDebtRemediationFunction(DebtRemediationFunction.Type.CONSTANT_ISSUE, null, constant + "min")); assertThat(underTest.calculate(issue).toMinutes()).isEqualTo(2); }
@Test public void linear_with_offset_function() { double effortToFix = 3.0; int coefficient = 2; int offset = 5; issue.setGap(effortToFix); rule.setFunction(new DefaultDebtRemediationFunction( DebtRemediationFunction.Type.LINEAR_OFFSET, coefficient + "min", offset + "min")); assertThat(underTest.calculate(issue).toMinutes()).isEqualTo((int) ((coefficient * effortToFix) + offset)); } }
@Test public void iterator_over_one_issue() { dbTester.prepareDbUnit(getClass(), "one_issue.xml"); Map<String, IssueDoc> issuesByKey = issuesByKey(); assertThat(issuesByKey).hasSize(1); IssueDoc issue = issuesByKey.get("ABC"); assertThat(issue.key()).isEqualTo("ABC"); assertThat(issue.resolution()).isEqualTo("FIXED"); assertThat(issue.status()).isEqualTo("RESOLVED"); assertThat(issue.severity()).isEqualTo("BLOCKER"); assertThat(issue.assigneeUuid()).isEqualTo("uuid-of-guy1"); assertThat(issue.authorLogin()).isEqualTo("guy2"); assertThat(issue.line()).isEqualTo(444); assertThat(issue.ruleId()).isEqualTo(200); assertThat(issue.componentUuid()).isEqualTo("FILE1"); assertThat(issue.projectUuid()).isEqualTo("PROJECT1"); assertThat(issue.moduleUuid()).isEqualTo("PROJECT1"); assertThat(issue.modulePath()).isEqualTo(".PROJECT1."); assertThat(issue.directoryPath()).isEqualTo("src/main/java"); assertThat(issue.filePath()).isEqualTo("src/main/java/Action.java"); assertThat(issue.getTags()).containsOnly("tag1", "tag2", "tag3"); assertThat(issue.effort().toMinutes()).isGreaterThan(0L); assertThat(issue.type().getDbConstant()).isEqualTo(2); }
@Test public void copy_effort_for_external_issues() { issue.setGap(null); issue.setIsFromExternalRuleEngine(true); issue.setEffort(Duration.create(20l)); rule.setFunction(null); assertThat(underTest.calculate(issue).toMinutes()).isEqualTo(20l); }
assertThat(issue.filePath()).isEqualTo("src/main/java/Action.java"); assertThat(issue.getTags()).containsOnly("tag1", "tag2", "tag3"); assertThat(issue.effort().toMinutes()).isGreaterThan(0L); assertThat(issue.type().getDbConstant()).isEqualTo(1); assertThat(issue.filePath()).isNull(); assertThat(issue.getTags()).containsOnly("tag1", "tag2", "tag3"); assertThat(issue.effort().toMinutes()).isGreaterThan(0L); assertThat(issue.type().getDbConstant()).isEqualTo(2); assertThat(issue.filePath()).isEqualTo("src/main/java/Action.java"); assertThat(issue.getTags()).isEmpty(); assertThat(issue.effort().toMinutes()).isGreaterThan(0L); assertThat(issue.type().getDbConstant()).isEqualTo(1); assertThat(issue.filePath()).isEqualTo("src/main/java"); assertThat(issue.getTags()).isEmpty(); assertThat(issue.effort().toMinutes()).isGreaterThan(0L); assertThat(issue.type().getDbConstant()).isEqualTo(1);
@CheckForNull public Long debtInMinutes() { return debt != null ? debt.toMinutes() : null; }
@CheckForNull public Long effortInMinutes() { return effort != null ? effort.toMinutes() : null; }
public boolean setEffort(DefaultIssue issue, @Nullable Duration value, IssueChangeContext context) { Duration oldValue = issue.effort(); if (!Objects.equals(value, oldValue)) { issue.setEffort(value); issue.setFieldChange(context, TECHNICAL_DEBT, oldValue != null ? oldValue.toMinutes() : null, value != null ? value.toMinutes() : null); issue.setUpdateDate(context.date()); issue.setChanged(true); return true; } return false; }