@@ -41,7 +41,6 @@ import org.sonar.api.measures.Measure; | |||
import org.sonar.api.measures.Metric; | |||
import org.sonar.api.resources.Resource; | |||
import org.sonar.api.test.IsMeasure; | |||
import org.sonar.api.utils.WorkDuration; | |||
import org.sonar.api.utils.WorkDurationFactory; | |||
import org.sonar.batch.components.Period; | |||
import org.sonar.batch.components.TimeMachineConfiguration; | |||
@@ -78,18 +77,16 @@ public class NewTechnicalDebtDecoratorTest { | |||
Date fiveDaysAgo; | |||
Date fourDaysAgo; | |||
WorkDuration oneDaysWorkDuration = WorkDuration.createFromValueAndUnit(1, WorkDuration.UNIT.DAYS, 8); | |||
WorkDuration twoDaysWorkDuration = WorkDuration.createFromValueAndUnit(2, WorkDuration.UNIT.DAYS, 8); | |||
WorkDuration fiveDaysWorkDuration = WorkDuration.createFromValueAndUnit(5, WorkDuration.UNIT.DAYS, 8); | |||
private static final int HOURS_IN_DAY = 8; | |||
long oneDays = 1 * 8 * 60 * 60; | |||
long twoDays = 2 * 8 * 60 * 60; | |||
long fiveDays = 5 * 8 * 60 * 60; | |||
long oneDay = 1 * HOURS_IN_DAY * 60 * 60L; | |||
long twoDays = 2 * HOURS_IN_DAY * 60 * 60L; | |||
long fiveDays = 5 * HOURS_IN_DAY * 60 * 60L; | |||
@Before | |||
public void setup() { | |||
Settings settings = new Settings(); | |||
settings.setProperty(CoreProperties.HOURS_IN_DAY, "8"); | |||
settings.setProperty(CoreProperties.HOURS_IN_DAY, HOURS_IN_DAY); | |||
ResourcePerspectives perspectives = mock(ResourcePerspectives.class); | |||
when(perspectives.as(Issuable.class, resource)).thenReturn(issuable); | |||
@@ -122,7 +119,7 @@ public class NewTechnicalDebtDecoratorTest { | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(twoDays).setChanges( | |||
newArrayList( | |||
// changelog created at is null because it has just been created on the current analysis | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(oneDaysWorkDuration), fromWorkDayDuration(twoDaysWorkDuration)).setCreationDate(null) | |||
new FieldDiffs().setDiff("technicalDebt", oneDay, twoDays).setCreationDate(null) | |||
) | |||
); | |||
when(issuable.issues()).thenReturn(newArrayList(issue)); | |||
@@ -137,8 +134,8 @@ public class NewTechnicalDebtDecoratorTest { | |||
public void save_on_one_issue_with_changelog() { | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(fiveDays).setChanges( | |||
newArrayList( | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(twoDaysWorkDuration), fromWorkDayDuration(fiveDaysWorkDuration)).setCreationDate(null), | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(oneDaysWorkDuration), fromWorkDayDuration(twoDaysWorkDuration)).setCreationDate(fourDaysAgo) | |||
new FieldDiffs().setDiff("technicalDebt", twoDays, fiveDays).setCreationDate(null), | |||
new FieldDiffs().setDiff("technicalDebt", oneDay, twoDays).setCreationDate(fourDaysAgo) | |||
) | |||
); | |||
when(issuable.issues()).thenReturn(newArrayList(issue)); | |||
@@ -151,10 +148,10 @@ public class NewTechnicalDebtDecoratorTest { | |||
@Test | |||
public void save_on_one_issue_with_changelog_only_in_the_past() { | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(oneDays).setChanges( | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(oneDay).setChanges( | |||
newArrayList( | |||
// Change before all periods | |||
new FieldDiffs().setDiff("technicalDebt", null, fromWorkDayDuration(oneDaysWorkDuration)).setCreationDate(elevenDaysAgo) | |||
new FieldDiffs().setDiff("technicalDebt", null, oneDay).setCreationDate(elevenDaysAgo) | |||
) | |||
); | |||
when(issuable.issues()).thenReturn(newArrayList(issue)); | |||
@@ -169,9 +166,9 @@ public class NewTechnicalDebtDecoratorTest { | |||
public void save_on_one_issue_with_changelog_having_null_value() { | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(fiveDays).setChanges( | |||
newArrayList( | |||
new FieldDiffs().setDiff("technicalDebt", null, fromWorkDayDuration(fiveDaysWorkDuration)).setCreationDate(null), | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(oneDaysWorkDuration), null).setCreationDate(fourDaysAgo), | |||
new FieldDiffs().setDiff("technicalDebt", null, fromWorkDayDuration(oneDaysWorkDuration)).setCreationDate(nineDaysAgo) | |||
new FieldDiffs().setDiff("technicalDebt", null, fiveDays).setCreationDate(null), | |||
new FieldDiffs().setDiff("technicalDebt", oneDay, null).setCreationDate(fourDaysAgo), | |||
new FieldDiffs().setDiff("technicalDebt", null, oneDay).setCreationDate(nineDaysAgo) | |||
) | |||
); | |||
when(issuable.issues()).thenReturn(newArrayList(issue)); | |||
@@ -188,9 +185,9 @@ public class NewTechnicalDebtDecoratorTest { | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(fiveDays).setChanges( | |||
newArrayList( | |||
new FieldDiffs().setDiff("technicalDebt", null, fromWorkDayDuration(fiveDaysWorkDuration)).setCreationDate(null), | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(oneDaysWorkDuration), null).setCreationDate(fourDaysAgo), | |||
new FieldDiffs().setDiff("technicalDebt", null, fromWorkDayDuration(oneDaysWorkDuration)).setCreationDate(nineDaysAgo) | |||
new FieldDiffs().setDiff("technicalDebt", null, fiveDays).setCreationDate(null), | |||
new FieldDiffs().setDiff("technicalDebt", oneDay, null).setCreationDate(fourDaysAgo), | |||
new FieldDiffs().setDiff("technicalDebt", null, oneDay).setCreationDate(nineDaysAgo) | |||
) | |||
); | |||
when(issuable.issues()).thenReturn(newArrayList(issue)); | |||
@@ -207,7 +204,7 @@ public class NewTechnicalDebtDecoratorTest { | |||
newArrayList( | |||
new FieldDiffs() | |||
.setDiff("actionPlan", "1.0", "1.1").setCreationDate(fourDaysAgo) | |||
.setDiff("technicalDebt", fromWorkDayDuration(oneDaysWorkDuration), fromWorkDayDuration(twoDaysWorkDuration)).setCreationDate(fourDaysAgo) | |||
.setDiff("technicalDebt", oneDay, twoDays).setCreationDate(fourDaysAgo) | |||
) | |||
); | |||
when(issuable.issues()).thenReturn(newArrayList(issue)); | |||
@@ -222,15 +219,15 @@ public class NewTechnicalDebtDecoratorTest { | |||
public void save_on_issues_with_changelog() { | |||
Issue issue1 = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(fiveDays).setChanges( | |||
newArrayList( | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(twoDaysWorkDuration), fromWorkDayDuration(fiveDaysWorkDuration)).setCreationDate(rightNow), | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(oneDaysWorkDuration), fromWorkDayDuration(twoDaysWorkDuration)).setCreationDate(fourDaysAgo), | |||
new FieldDiffs().setDiff("technicalDebt", null, fromWorkDayDuration(oneDaysWorkDuration)).setCreationDate(nineDaysAgo) | |||
new FieldDiffs().setDiff("technicalDebt", twoDays, fiveDays).setCreationDate(rightNow), | |||
new FieldDiffs().setDiff("technicalDebt", oneDay, twoDays).setCreationDate(fourDaysAgo), | |||
new FieldDiffs().setDiff("technicalDebt", null, oneDay).setCreationDate(nineDaysAgo) | |||
) | |||
); | |||
Issue issue2 = new DefaultIssue().setKey("B").setCreationDate(tenDaysAgo).setDebt(twoDays).setChanges( | |||
newArrayList( | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(oneDaysWorkDuration), fromWorkDayDuration(twoDaysWorkDuration)).setCreationDate(rightNow), | |||
new FieldDiffs().setDiff("technicalDebt", null, fromWorkDayDuration(oneDaysWorkDuration)).setCreationDate(nineDaysAgo) | |||
new FieldDiffs().setDiff("technicalDebt", oneDay, twoDays).setCreationDate(rightNow), | |||
new FieldDiffs().setDiff("technicalDebt", null, oneDay).setCreationDate(nineDaysAgo) | |||
) | |||
); | |||
when(issuable.issues()).thenReturn(newArrayList(issue1, issue2)); | |||
@@ -297,15 +294,15 @@ public class NewTechnicalDebtDecoratorTest { | |||
// issue1 and issue2 have changelog | |||
Issue issue1 = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(fiveDays).setChanges( | |||
newArrayList( | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(twoDaysWorkDuration), fromWorkDayDuration(fiveDaysWorkDuration)).setCreationDate(rightNow), | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(oneDaysWorkDuration), fromWorkDayDuration(twoDaysWorkDuration)).setCreationDate(fourDaysAgo), | |||
new FieldDiffs().setDiff("technicalDebt", null, fromWorkDayDuration(oneDaysWorkDuration)).setCreationDate(nineDaysAgo) | |||
new FieldDiffs().setDiff("technicalDebt", twoDays, fiveDays).setCreationDate(rightNow), | |||
new FieldDiffs().setDiff("technicalDebt", oneDay, twoDays).setCreationDate(fourDaysAgo), | |||
new FieldDiffs().setDiff("technicalDebt", null, oneDay).setCreationDate(nineDaysAgo) | |||
) | |||
); | |||
Issue issue2 = new DefaultIssue().setKey("B").setCreationDate(tenDaysAgo).setDebt(twoDays).setChanges( | |||
newArrayList( | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(oneDaysWorkDuration), fromWorkDayDuration(twoDaysWorkDuration)).setCreationDate(rightNow), | |||
new FieldDiffs().setDiff("technicalDebt", null, fromWorkDayDuration(oneDaysWorkDuration)).setCreationDate(nineDaysAgo) | |||
new FieldDiffs().setDiff("technicalDebt", oneDay, twoDays).setCreationDate(rightNow), | |||
new FieldDiffs().setDiff("technicalDebt", null, oneDay).setCreationDate(nineDaysAgo) | |||
) | |||
); | |||
@@ -338,10 +335,10 @@ public class NewTechnicalDebtDecoratorTest { | |||
*/ | |||
@Test | |||
public void not_return_negative_debt() { | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(oneDays).setChanges( | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(oneDay).setChanges( | |||
newArrayList( | |||
// changelog created at is null because it has just been created on the current analysis | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(twoDaysWorkDuration), fromWorkDayDuration(oneDaysWorkDuration)).setCreationDate(null) | |||
new FieldDiffs().setDiff("technicalDebt", twoDays, oneDay).setCreationDate(null) | |||
) | |||
); | |||
when(issuable.issues()).thenReturn(newArrayList(issue)); | |||
@@ -352,11 +349,7 @@ public class NewTechnicalDebtDecoratorTest { | |||
verify(context).saveMeasure(argThat(new IsVariationMeasure(CoreMetrics.NEW_TECHNICAL_DEBT, 0.0, 0.0))); | |||
} | |||
private Long fromWorkDayDuration(WorkDuration workDayDuration) { | |||
return workDayDuration.toLong(); | |||
} | |||
class IsVariationMeasure extends ArgumentMatcher<Measure> { | |||
Metric metric = null; | |||
Double var1 = null; |
@@ -123,7 +123,7 @@ public class IssueChangelogDebtCalculator implements BatchComponent { | |||
if (entry.getKey().equals(IssueUpdater.TECHNICAL_DEBT)) { | |||
Long newValue = entry.getValue().newValueLong(); | |||
if (newValue != null) { | |||
return workDurationFactory.createFromWorkingLong(newValue); | |||
return workDurationFactory.createFromSeconds(newValue); | |||
} | |||
} | |||
} | |||
@@ -136,7 +136,7 @@ public class IssueChangelogDebtCalculator implements BatchComponent { | |||
if (entry.getKey().equals(IssueUpdater.TECHNICAL_DEBT)) { | |||
Long value = entry.getValue().oldValueLong(); | |||
if (value != null) { | |||
return workDurationFactory.createFromWorkingLong(value); | |||
return workDurationFactory.createFromSeconds(value); | |||
} | |||
} | |||
} |
@@ -39,6 +39,7 @@ import static org.fest.assertions.Assertions.assertThat; | |||
public class IssueChangelogDebtCalculatorTest { | |||
private static final int HOURS_IN_DAY = 8; | |||
IssueChangelogDebtCalculator issueChangelogDebtCalculator; | |||
Date rightNow = new Date(); | |||
@@ -48,13 +49,9 @@ public class IssueChangelogDebtCalculatorTest { | |||
Date fiveDaysAgo = DateUtils.addDays(rightNow, -5); | |||
Date fourDaysAgo = DateUtils.addDays(rightNow, -4); | |||
WorkDuration oneDaysDebt = WorkDuration.createFromValueAndUnit(1, WorkDuration.UNIT.DAYS, HOURS_IN_DAY); | |||
WorkDuration twoDaysDebt = WorkDuration.createFromValueAndUnit(2, WorkDuration.UNIT.DAYS, HOURS_IN_DAY); | |||
WorkDuration fiveDaysDebt = WorkDuration.createFromValueAndUnit(5, WorkDuration.UNIT.DAYS, HOURS_IN_DAY); | |||
Long oneDaysDebtInSec = 1 * HOURS_IN_DAY * 60 * 60L; | |||
Long twoDaysDebtInSec = 2 * HOURS_IN_DAY * 60 * 60L; | |||
Long fiveDaysDebtInSec = 5 * HOURS_IN_DAY * 60 * 60L; | |||
long oneDay = 1 * HOURS_IN_DAY * 60 * 60L; | |||
long twoDays = 2 * HOURS_IN_DAY * 60 * 60L; | |||
long fiveDays = 5 * HOURS_IN_DAY * 60 * 60L; | |||
@Before | |||
public void setUp() throws Exception { | |||
@@ -66,10 +63,10 @@ public class IssueChangelogDebtCalculatorTest { | |||
@Test | |||
public void calculate_new_technical_debt_with_one_diff_in_changelog() throws Exception { | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(twoDaysDebtInSec).setChanges( | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(twoDays).setChanges( | |||
newArrayList( | |||
// changelog created at is null because it has just been created on the current analysis | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(oneDaysDebt), fromWorkDayDuration(twoDaysDebt)).setCreationDate(null) | |||
new FieldDiffs().setDiff("technicalDebt", oneDay, twoDays).setCreationDate(null) | |||
) | |||
); | |||
@@ -84,10 +81,10 @@ public class IssueChangelogDebtCalculatorTest { | |||
@Test | |||
public void calculate_new_technical_debt_with_many_diffs_in_changelog() throws Exception { | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(fiveDaysDebtInSec).setChanges( | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(fiveDays).setChanges( | |||
newArrayList( | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(twoDaysDebt), fromWorkDayDuration(fiveDaysDebt)).setCreationDate(null), | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(oneDaysDebt), fromWorkDayDuration(twoDaysDebt)).setCreationDate(fourDaysAgo) | |||
new FieldDiffs().setDiff("technicalDebt", twoDays, fiveDays).setCreationDate(null), | |||
new FieldDiffs().setDiff("technicalDebt", oneDay, twoDays).setCreationDate(fourDaysAgo) | |||
) | |||
); | |||
@@ -101,14 +98,14 @@ public class IssueChangelogDebtCalculatorTest { | |||
@Test | |||
public void changelog_can_be_in_wrong_order() { | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(fiveDaysDebtInSec).setChanges( | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(fiveDays).setChanges( | |||
newArrayList( | |||
// 3rd | |||
new FieldDiffs().setDiff("technicalDebt", null, fromWorkDayDuration(oneDaysDebt)).setCreationDate(nineDaysAgo), | |||
new FieldDiffs().setDiff("technicalDebt", null, oneDay).setCreationDate(nineDaysAgo), | |||
// 1st | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(twoDaysDebt), fromWorkDayDuration(fiveDaysDebt)).setCreationDate(rightNow), | |||
new FieldDiffs().setDiff("technicalDebt", twoDays, fiveDays).setCreationDate(rightNow), | |||
// 2nd | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(oneDaysDebt), fromWorkDayDuration(twoDaysDebt)).setCreationDate(fourDaysAgo) | |||
new FieldDiffs().setDiff("technicalDebt", oneDay, twoDays).setCreationDate(fourDaysAgo) | |||
) | |||
); | |||
@@ -120,9 +117,9 @@ public class IssueChangelogDebtCalculatorTest { | |||
@Test | |||
public void calculate_new_technical_debt_with_null_date() throws Exception { | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(twoDaysDebtInSec).setChanges( | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(twoDays).setChanges( | |||
newArrayList( | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(oneDaysDebt), fromWorkDayDuration(twoDaysDebt)).setCreationDate(null) | |||
new FieldDiffs().setDiff("technicalDebt", oneDay, twoDays).setCreationDate(null) | |||
) | |||
); | |||
@@ -134,8 +131,8 @@ public class IssueChangelogDebtCalculatorTest { | |||
public void calculate_new_technical_debt_when_new_debt_is_null() throws Exception { | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(null).setChanges( | |||
newArrayList( | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(oneDaysDebt), null).setCreationDate(null), | |||
new FieldDiffs().setDiff("technicalDebt", null, fromWorkDayDuration(oneDaysDebt)).setCreationDate(nineDaysAgo) | |||
new FieldDiffs().setDiff("technicalDebt", oneDay, null).setCreationDate(null), | |||
new FieldDiffs().setDiff("technicalDebt", null, oneDay).setCreationDate(nineDaysAgo) | |||
) | |||
); | |||
@@ -151,17 +148,13 @@ public class IssueChangelogDebtCalculatorTest { | |||
@Test | |||
public void not_return_negative_debt() { | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(oneDaysDebtInSec).setChanges( | |||
Issue issue = new DefaultIssue().setKey("A").setCreationDate(tenDaysAgo).setDebt(oneDay).setChanges( | |||
newArrayList( | |||
new FieldDiffs().setDiff("technicalDebt", fromWorkDayDuration(twoDaysDebt), fromWorkDayDuration(oneDaysDebt)).setCreationDate(null) | |||
new FieldDiffs().setDiff("technicalDebt", twoDays, oneDay).setCreationDate(null) | |||
) | |||
); | |||
assertThat(issueChangelogDebtCalculator.calculateNewTechnicalDebt(issue, rightNow)).isNull(); | |||
} | |||
private Long fromWorkDayDuration(WorkDuration workDayDuration) { | |||
return workDayDuration.toLong(); | |||
} | |||
} |
@@ -29,7 +29,6 @@ import org.sonar.api.issue.internal.DefaultIssue; | |||
import org.sonar.api.issue.internal.DefaultIssueComment; | |||
import org.sonar.api.issue.internal.IssueChangeContext; | |||
import org.sonar.api.user.User; | |||
import org.sonar.api.utils.WorkDurationFactory; | |||
import javax.annotation.Nullable; | |||
import java.util.Calendar; | |||
@@ -49,12 +48,6 @@ public class IssueUpdater implements BatchComponent, ServerComponent { | |||
public static final String ACTION_PLAN = "actionPlan"; | |||
public static final String TECHNICAL_DEBT = "technicalDebt"; | |||
private final WorkDurationFactory workDurationFactory; | |||
public IssueUpdater(WorkDurationFactory workDurationFactory) { | |||
this.workDurationFactory = workDurationFactory; | |||
} | |||
public boolean setSeverity(DefaultIssue issue, String severity, IssueChangeContext context) { | |||
if (issue.manualSeverity()) { | |||
throw new IllegalStateException("Severity can't be changed"); | |||
@@ -209,9 +202,7 @@ public class IssueUpdater implements BatchComponent, ServerComponent { | |||
Long oldValue = issue.debt(); | |||
if (!Objects.equal(value, oldValue)) { | |||
issue.setDebt(value); | |||
Long oldValueInLong = oldValue != null ? workDurationFactory.createFromSeconds(oldValue).toLong() : null; | |||
Long newValueInLong = value != null ? workDurationFactory.createFromSeconds(value).toLong() : null; | |||
issue.setFieldChange(context, TECHNICAL_DEBT, oldValueInLong, newValueInLong); | |||
issue.setFieldChange(context, TECHNICAL_DEBT, oldValue, value); | |||
issue.setUpdateDate(context.date()); | |||
issue.setChanged(true); | |||
return true; |
@@ -21,15 +21,11 @@ package org.sonar.core.issue; | |||
import org.junit.Before; | |||
import org.junit.Test; | |||
import org.sonar.api.CoreProperties; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.issue.ActionPlan; | |||
import org.sonar.api.issue.internal.DefaultIssue; | |||
import org.sonar.api.issue.internal.FieldDiffs; | |||
import org.sonar.api.issue.internal.IssueChangeContext; | |||
import org.sonar.api.user.User; | |||
import org.sonar.api.utils.WorkDuration; | |||
import org.sonar.api.utils.WorkDurationFactory; | |||
import org.sonar.core.user.DefaultUser; | |||
import java.util.Date; | |||
@@ -46,10 +42,7 @@ public class IssueUpdaterTest { | |||
@Before | |||
public void setUp() throws Exception { | |||
Settings settings = new Settings(); | |||
settings.setProperty(CoreProperties.HOURS_IN_DAY, 8); | |||
updater = new IssueUpdater(new WorkDurationFactory(settings)); | |||
updater = new IssueUpdater(); | |||
} | |||
@Test | |||
@@ -388,8 +381,8 @@ public class IssueUpdaterTest { | |||
assertThat(issue.mustSendNotifications()).isFalse(); | |||
FieldDiffs.Diff diff = issue.currentChange().get(TECHNICAL_DEBT); | |||
assertThat(diff.oldValue()).isEqualTo(WorkDuration.createFromValueAndUnit(10, WorkDuration.UNIT.DAYS, 8).toLong()); | |||
assertThat(diff.newValue()).isEqualTo(WorkDuration.createFromValueAndUnit(15, WorkDuration.UNIT.DAYS, 8).toLong()); | |||
assertThat(diff.oldValue()).isEqualTo(previousDebt); | |||
assertThat(diff.newValue()).isEqualTo(newDebt); | |||
} | |||
@Test | |||
@@ -403,7 +396,7 @@ public class IssueUpdaterTest { | |||
FieldDiffs.Diff diff = issue.currentChange().get(TECHNICAL_DEBT); | |||
assertThat(diff.oldValue()).isNull(); | |||
assertThat(diff.newValue()).isEqualTo(WorkDuration.createFromValueAndUnit(15, WorkDuration.UNIT.DAYS, 8).toLong()); | |||
assertThat(diff.newValue()).isEqualTo(newDebt); | |||
} | |||
@Test | |||
@@ -416,7 +409,7 @@ public class IssueUpdaterTest { | |||
assertThat(issue.mustSendNotifications()).isFalse(); | |||
FieldDiffs.Diff diff = issue.currentChange().get(TECHNICAL_DEBT); | |||
assertThat(diff.oldValue()).isEqualTo(WorkDuration.createFromValueAndUnit(10, WorkDuration.UNIT.DAYS, 8).toLong()); | |||
assertThat(diff.oldValue()).isEqualTo(previousDebt); | |||
assertThat(diff.newValue()).isNull(); | |||
} | |||
@@ -42,7 +42,7 @@ import static org.mockito.Mockito.mock; | |||
public class IssueWorkflowTest { | |||
IssueUpdater updater = new IssueUpdater(null); | |||
IssueUpdater updater = new IssueUpdater(); | |||
IssueWorkflow workflow = new IssueWorkflow(new FunctionExecutor(updater), updater); | |||
@Test |
@@ -36,6 +36,10 @@ public final class WorkDurationFactory implements BatchComponent, ServerComponen | |||
this.settings = settings; | |||
} | |||
/** | |||
* @deprecated since 4.3 | |||
*/ | |||
@Deprecated | |||
public WorkDuration createFromWorkingValue(int value, WorkDuration.UNIT unit) { | |||
return WorkDuration.createFromValueAndUnit(value, unit, hoursInDay()); | |||
} |
@@ -21,7 +21,6 @@ package org.sonar.server.issue; | |||
import org.sonar.api.ServerComponent; | |||
import org.sonar.api.issue.internal.FieldDiffs; | |||
import org.sonar.api.utils.WorkDurationFactory; | |||
import org.sonar.core.i18n.DefaultI18n; | |||
import org.sonar.core.issue.IssueUpdater; | |||
import org.sonar.server.technicaldebt.DebtFormatter; | |||
@@ -39,12 +38,10 @@ public class IssueChangelogFormatter implements ServerComponent { | |||
private final DefaultI18n defaultI18n; | |||
private final DebtFormatter debtFormatter; | |||
private final WorkDurationFactory workDurationFactory; | |||
public IssueChangelogFormatter(DefaultI18n defaultI18n, DebtFormatter debtFormatter, WorkDurationFactory workDurationFactory) { | |||
public IssueChangelogFormatter(DefaultI18n defaultI18n, DebtFormatter debtFormatter) { | |||
this.defaultI18n = defaultI18n; | |||
this.debtFormatter = debtFormatter; | |||
this.workDurationFactory = workDurationFactory; | |||
} | |||
public List<String> format(Locale locale, FieldDiffs diffs) { | |||
@@ -76,10 +73,10 @@ public class IssueChangelogFormatter implements ServerComponent { | |||
String oldValueString = oldValue != null && !"".equals(oldValue) ? oldValue.toString() : null; | |||
if (IssueUpdater.TECHNICAL_DEBT.equals(key)) { | |||
if (newValueString != null) { | |||
newValueString = debtFormatter.formatWorkDuration(locale, workDurationFactory.createFromWorkingLong(Long.parseLong(newValueString))); | |||
newValueString = debtFormatter.format(locale, Long.parseLong(newValueString)); | |||
} | |||
if (oldValueString != null) { | |||
oldValueString = debtFormatter.formatWorkDuration(locale, workDurationFactory.createFromWorkingLong(Long.parseLong(oldValueString))); | |||
oldValueString = debtFormatter.format(locale, Long.parseLong(oldValueString)); | |||
} | |||
} | |||
return new IssueChangelogDiffFormat(oldValueString, newValueString); |
@@ -41,7 +41,7 @@ public class DebtFormatter implements ServerComponent { | |||
return formatWorkDuration(locale, workDurationFactory.createFromSeconds(debt)); | |||
} | |||
public String formatWorkDuration(Locale locale, WorkDuration debt) { | |||
private String formatWorkDuration(Locale locale, WorkDuration debt) { | |||
StringBuilder message = new StringBuilder(); | |||
if (debt.days() > 0) { | |||
message.append(defaultI18n.message(locale, "issue.technical_debt.x_days", null, debt.days())); |
@@ -74,8 +74,8 @@ class Issue | |||
hash_diff = {} | |||
hash_diff[:key] = key | |||
if key == 'technicalDebt' | |||
hash_diff[:newValue] = work_duration_to_hash(Internal.technical_debt.toTechnicalDebt(diff.newValue())) if diff.newValue.present? | |||
hash_diff[:oldValue] = work_duration_to_hash(Internal.technical_debt.toTechnicalDebt(diff.oldValue())) if diff.oldValue.present? | |||
hash_diff[:newValue] = debt_to_hash(diff.newValue()) if diff.newValue.present? | |||
hash_diff[:oldValue] = debt_to_hash(diff.oldValue()) if diff.oldValue.present? | |||
else | |||
hash_diff[:newValue] = diff.newValue() if diff.newValue.present? | |||
hash_diff[:oldValue] = diff.oldValue() if diff.oldValue.present? | |||
@@ -92,10 +92,7 @@ class Issue | |||
private | |||
def self.debt_to_hash(debt) | |||
work_duration_to_hash(Internal.technical_debt.toWorkDuration(debt)) | |||
end | |||
def self.work_duration_to_hash(work_duration) | |||
work_duration = work_duration_to_hash(Internal.technical_debt.toWorkDuration(debt)) | |||
{ | |||
:days => work_duration.days(), | |||
:hours => work_duration.hours(), |
@@ -24,11 +24,7 @@ import org.junit.Test; | |||
import org.junit.runner.RunWith; | |||
import org.mockito.Mock; | |||
import org.mockito.runners.MockitoJUnitRunner; | |||
import org.sonar.api.CoreProperties; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.issue.internal.FieldDiffs; | |||
import org.sonar.api.utils.WorkDuration; | |||
import org.sonar.api.utils.WorkDurationFactory; | |||
import org.sonar.core.i18n.DefaultI18n; | |||
import org.sonar.server.technicaldebt.DebtFormatter; | |||
@@ -55,9 +51,7 @@ public class IssueChangelogFormatterTest { | |||
@Before | |||
public void before() { | |||
Settings settings = new Settings(); | |||
settings.setProperty(CoreProperties.HOURS_IN_DAY, HOURS_IN_DAY); | |||
formatter = new IssueChangelogFormatter(i18n, debtFormatter, new WorkDurationFactory(settings)); | |||
formatter = new IssueChangelogFormatter(i18n, debtFormatter); | |||
} | |||
@Test | |||
@@ -135,10 +129,10 @@ public class IssueChangelogFormatterTest { | |||
@Test | |||
public void format_technical_debt_with_old_and_new_value() { | |||
FieldDiffs diffs = new FieldDiffs(); | |||
diffs.setDiff("technicalDebt", "500", "10000"); | |||
diffs.setDiff("technicalDebt", "18000", "28800"); | |||
when(debtFormatter.formatWorkDuration(DEFAULT_LOCALE, WorkDuration.createFromValueAndUnit(5, WorkDuration.UNIT.HOURS, HOURS_IN_DAY))).thenReturn("5 hours"); | |||
when(debtFormatter.formatWorkDuration(DEFAULT_LOCALE, WorkDuration.createFromValueAndUnit(1, WorkDuration.UNIT.DAYS, HOURS_IN_DAY))).thenReturn("1 days"); | |||
when(debtFormatter.format(DEFAULT_LOCALE, 18000)).thenReturn("5 hours"); | |||
when(debtFormatter.format(DEFAULT_LOCALE, 28800)).thenReturn("1 days"); | |||
when(i18n.message(DEFAULT_LOCALE, "issue.changelog.field.technicalDebt", null)).thenReturn("Technical Debt"); | |||
when(i18n.message(DEFAULT_LOCALE, "issue.changelog.changed_to", null, "Technical Debt", "1 days")).thenReturn("Technical Debt changed to 1 days"); | |||
@@ -153,9 +147,9 @@ public class IssueChangelogFormatterTest { | |||
@Test | |||
public void format_technical_debt_with_new_value_only() { | |||
FieldDiffs diffs = new FieldDiffs(); | |||
diffs.setDiff("technicalDebt", null, "10000"); | |||
diffs.setDiff("technicalDebt", null, "28800"); | |||
when(debtFormatter.formatWorkDuration(DEFAULT_LOCALE, WorkDuration.createFromValueAndUnit(1, WorkDuration.UNIT.DAYS, 8))).thenReturn("1 days"); | |||
when(debtFormatter.format(DEFAULT_LOCALE, 28800)).thenReturn("1 days"); | |||
when(i18n.message(DEFAULT_LOCALE, "issue.changelog.field.technicalDebt", null)).thenReturn("Technical Debt"); | |||
when(i18n.message(DEFAULT_LOCALE, "issue.changelog.changed_to", null, "Technical Debt", "1 days")).thenReturn("Technical Debt changed to 1 days"); |
@@ -24,7 +24,6 @@ import org.junit.Before; | |||
import org.junit.Test; | |||
import org.sonar.api.CoreProperties; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.utils.WorkDuration; | |||
import org.sonar.api.utils.WorkDurationFactory; | |||
import org.sonar.core.i18n.DefaultI18n; | |||
@@ -73,15 +72,4 @@ public class DebtFormatterTest { | |||
assertThat(formatter.format(DEFAULT_LOCALE, 5 * ONE_DAY + 2 * ONE_HOUR + ONE_MINUTE)).isEqualTo("5 days 2 hours"); | |||
} | |||
@Test | |||
public void format_work_duration() { | |||
assertThat(formatter.formatWorkDuration(DEFAULT_LOCALE, WorkDuration.createFromValueAndUnit(5, WorkDuration.UNIT.DAYS, HOURS_IN_DAY))).isEqualTo("5 days"); | |||
assertThat(formatter.formatWorkDuration(DEFAULT_LOCALE, WorkDuration.createFromValueAndUnit(2, WorkDuration.UNIT.HOURS, HOURS_IN_DAY))).isEqualTo("2 hours"); | |||
assertThat(formatter.formatWorkDuration(DEFAULT_LOCALE, WorkDuration.createFromValueAndUnit(1, WorkDuration.UNIT.MINUTES, HOURS_IN_DAY))).isEqualTo("1 minutes"); | |||
assertThat(formatter.formatWorkDuration(DEFAULT_LOCALE, WorkDuration.create(5, 2, 0, HOURS_IN_DAY))).isEqualTo("5 days 2 hours"); | |||
assertThat(formatter.formatWorkDuration(DEFAULT_LOCALE, WorkDuration.create(0, 2, 1, HOURS_IN_DAY))).isEqualTo("2 hours 1 minutes"); | |||
assertThat(formatter.formatWorkDuration(DEFAULT_LOCALE, WorkDuration.create(5, 2, 10, HOURS_IN_DAY))).isEqualTo("5 days 2 hours"); | |||
} | |||
} |