@Override
public void execute() {
+ workDurationConvertor.init();
+
new MassUpdater(db).execute(
new MassUpdater.InputLoader<Row>() {
@Override
@Override
public void execute() {
+ workDurationConvertor.init();
+
new MassUpdater(db).execute(
new MassUpdater.InputLoader<Row>() {
@Override
private final Database db;
public IssueChangelogMigration(Database database, PropertiesDao propertiesDao) {
- this(database, propertiesDao, System2.INSTANCE);
+ this(database, new WorkDurationConvertor(propertiesDao), System2.INSTANCE);
}
@VisibleForTesting
- IssueChangelogMigration(Database database, PropertiesDao propertiesDao, System2 system2) {
+ IssueChangelogMigration(Database database, WorkDurationConvertor convertor, System2 system2) {
this.db = database;
- this.workDurationConvertor = new WorkDurationConvertor(propertiesDao);
+ this.workDurationConvertor = convertor;
this.system2 = system2;
}
@Override
public void execute() {
+ workDurationConvertor.init();
+
new MassUpdater(db).execute(
new MassUpdater.InputLoader<Row>() {
@Override
@Override
public void execute() {
+ workDurationConvertor.init();
+
new MassUpdater(db).execute(
new MassUpdater.InputLoader<Row>() {
@Override
static final String HOURS_IN_DAY_PROPERTY = "sonar.technicalDebt.hoursInDay";
+ private Integer hoursInDay;
+
private final PropertiesDao propertiesDao;
WorkDurationConvertor(PropertiesDao propertiesDao) {
}
long createFromLong(long durationInLong) {
- int hoursInDay = hoursInDay();
+ checkHoursInDay();
long durationInMinutes = 0L;
}
long createFromDays(double days) {
- return ((Double) (days * hoursInDay() * ONE_HOUR)).longValue();
+ checkHoursInDay();
+
+ return ((Double) (days * hoursInDay * ONE_HOUR)).longValue();
}
- private int hoursInDay() {
+ void init() {
PropertyDto propertyDto = propertiesDao.selectGlobalProperty(HOURS_IN_DAY_PROPERTY);
String value = propertyDto != null ? propertyDto.getValue() : "8";
- int hoursInDay = Integer.valueOf(value);
+ hoursInDay = Integer.valueOf(value);
if (hoursInDay < 0) {
throw new IllegalArgumentException(String.format("Bad value of %s: %d", HOURS_IN_DAY_PROPERTY, hoursInDay));
}
- return hoursInDay;
}
+ private void checkHoursInDay(){
+ if (hoursInDay == null) {
+ throw new IllegalStateException("init() has not been called");
+ }
+ }
}
when(system2.now()).thenReturn(DateUtils.parseDateTime("2014-02-19T19:10:03+0100").getTime());
when(propertiesDao.selectGlobalProperty(WorkDurationConvertor.HOURS_IN_DAY_PROPERTY)).thenReturn(new PropertyDto().setValue("8"));
- migration = new IssueChangelogMigration(db.database(), propertiesDao, system2);
+ WorkDurationConvertor convertor = new WorkDurationConvertor(propertiesDao);
+ convertor.init();
+ migration = new IssueChangelogMigration(db.database(), convertor, system2);
}
@Test
@Test
public void convert_from_long() throws Exception {
+ convertor.init();
when(propertiesDao.selectGlobalProperty(WorkDurationConvertor.HOURS_IN_DAY_PROPERTY)).thenReturn(new PropertyDto().setValue(Integer.toString(HOURS_IN_DAY)));
assertThat(convertor.createFromLong(1)).isEqualTo(ONE_MINUTE);
@Test
public void convert_from_long_use_default_value_for_hours_in_day_when_no_property() throws Exception {
+ convertor.init();
assertThat(convertor.createFromLong(1)).isEqualTo(ONE_MINUTE);
}
@Test
public void fail_convert_from_long_on_bad_hours_in_day_property() throws Exception {
+ when(propertiesDao.selectGlobalProperty(WorkDurationConvertor.HOURS_IN_DAY_PROPERTY)).thenReturn(new PropertyDto().setValue("-2"));
+ WorkDurationConvertor workDurationConvertor = new WorkDurationConvertor(propertiesDao);
try {
- when(propertiesDao.selectGlobalProperty(WorkDurationConvertor.HOURS_IN_DAY_PROPERTY)).thenReturn(new PropertyDto().setValue("-2"));
- convertor.createFromLong(1);
+ workDurationConvertor.init();
fail();
} catch (Exception e) {
assertThat(e).isInstanceOf(IllegalArgumentException.class);
@Test
public void convert_from_days() throws Exception {
+ convertor.init();
when(propertiesDao.selectGlobalProperty(WorkDurationConvertor.HOURS_IN_DAY_PROPERTY)).thenReturn(new PropertyDto().setValue(Integer.toString(HOURS_IN_DAY)));
assertThat(convertor.createFromDays(1.0)).isEqualTo(ONE_DAY_IN_MINUTES);
assertThat(convertor.createFromDays(0.01)).isEqualTo(4L);
}
+ @Test
+ public void fail_it_init_has_not_been_called() throws Exception {
+ when(propertiesDao.selectGlobalProperty(WorkDurationConvertor.HOURS_IN_DAY_PROPERTY)).thenReturn(new PropertyDto().setValue(Integer.toString(HOURS_IN_DAY)));
+
+ try {
+ assertThat(convertor.createFromLong(1L));
+ fail();
+ } catch (Exception e) {
+ assertThat(e).isInstanceOf(IllegalStateException.class);
+ }
+
+ try {
+ assertThat(convertor.createFromDays(1.0));
+ fail();
+ } catch (Exception e) {
+ assertThat(e).isInstanceOf(IllegalStateException.class);
+ }
+ }
+
}