TSK-1169: refactored daysToWorkingDaysReportConverter, renamed test methods according to the new community of practices convention and deleted duplicate unit tests, switched test framework to assert via assertJ

This commit is contained in:
Christopher Heiting 2020-03-30 12:54:56 +02:00 committed by Mustapha Zorgati
parent 4a4a11704e
commit d4350199b9
7 changed files with 487 additions and 795 deletions

View File

@ -1,197 +0,0 @@
package pro.taskana.monitor.internal.preprocessor;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pro.taskana.common.api.LoggerUtils;
import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.common.internal.util.WorkingDaysToDaysConverter;
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
/**
* The DaysToWorkingDaysReportConverter provides a method to convert an age in days into an age in
* working days. Before the method convertDaysToWorkingDays() can be used, the
* WorkingDaysToDaysConverter has to be initialized. For a list of {@link TimeIntervalColumnHeader}s
* the converter creates a "table" with integer that represents the age in days from the largest
* lower limit until the smallest upper limit of the timeIntervalColumnHeaders. This table is valid
* for a whole day until the converter is initialized with bigger limits.
*/
public class DaysToWorkingDaysReportConverter {
private static final Logger LOGGER =
LoggerFactory.getLogger(DaysToWorkingDaysReportConverter.class);
private List<Integer> positiveDaysToWorkingDays;
private List<Integer> negativeDaysToWorkingDays;
private WorkingDaysToDaysConverter workingDaysToDaysConverter;
DaysToWorkingDaysReportConverter(
List<? extends TimeIntervalColumnHeader> columnHeaders,
WorkingDaysToDaysConverter workingDaysToDaysConverter) {
this.workingDaysToDaysConverter = workingDaysToDaysConverter;
positiveDaysToWorkingDays =
generatePositiveDaysToWorkingDays(
columnHeaders, workingDaysToDaysConverter.getReferenceDate());
negativeDaysToWorkingDays =
generateNegativeDaysToWorkingDays(
columnHeaders, workingDaysToDaysConverter.getReferenceDate());
}
public static DaysToWorkingDaysReportConverter initialize(
List<? extends TimeIntervalColumnHeader> columnHeaders) throws InvalidArgumentException {
return initialize(columnHeaders, Instant.now());
}
/**
* Initializes the WorkingDaysToDaysConverter for a list of {@link TimeIntervalColumnHeader}s and
* a referenceDate. A new table is only created if there are bigger limits or the date has
* changed.
*
* @param columnHeaders a list of {@link TimeIntervalColumnHeader}s that determines the size of
* the table
* @param referenceDate a {@link Instant} that represents the current day of the table
* @return an instance of the WorkingDaysToDaysConverter
* @throws InvalidArgumentException thrown if columnHeaders or referenceDate is null
*/
public static DaysToWorkingDaysReportConverter initialize(
List<? extends TimeIntervalColumnHeader> columnHeaders, Instant referenceDate)
throws InvalidArgumentException {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(
"Initialize WorkingDaysToDaysConverter with columnHeaders: {}",
LoggerUtils.listToString(columnHeaders));
}
if (columnHeaders == null) {
throw new InvalidArgumentException(
"TimeIntervalColumnHeaders can´t be used as NULL-Parameter");
}
if (referenceDate == null) {
throw new InvalidArgumentException("ReferenceDate can´t be used as NULL-Parameter");
}
WorkingDaysToDaysConverter workingDaysToDaysConverter =
WorkingDaysToDaysConverter.initialize(referenceDate);
return new DaysToWorkingDaysReportConverter(columnHeaders, workingDaysToDaysConverter);
}
/**
* Converts an integer, that represents the age in days, to the age in working days by using the
* table that was created by initialization. If the age in days is beyond the limits of the table,
* the integer will be returned unchanged.
*
* @param ageInDays represents the age in days
* @return the age in working days
*/
public int convertDaysToWorkingDays(int ageInDays) {
int minDay = -(negativeDaysToWorkingDays.size() - 1);
int maxDay = positiveDaysToWorkingDays.size() - 1;
if (ageInDays >= minDay && ageInDays <= 0) {
return negativeDaysToWorkingDays.get(-ageInDays);
}
if (ageInDays > 0 && ageInDays <= maxDay) {
return positiveDaysToWorkingDays.get(ageInDays);
}
return ageInDays;
}
/**
* Converts an integer, that represents the age in working days, to the age in days by using the
* table that was created by initialization. Because one age in working days could match to more
* than one age in days, the return value is a list of all days that match to the input parameter.
* If the age in working days is beyond the limits of the table, the integer will be returned
* unchanged.
*
* @param ageInWorkingDays represents the age in working days
* @return a list of age in days
*/
public ArrayList<Integer> convertWorkingDaysToDays(int ageInWorkingDays) {
ArrayList<Integer> list = new ArrayList<>();
int minWorkingDay = negativeDaysToWorkingDays.get(negativeDaysToWorkingDays.size() - 1);
int maxWorkingDay = positiveDaysToWorkingDays.get(positiveDaysToWorkingDays.size() - 1);
if (ageInWorkingDays >= minWorkingDay && ageInWorkingDays < 0) {
for (int ageInDays = 0; ageInDays < negativeDaysToWorkingDays.size(); ageInDays++) {
if (negativeDaysToWorkingDays.get(ageInDays) == ageInWorkingDays) {
list.add(-ageInDays);
}
}
return list;
}
if (ageInWorkingDays > 0 && ageInWorkingDays <= maxWorkingDay) {
for (int ageInDays = 0; ageInDays < positiveDaysToWorkingDays.size(); ageInDays++) {
if (positiveDaysToWorkingDays.get(ageInDays) == ageInWorkingDays) {
list.add(ageInDays);
}
}
return list;
}
if (ageInWorkingDays == 0) {
list.add(0);
for (int ageInDays = 1; ageInDays < positiveDaysToWorkingDays.size(); ageInDays++) {
if (positiveDaysToWorkingDays.get(ageInDays) == ageInWorkingDays) {
list.add(ageInDays);
}
}
for (int ageInDays = 1; ageInDays < negativeDaysToWorkingDays.size(); ageInDays++) {
if (negativeDaysToWorkingDays.get(ageInDays) == ageInWorkingDays) {
list.add(-ageInDays);
}
}
return list;
}
// If ageInWorkingDays is beyond the limits of the table, the value is returned unchanged.
list.add(ageInWorkingDays);
return list;
}
protected List<Integer> generateNegativeDaysToWorkingDays(
List<? extends TimeIntervalColumnHeader> columnHeaders, Instant referenceDate) {
int minUpperLimit = TimeIntervalColumnHeader.getSmallestUpperLimit(columnHeaders);
List<Integer> daysToWorkingDays = new ArrayList<>();
daysToWorkingDays.add(0);
int day = -1;
int workingDay = 0;
while (workingDay > minUpperLimit) {
workingDay -= (workingDaysToDaysConverter.isWorkingDay(day--, referenceDate)) ? 1 : 0;
daysToWorkingDays.add(workingDay);
}
return daysToWorkingDays;
}
protected List<Integer> generatePositiveDaysToWorkingDays(
List<? extends TimeIntervalColumnHeader> columnHeaders, Instant referenceDate) {
int maxLowerLimit = TimeIntervalColumnHeader.getLargestLowerLimit(columnHeaders);
ArrayList<Integer> daysToWorkingDays = new ArrayList<>();
daysToWorkingDays.add(0);
int day = 1;
int workingDay = 0;
while (workingDay < maxLowerLimit) {
workingDay += (workingDaysToDaysConverter.isWorkingDay(day++, referenceDate)) ? 1 : 0;
daysToWorkingDays.add(workingDay);
}
return daysToWorkingDays;
}
@Override
public String toString() {
return "DaysToWorkingDaysReportConverter [positiveDaysToWorkingDays="
+ positiveDaysToWorkingDays
+ ", negativeDaysToWorkingDays="
+ negativeDaysToWorkingDays
+ ", workingDaysToDaysConverter="
+ workingDaysToDaysConverter
+ "]";
}
}

View File

@ -16,13 +16,13 @@ import pro.taskana.monitor.api.reports.item.QueryItemPreprocessor;
public class DaysToWorkingDaysReportPreProcessor<I extends AgeQueryItem>
implements QueryItemPreprocessor<I> {
private DaysToWorkingDaysReportConverter instance;
private WorkingDaysToDaysReportConverter instance;
public DaysToWorkingDaysReportPreProcessor(
List<? extends TimeIntervalColumnHeader> columnHeaders, boolean activate)
throws InvalidArgumentException {
if (activate) {
instance = DaysToWorkingDaysReportConverter.initialize(columnHeaders);
instance = WorkingDaysToDaysReportConverter.initialize(columnHeaders);
}
}

View File

@ -0,0 +1,141 @@
package pro.taskana.monitor.internal.preprocessor;
import java.time.Instant;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pro.taskana.common.api.LoggerUtils;
import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.common.internal.util.WorkingDaysToDaysConverter;
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
/**
* The DaysToWorkingDaysReportConverter provides a method to convert an age in days into an age in
* working days. Before the method convertDaysToWorkingDays() can be used, the
* WorkingDaysToDaysConverter has to be initialized. For a list of {@link TimeIntervalColumnHeader}s
* the converter creates a "table" with integer that represents the age in days from the largest
* lower limit until the smallest upper limit of the timeIntervalColumnHeaders. This table is valid
* for a whole day until the converter is initialized with bigger limits.
*/
public class WorkingDaysToDaysReportConverter {
private static final Logger LOGGER =
LoggerFactory.getLogger(WorkingDaysToDaysReportConverter.class);
private WorkingDaysToDaysConverter daysToWorkingDaysConverter;
private Map<Integer, Integer> cacheDaysToWorkingDays;
WorkingDaysToDaysReportConverter(
List<? extends TimeIntervalColumnHeader> columnHeaders,
WorkingDaysToDaysConverter daysToWorkingDaysConverter) {
this.daysToWorkingDaysConverter = daysToWorkingDaysConverter;
cacheDaysToWorkingDays =
generateDaysToWorkingDays(columnHeaders, daysToWorkingDaysConverter.getReferenceDate());
}
public static WorkingDaysToDaysReportConverter initialize(
List<? extends TimeIntervalColumnHeader> columnHeaders) throws InvalidArgumentException {
return initialize(columnHeaders, Instant.now());
}
/**
* Initializes the WorkingDaysToDaysConverter for a list of {@link TimeIntervalColumnHeader}s and
* a referenceDate. A new table is only created if there are bigger limits or the date has
* changed.
*
* @param columnHeaders a list of {@link TimeIntervalColumnHeader}s that determines the size of
* the table
* @param referenceDate a {@link Instant} that represents the current day of the table
* @return an instance of the WorkingDaysToDaysConverter
* @throws InvalidArgumentException thrown if columnHeaders or referenceDate is null
*/
public static WorkingDaysToDaysReportConverter initialize(
List<? extends TimeIntervalColumnHeader> columnHeaders, Instant referenceDate)
throws InvalidArgumentException {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(
"Initialize WorkingDaysToDaysConverter with columnHeaders: {}",
LoggerUtils.listToString(columnHeaders));
}
if (columnHeaders == null) {
throw new InvalidArgumentException(
"TimeIntervalColumnHeaders can´t be used as NULL-Parameter");
}
if (referenceDate == null) {
throw new InvalidArgumentException("ReferenceDate can´t be used as NULL-Parameter");
}
WorkingDaysToDaysConverter workingDaysToDaysConverter =
WorkingDaysToDaysConverter.initialize(referenceDate);
return new WorkingDaysToDaysReportConverter(columnHeaders, workingDaysToDaysConverter);
}
public int convertDaysToWorkingDays(int amountOfDays) {
return cacheDaysToWorkingDays.getOrDefault(amountOfDays, amountOfDays);
}
public List<Integer> convertWorkingDaysToDays(int amountOfWorkdays) {
List<Integer> listOfAllMatchingDays =
cacheDaysToWorkingDays.entrySet().stream()
.filter(entry -> entry.getValue() == amountOfWorkdays)
.map(Entry::getKey)
.collect(Collectors.toList());
if (listOfAllMatchingDays.isEmpty()) {
return Collections.singletonList(amountOfWorkdays);
}
return listOfAllMatchingDays;
}
protected Map<Integer, Integer> generateDaysToWorkingDays(
List<? extends TimeIntervalColumnHeader> columnHeaders, final Instant referenceDate) {
HashMap<Integer, Integer> cacheDaysToWorkingDays = new HashMap<>();
cacheDaysToWorkingDays.put(0, 0);
int positiveWorkdayLimit = TimeIntervalColumnHeader.getLargestLowerLimit(columnHeaders);
calculateFutureDaysToWorkingDays(cacheDaysToWorkingDays, referenceDate, positiveWorkdayLimit);
int negativeWorkdayLimit = TimeIntervalColumnHeader.getSmallestUpperLimit(columnHeaders);
calculateNegativeDaysToWorkingDays(cacheDaysToWorkingDays, referenceDate, negativeWorkdayLimit);
return cacheDaysToWorkingDays;
}
private void calculateFutureDaysToWorkingDays(
HashMap<Integer, Integer> cacheDaysToWorkingDays, Instant referenceDate, int workdayLimit) {
calculateDaysToWorkingDays(cacheDaysToWorkingDays, referenceDate, workdayLimit, 1);
}
private void calculateNegativeDaysToWorkingDays(
HashMap<Integer, Integer> cacheDaysToWorkingDays, Instant referenceDate, int workdayLimit) {
calculateDaysToWorkingDays(cacheDaysToWorkingDays, referenceDate, workdayLimit, -1);
}
private void calculateDaysToWorkingDays(
HashMap<Integer, Integer> cacheDaysToWorkingDays,
Instant referenceDate,
int workdayLimit,
int direction) {
int amountOfDays = 0;
int amountOfWorkdays = 0;
while (Math.abs(amountOfWorkdays) < Math.abs(workdayLimit)) {
amountOfDays += direction;
amountOfWorkdays +=
(daysToWorkingDaysConverter.isWorkingDay(amountOfDays, referenceDate)) ? direction : 0;
cacheDaysToWorkingDays.put(amountOfDays, amountOfWorkdays);
}
}
@Override
public String toString() {
return "DaysToWorkingDaysReportConverter [cacheDaysToWorkingDays="
+ cacheDaysToWorkingDays
+ ", daysToWorkingDaysConverter="
+ daysToWorkingDaysConverter
+ "]";
}
}

View File

@ -20,7 +20,7 @@ import pro.taskana.monitor.api.reports.TimeIntervalReportBuilder;
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
import pro.taskana.monitor.api.reports.item.AgeQueryItem;
import pro.taskana.monitor.internal.MonitorMapper;
import pro.taskana.monitor.internal.preprocessor.DaysToWorkingDaysReportConverter;
import pro.taskana.monitor.internal.preprocessor.WorkingDaysToDaysReportConverter;
import pro.taskana.task.api.CustomField;
import pro.taskana.task.api.TaskState;
@ -194,8 +194,8 @@ abstract class TimeIntervalReportBuilderImpl<
private List<SelectedItem> convertWorkingDaysToDays(
List<SelectedItem> selectedItems, List<H> columnHeaders) throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(columnHeaders);
WorkingDaysToDaysReportConverter instance =
WorkingDaysToDaysReportConverter.initialize(columnHeaders);
for (SelectedItem selectedItem : selectedItems) {
selectedItem.setLowerAgeLimit(
Collections.min(instance.convertWorkingDaysToDays(selectedItem.getLowerAgeLimit())));

View File

@ -2,12 +2,10 @@ package pro.taskana.common.internal.util;
import static java.util.Collections.singletonList;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static pro.taskana.common.internal.util.WorkingDaysToDaysConverter.getEasterSunday;
import java.time.Instant;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.jupiter.api.BeforeAll;
@ -15,7 +13,6 @@ import org.junit.jupiter.api.Test;
import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
import pro.taskana.monitor.internal.preprocessor.DaysToWorkingDaysReportConverter;
/** Test for the WorkingDaysToDaysConverter. */
class WorkingDaysToDaysConverterTest {
@ -101,262 +98,6 @@ class WorkingDaysToDaysConverterTest {
assertEquals(5, days); // 2.5.
}
@Test
void testInitializeForDifferentDates() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance1 =
DaysToWorkingDaysReportConverter.initialize(
getShortListOfColumnHeaders(), Instant.parse("2018-02-04T00:00:00.000Z"));
DaysToWorkingDaysReportConverter instance2 =
DaysToWorkingDaysReportConverter.initialize(
getShortListOfColumnHeaders(), Instant.parse("2018-02-05T00:00:00.000Z"));
assertNotEquals(instance1, instance2);
}
@Test
void testConvertDaysToWorkingDays() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-02-06T00:00:00.000Z"));
assertEquals(-16, instance.convertDaysToWorkingDays(-16));
assertEquals(-11, instance.convertDaysToWorkingDays(-15));
assertEquals(-2, instance.convertDaysToWorkingDays(-4));
assertEquals(-1, instance.convertDaysToWorkingDays(-3));
assertEquals(-1, instance.convertDaysToWorkingDays(-2));
assertEquals(-1, instance.convertDaysToWorkingDays(-1));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(1, instance.convertDaysToWorkingDays(1));
assertEquals(2, instance.convertDaysToWorkingDays(2));
assertEquals(3, instance.convertDaysToWorkingDays(3));
assertEquals(3, instance.convertDaysToWorkingDays(4));
assertEquals(3, instance.convertDaysToWorkingDays(5));
assertEquals(4, instance.convertDaysToWorkingDays(6));
assertEquals(11, instance.convertDaysToWorkingDays(15));
assertEquals(16, instance.convertDaysToWorkingDays(16));
}
@Test
void testConvertWorkingDaysToDays() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-02-27T00:00:00.000Z"));
assertEquals(singletonList(-13), instance.convertWorkingDaysToDays(-13));
assertEquals(singletonList(-12), instance.convertWorkingDaysToDays(-12));
assertEquals(singletonList(-12), instance.convertWorkingDaysToDays(-8));
assertEquals(singletonList(-11), instance.convertWorkingDaysToDays(-7));
assertEquals(Arrays.asList(-8, -9, -10), instance.convertWorkingDaysToDays(-6));
assertEquals(singletonList(-7), instance.convertWorkingDaysToDays(-5));
assertEquals(singletonList(-6), instance.convertWorkingDaysToDays(-4));
assertEquals(singletonList(-5), instance.convertWorkingDaysToDays(-3));
assertEquals(singletonList(-4), instance.convertWorkingDaysToDays(-2));
assertEquals(Arrays.asList(-1, -2, -3), instance.convertWorkingDaysToDays(-1));
assertEquals(singletonList(0), instance.convertWorkingDaysToDays(0));
assertEquals(singletonList(1), instance.convertWorkingDaysToDays(1));
assertEquals(singletonList(2), instance.convertWorkingDaysToDays(2));
assertEquals(Arrays.asList(3, 4, 5), instance.convertWorkingDaysToDays(3));
assertEquals(singletonList(6), instance.convertWorkingDaysToDays(4));
assertEquals(singletonList(7), instance.convertWorkingDaysToDays(5));
assertEquals(singletonList(8), instance.convertWorkingDaysToDays(6));
assertEquals(singletonList(9), instance.convertWorkingDaysToDays(7));
assertEquals(Arrays.asList(10, 11, 12), instance.convertWorkingDaysToDays(8));
assertEquals(singletonList(13), instance.convertWorkingDaysToDays(9));
assertEquals(singletonList(14), instance.convertWorkingDaysToDays(10));
assertEquals(singletonList(15), instance.convertWorkingDaysToDays(11));
assertEquals(singletonList(12), instance.convertWorkingDaysToDays(12));
assertEquals(singletonList(13), instance.convertWorkingDaysToDays(13));
}
@Test
void testConvertWorkingDaysToDaysAtWeekend() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-03-10T00:00:00.000Z"));
assertEquals(singletonList(-13), instance.convertWorkingDaysToDays(-13));
assertEquals(singletonList(-12), instance.convertWorkingDaysToDays(-12));
assertEquals(singletonList(-10), instance.convertWorkingDaysToDays(-8));
assertEquals(singletonList(-9), instance.convertWorkingDaysToDays(-7));
assertEquals(singletonList(-8), instance.convertWorkingDaysToDays(-6));
assertEquals(Arrays.asList(-5, -6, -7), instance.convertWorkingDaysToDays(-5));
assertEquals(singletonList(-4), instance.convertWorkingDaysToDays(-4));
assertEquals(singletonList(-3), instance.convertWorkingDaysToDays(-3));
assertEquals(singletonList(-2), instance.convertWorkingDaysToDays(-2));
assertEquals(singletonList(-1), instance.convertWorkingDaysToDays(-1));
assertEquals(Arrays.asList(0, 1), instance.convertWorkingDaysToDays(0));
assertEquals(singletonList(2), instance.convertWorkingDaysToDays(1));
assertEquals(singletonList(3), instance.convertWorkingDaysToDays(2));
assertEquals(singletonList(4), instance.convertWorkingDaysToDays(3));
assertEquals(singletonList(5), instance.convertWorkingDaysToDays(4));
assertEquals(Arrays.asList(6, 7, 8), instance.convertWorkingDaysToDays(5));
assertEquals(singletonList(9), instance.convertWorkingDaysToDays(6));
assertEquals(singletonList(10), instance.convertWorkingDaysToDays(7));
assertEquals(singletonList(11), instance.convertWorkingDaysToDays(8));
assertEquals(singletonList(12), instance.convertWorkingDaysToDays(9));
assertEquals(Arrays.asList(13, 14, 15), instance.convertWorkingDaysToDays(10));
assertEquals(singletonList(16), instance.convertWorkingDaysToDays(11));
assertEquals(singletonList(12), instance.convertWorkingDaysToDays(12));
assertEquals(singletonList(13), instance.convertWorkingDaysToDays(13));
}
@Test
void testConvertWorkingDaysToDaysOnEasterSunday() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-04-01T00:00:00.000Z"));
assertEquals(singletonList(-13), instance.convertWorkingDaysToDays(-13));
assertEquals(singletonList(-12), instance.convertWorkingDaysToDays(-12));
assertEquals(singletonList(-12), instance.convertWorkingDaysToDays(-8));
assertEquals(singletonList(-11), instance.convertWorkingDaysToDays(-7));
assertEquals(singletonList(-10), instance.convertWorkingDaysToDays(-6));
assertEquals(singletonList(-9), instance.convertWorkingDaysToDays(-5));
assertEquals(Arrays.asList(-6, -7, -8), instance.convertWorkingDaysToDays(-4));
assertEquals(singletonList(-5), instance.convertWorkingDaysToDays(-3));
assertEquals(singletonList(-4), instance.convertWorkingDaysToDays(-2));
assertEquals(singletonList(-3), instance.convertWorkingDaysToDays(-1));
assertEquals(Arrays.asList(0, 1, -1, -2), instance.convertWorkingDaysToDays(0));
assertEquals(singletonList(2), instance.convertWorkingDaysToDays(1));
assertEquals(singletonList(3), instance.convertWorkingDaysToDays(2));
assertEquals(singletonList(4), instance.convertWorkingDaysToDays(3));
assertEquals(Arrays.asList(5, 6, 7), instance.convertWorkingDaysToDays(4));
assertEquals(singletonList(8), instance.convertWorkingDaysToDays(5));
assertEquals(singletonList(9), instance.convertWorkingDaysToDays(6));
assertEquals(singletonList(10), instance.convertWorkingDaysToDays(7));
assertEquals(singletonList(11), instance.convertWorkingDaysToDays(8));
assertEquals(Arrays.asList(12, 13, 14), instance.convertWorkingDaysToDays(9));
assertEquals(singletonList(15), instance.convertWorkingDaysToDays(10));
assertEquals(singletonList(16), instance.convertWorkingDaysToDays(11));
assertEquals(singletonList(12), instance.convertWorkingDaysToDays(12));
assertEquals(singletonList(13), instance.convertWorkingDaysToDays(13));
}
@Test
void testEasterHolidays() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-03-28T00:00:00.000Z"));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(1, instance.convertDaysToWorkingDays(1));
assertEquals(1, instance.convertDaysToWorkingDays(2));
assertEquals(1, instance.convertDaysToWorkingDays(3));
assertEquals(1, instance.convertDaysToWorkingDays(4));
assertEquals(1, instance.convertDaysToWorkingDays(5));
assertEquals(2, instance.convertDaysToWorkingDays(6));
}
@Test
void testWhitsunHolidays() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-05-16T00:00:00.000Z"));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(1, instance.convertDaysToWorkingDays(1));
assertEquals(2, instance.convertDaysToWorkingDays(2));
assertEquals(2, instance.convertDaysToWorkingDays(3));
assertEquals(2, instance.convertDaysToWorkingDays(4));
assertEquals(2, instance.convertDaysToWorkingDays(5));
assertEquals(3, instance.convertDaysToWorkingDays(6));
}
@Test
void testLabourDayHoliday() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-04-26T00:00:00.000Z"));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(1, instance.convertDaysToWorkingDays(1));
assertEquals(1, instance.convertDaysToWorkingDays(2));
assertEquals(1, instance.convertDaysToWorkingDays(3));
assertEquals(2, instance.convertDaysToWorkingDays(4));
assertEquals(2, instance.convertDaysToWorkingDays(5));
assertEquals(3, instance.convertDaysToWorkingDays(6));
assertEquals(4, instance.convertDaysToWorkingDays(7));
}
@Test
void testAscensionDayHoliday() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-05-07T00:00:00.000Z"));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(1, instance.convertDaysToWorkingDays(1));
assertEquals(2, instance.convertDaysToWorkingDays(2));
assertEquals(2, instance.convertDaysToWorkingDays(3));
assertEquals(3, instance.convertDaysToWorkingDays(4));
assertEquals(3, instance.convertDaysToWorkingDays(5));
assertEquals(3, instance.convertDaysToWorkingDays(6));
assertEquals(4, instance.convertDaysToWorkingDays(7));
}
@Test
void testDayOfGermanUnityHoliday() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-10-01T00:00:00.000Z"));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(1, instance.convertDaysToWorkingDays(1));
assertEquals(1, instance.convertDaysToWorkingDays(2));
assertEquals(2, instance.convertDaysToWorkingDays(3));
assertEquals(3, instance.convertDaysToWorkingDays(4));
assertEquals(3, instance.convertDaysToWorkingDays(5));
assertEquals(3, instance.convertDaysToWorkingDays(6));
assertEquals(4, instance.convertDaysToWorkingDays(7));
}
@Test
void testChristmasAndNewYearHolidays() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-12-20T00:00:00.000Z"));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(1, instance.convertDaysToWorkingDays(1));
assertEquals(1, instance.convertDaysToWorkingDays(2));
assertEquals(1, instance.convertDaysToWorkingDays(3));
assertEquals(2, instance.convertDaysToWorkingDays(4));
assertEquals(2, instance.convertDaysToWorkingDays(5));
assertEquals(2, instance.convertDaysToWorkingDays(6));
assertEquals(3, instance.convertDaysToWorkingDays(7));
assertEquals(4, instance.convertDaysToWorkingDays(8));
assertEquals(4, instance.convertDaysToWorkingDays(9));
assertEquals(4, instance.convertDaysToWorkingDays(10));
assertEquals(5, instance.convertDaysToWorkingDays(11));
assertEquals(5, instance.convertDaysToWorkingDays(12));
assertEquals(6, instance.convertDaysToWorkingDays(13));
assertEquals(7, instance.convertDaysToWorkingDays(14));
}
@Test
void testCustomHolidaysWithDayOfReformationAndAllSaintsDay() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-10-26T00:00:00.000Z"));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(0, instance.convertDaysToWorkingDays(1));
assertEquals(0, instance.convertDaysToWorkingDays(2));
assertEquals(1, instance.convertDaysToWorkingDays(3));
assertEquals(2, instance.convertDaysToWorkingDays(4));
assertEquals(2, instance.convertDaysToWorkingDays(5));
assertEquals(2, instance.convertDaysToWorkingDays(6));
assertEquals(3, instance.convertDaysToWorkingDays(7));
}
@Test
void testGetEasterSunday() {
@ -382,28 +123,4 @@ class WorkingDaysToDaysConverterTest {
assertEquals(LocalDate.of(2050, 4, 10), getEasterSunday(2050));
assertEquals(LocalDate.of(2100, 3, 28), getEasterSunday(2100));
}
private List<TimeIntervalColumnHeader> getShortListOfColumnHeaders() {
List<TimeIntervalColumnHeader> columnHeaders = new ArrayList<>();
columnHeaders.add(new TimeIntervalColumnHeader(Integer.MIN_VALUE, -3));
columnHeaders.add(new TimeIntervalColumnHeader(-1, -2));
columnHeaders.add(new TimeIntervalColumnHeader(0));
columnHeaders.add(new TimeIntervalColumnHeader(1, 2));
columnHeaders.add(new TimeIntervalColumnHeader(3, Integer.MAX_VALUE));
return columnHeaders;
}
private List<TimeIntervalColumnHeader> getLargeListOfColumnHeaders() {
List<TimeIntervalColumnHeader> columnHeaders = new ArrayList<>();
columnHeaders.add(new TimeIntervalColumnHeader(Integer.MIN_VALUE, -11));
columnHeaders.add(new TimeIntervalColumnHeader(-10, -6));
columnHeaders.add(new TimeIntervalColumnHeader(-5, -2));
columnHeaders.add(new TimeIntervalColumnHeader(-1));
columnHeaders.add(new TimeIntervalColumnHeader(0));
columnHeaders.add(new TimeIntervalColumnHeader(1));
columnHeaders.add(new TimeIntervalColumnHeader(2, 5));
columnHeaders.add(new TimeIntervalColumnHeader(6, 10));
columnHeaders.add(new TimeIntervalColumnHeader(11, Integer.MAX_VALUE));
return columnHeaders;
}
}

View File

@ -1,310 +0,0 @@
package pro.taskana.monitor.internal;
import static java.util.Collections.singletonList;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import java.time.Instant;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.common.internal.util.WorkingDaysToDaysConverter;
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
import pro.taskana.monitor.internal.preprocessor.DaysToWorkingDaysReportConverter;
/** Test for the DaysToWorkingDaysReportConverter. */
class DaysToWorkingDaysReportConverterTest {
@BeforeAll
static void setup() {
WorkingDaysToDaysConverter.setGermanPublicHolidaysEnabled(true);
LocalDate dayOfReformation = LocalDate.of(2018, 10, 31);
LocalDate allSaintsDays = LocalDate.of(2018, 11, 1);
WorkingDaysToDaysConverter.setCustomHolidays(Arrays.asList(dayOfReformation, allSaintsDays));
}
@Test
void testInitializeForDifferentDates() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance1 =
DaysToWorkingDaysReportConverter.initialize(
getShortListOfColumnHeaders(), Instant.parse("2018-02-04T00:00:00.000Z"));
DaysToWorkingDaysReportConverter instance2 =
DaysToWorkingDaysReportConverter.initialize(
getShortListOfColumnHeaders(), Instant.parse("2018-02-05T00:00:00.000Z"));
assertNotEquals(instance1, instance2);
}
@Test
void testConvertDaysToWorkingDays() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-02-06T00:00:00.000Z"));
assertEquals(-16, instance.convertDaysToWorkingDays(-16));
assertEquals(-11, instance.convertDaysToWorkingDays(-15));
assertEquals(-2, instance.convertDaysToWorkingDays(-4));
assertEquals(-1, instance.convertDaysToWorkingDays(-3));
assertEquals(-1, instance.convertDaysToWorkingDays(-2));
assertEquals(-1, instance.convertDaysToWorkingDays(-1));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(1, instance.convertDaysToWorkingDays(1));
assertEquals(2, instance.convertDaysToWorkingDays(2));
assertEquals(3, instance.convertDaysToWorkingDays(3));
assertEquals(3, instance.convertDaysToWorkingDays(4));
assertEquals(3, instance.convertDaysToWorkingDays(5));
assertEquals(4, instance.convertDaysToWorkingDays(6));
assertEquals(11, instance.convertDaysToWorkingDays(15));
assertEquals(16, instance.convertDaysToWorkingDays(16));
}
@Test
void testConvertWorkingDaysToDays() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-02-27T00:00:00.000Z"));
assertEquals(singletonList(-13), instance.convertWorkingDaysToDays(-13));
assertEquals(singletonList(-12), instance.convertWorkingDaysToDays(-12));
assertEquals(singletonList(-12), instance.convertWorkingDaysToDays(-8));
assertEquals(singletonList(-11), instance.convertWorkingDaysToDays(-7));
assertEquals(Arrays.asList(-8, -9, -10), instance.convertWorkingDaysToDays(-6));
assertEquals(singletonList(-7), instance.convertWorkingDaysToDays(-5));
assertEquals(singletonList(-6), instance.convertWorkingDaysToDays(-4));
assertEquals(singletonList(-5), instance.convertWorkingDaysToDays(-3));
assertEquals(singletonList(-4), instance.convertWorkingDaysToDays(-2));
assertEquals(Arrays.asList(-1, -2, -3), instance.convertWorkingDaysToDays(-1));
assertEquals(singletonList(0), instance.convertWorkingDaysToDays(0));
assertEquals(singletonList(1), instance.convertWorkingDaysToDays(1));
assertEquals(singletonList(2), instance.convertWorkingDaysToDays(2));
assertEquals(Arrays.asList(3, 4, 5), instance.convertWorkingDaysToDays(3));
assertEquals(singletonList(6), instance.convertWorkingDaysToDays(4));
assertEquals(singletonList(7), instance.convertWorkingDaysToDays(5));
assertEquals(singletonList(8), instance.convertWorkingDaysToDays(6));
assertEquals(singletonList(9), instance.convertWorkingDaysToDays(7));
assertEquals(Arrays.asList(10, 11, 12), instance.convertWorkingDaysToDays(8));
assertEquals(singletonList(13), instance.convertWorkingDaysToDays(9));
assertEquals(singletonList(14), instance.convertWorkingDaysToDays(10));
assertEquals(singletonList(15), instance.convertWorkingDaysToDays(11));
assertEquals(singletonList(12), instance.convertWorkingDaysToDays(12));
assertEquals(singletonList(13), instance.convertWorkingDaysToDays(13));
}
@Test
void testConvertWorkingDaysToDaysAtWeekend() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-03-10T00:00:00.000Z"));
assertEquals(singletonList(-13), instance.convertWorkingDaysToDays(-13));
assertEquals(singletonList(-12), instance.convertWorkingDaysToDays(-12));
assertEquals(singletonList(-10), instance.convertWorkingDaysToDays(-8));
assertEquals(singletonList(-9), instance.convertWorkingDaysToDays(-7));
assertEquals(singletonList(-8), instance.convertWorkingDaysToDays(-6));
assertEquals(Arrays.asList(-5, -6, -7), instance.convertWorkingDaysToDays(-5));
assertEquals(singletonList(-4), instance.convertWorkingDaysToDays(-4));
assertEquals(singletonList(-3), instance.convertWorkingDaysToDays(-3));
assertEquals(singletonList(-2), instance.convertWorkingDaysToDays(-2));
assertEquals(singletonList(-1), instance.convertWorkingDaysToDays(-1));
assertEquals(Arrays.asList(0, 1), instance.convertWorkingDaysToDays(0));
assertEquals(singletonList(2), instance.convertWorkingDaysToDays(1));
assertEquals(singletonList(3), instance.convertWorkingDaysToDays(2));
assertEquals(singletonList(4), instance.convertWorkingDaysToDays(3));
assertEquals(singletonList(5), instance.convertWorkingDaysToDays(4));
assertEquals(Arrays.asList(6, 7, 8), instance.convertWorkingDaysToDays(5));
assertEquals(singletonList(9), instance.convertWorkingDaysToDays(6));
assertEquals(singletonList(10), instance.convertWorkingDaysToDays(7));
assertEquals(singletonList(11), instance.convertWorkingDaysToDays(8));
assertEquals(singletonList(12), instance.convertWorkingDaysToDays(9));
assertEquals(Arrays.asList(13, 14, 15), instance.convertWorkingDaysToDays(10));
assertEquals(singletonList(16), instance.convertWorkingDaysToDays(11));
assertEquals(singletonList(12), instance.convertWorkingDaysToDays(12));
assertEquals(singletonList(13), instance.convertWorkingDaysToDays(13));
}
@Test
void testConvertWorkingDaysToDaysOnEasterSunday() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-04-01T00:00:00.000Z"));
assertEquals(singletonList(-13), instance.convertWorkingDaysToDays(-13));
assertEquals(singletonList(-12), instance.convertWorkingDaysToDays(-12));
assertEquals(singletonList(-12), instance.convertWorkingDaysToDays(-8));
assertEquals(singletonList(-11), instance.convertWorkingDaysToDays(-7));
assertEquals(singletonList(-10), instance.convertWorkingDaysToDays(-6));
assertEquals(singletonList(-9), instance.convertWorkingDaysToDays(-5));
assertEquals(Arrays.asList(-6, -7, -8), instance.convertWorkingDaysToDays(-4));
assertEquals(singletonList(-5), instance.convertWorkingDaysToDays(-3));
assertEquals(singletonList(-4), instance.convertWorkingDaysToDays(-2));
assertEquals(singletonList(-3), instance.convertWorkingDaysToDays(-1));
assertEquals(Arrays.asList(0, 1, -1, -2), instance.convertWorkingDaysToDays(0));
assertEquals(singletonList(2), instance.convertWorkingDaysToDays(1));
assertEquals(singletonList(3), instance.convertWorkingDaysToDays(2));
assertEquals(singletonList(4), instance.convertWorkingDaysToDays(3));
assertEquals(Arrays.asList(5, 6, 7), instance.convertWorkingDaysToDays(4));
assertEquals(singletonList(8), instance.convertWorkingDaysToDays(5));
assertEquals(singletonList(9), instance.convertWorkingDaysToDays(6));
assertEquals(singletonList(10), instance.convertWorkingDaysToDays(7));
assertEquals(singletonList(11), instance.convertWorkingDaysToDays(8));
assertEquals(Arrays.asList(12, 13, 14), instance.convertWorkingDaysToDays(9));
assertEquals(singletonList(15), instance.convertWorkingDaysToDays(10));
assertEquals(singletonList(16), instance.convertWorkingDaysToDays(11));
assertEquals(singletonList(12), instance.convertWorkingDaysToDays(12));
assertEquals(singletonList(13), instance.convertWorkingDaysToDays(13));
}
@Test
void testEasterHolidays() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-03-28T00:00:00.000Z"));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(1, instance.convertDaysToWorkingDays(1));
assertEquals(1, instance.convertDaysToWorkingDays(2));
assertEquals(1, instance.convertDaysToWorkingDays(3));
assertEquals(1, instance.convertDaysToWorkingDays(4));
assertEquals(1, instance.convertDaysToWorkingDays(5));
assertEquals(2, instance.convertDaysToWorkingDays(6));
}
@Test
void testWhitsunHolidays() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-05-16T00:00:00.000Z"));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(1, instance.convertDaysToWorkingDays(1));
assertEquals(2, instance.convertDaysToWorkingDays(2));
assertEquals(2, instance.convertDaysToWorkingDays(3));
assertEquals(2, instance.convertDaysToWorkingDays(4));
assertEquals(2, instance.convertDaysToWorkingDays(5));
assertEquals(3, instance.convertDaysToWorkingDays(6));
}
@Test
void testLabourDayHoliday() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-04-26T00:00:00.000Z"));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(1, instance.convertDaysToWorkingDays(1));
assertEquals(1, instance.convertDaysToWorkingDays(2));
assertEquals(1, instance.convertDaysToWorkingDays(3));
assertEquals(2, instance.convertDaysToWorkingDays(4));
assertEquals(2, instance.convertDaysToWorkingDays(5));
assertEquals(3, instance.convertDaysToWorkingDays(6));
assertEquals(4, instance.convertDaysToWorkingDays(7));
}
@Test
void testAscensionDayHoliday() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-05-07T00:00:00.000Z"));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(1, instance.convertDaysToWorkingDays(1));
assertEquals(2, instance.convertDaysToWorkingDays(2));
assertEquals(2, instance.convertDaysToWorkingDays(3));
assertEquals(3, instance.convertDaysToWorkingDays(4));
assertEquals(3, instance.convertDaysToWorkingDays(5));
assertEquals(3, instance.convertDaysToWorkingDays(6));
assertEquals(4, instance.convertDaysToWorkingDays(7));
}
@Test
void testDayOfGermanUnityHoliday() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-10-01T00:00:00.000Z"));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(1, instance.convertDaysToWorkingDays(1));
assertEquals(1, instance.convertDaysToWorkingDays(2));
assertEquals(2, instance.convertDaysToWorkingDays(3));
assertEquals(3, instance.convertDaysToWorkingDays(4));
assertEquals(3, instance.convertDaysToWorkingDays(5));
assertEquals(3, instance.convertDaysToWorkingDays(6));
assertEquals(4, instance.convertDaysToWorkingDays(7));
}
@Test
void testChristmasAndNewYearHolidays() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-12-20T00:00:00.000Z"));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(1, instance.convertDaysToWorkingDays(1));
assertEquals(1, instance.convertDaysToWorkingDays(2));
assertEquals(1, instance.convertDaysToWorkingDays(3));
assertEquals(2, instance.convertDaysToWorkingDays(4));
assertEquals(2, instance.convertDaysToWorkingDays(5));
assertEquals(2, instance.convertDaysToWorkingDays(6));
assertEquals(3, instance.convertDaysToWorkingDays(7));
assertEquals(4, instance.convertDaysToWorkingDays(8));
assertEquals(4, instance.convertDaysToWorkingDays(9));
assertEquals(4, instance.convertDaysToWorkingDays(10));
assertEquals(5, instance.convertDaysToWorkingDays(11));
assertEquals(5, instance.convertDaysToWorkingDays(12));
assertEquals(6, instance.convertDaysToWorkingDays(13));
assertEquals(7, instance.convertDaysToWorkingDays(14));
}
@Test
void testCustomHolidaysWithDayOfReformationAndAllSaintsDay() throws InvalidArgumentException {
DaysToWorkingDaysReportConverter instance =
DaysToWorkingDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-10-26T00:00:00.000Z"));
assertEquals(0, instance.convertDaysToWorkingDays(0));
assertEquals(0, instance.convertDaysToWorkingDays(1));
assertEquals(0, instance.convertDaysToWorkingDays(2));
assertEquals(1, instance.convertDaysToWorkingDays(3));
assertEquals(2, instance.convertDaysToWorkingDays(4));
assertEquals(2, instance.convertDaysToWorkingDays(5));
assertEquals(2, instance.convertDaysToWorkingDays(6));
assertEquals(3, instance.convertDaysToWorkingDays(7));
}
private List<TimeIntervalColumnHeader> getShortListOfColumnHeaders() {
List<TimeIntervalColumnHeader> columnHeaders = new ArrayList<>();
columnHeaders.add(new TimeIntervalColumnHeader(Integer.MIN_VALUE, -3));
columnHeaders.add(new TimeIntervalColumnHeader(-1, -2));
columnHeaders.add(new TimeIntervalColumnHeader(0));
columnHeaders.add(new TimeIntervalColumnHeader(1, 2));
columnHeaders.add(new TimeIntervalColumnHeader(3, Integer.MAX_VALUE));
return columnHeaders;
}
private List<TimeIntervalColumnHeader> getLargeListOfColumnHeaders() {
List<TimeIntervalColumnHeader> columnHeaders = new ArrayList<>();
columnHeaders.add(new TimeIntervalColumnHeader(Integer.MIN_VALUE, -11));
columnHeaders.add(new TimeIntervalColumnHeader(-10, -6));
columnHeaders.add(new TimeIntervalColumnHeader(-5, -2));
columnHeaders.add(new TimeIntervalColumnHeader(-1));
columnHeaders.add(new TimeIntervalColumnHeader(0));
columnHeaders.add(new TimeIntervalColumnHeader(1));
columnHeaders.add(new TimeIntervalColumnHeader(2, 5));
columnHeaders.add(new TimeIntervalColumnHeader(6, 10));
columnHeaders.add(new TimeIntervalColumnHeader(11, Integer.MAX_VALUE));
return columnHeaders;
}
}

View File

@ -0,0 +1,341 @@
package pro.taskana.monitor.internal;
import static org.assertj.core.api.Assertions.assertThat;
import java.time.Instant;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.common.internal.util.WorkingDaysToDaysConverter;
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
import pro.taskana.monitor.internal.preprocessor.WorkingDaysToDaysReportConverter;
/** Test for the DaysToWorkingDaysReportConverter. */
class WorkingDaysToDaysReportConverterTest {
@BeforeAll
static void setup() {
WorkingDaysToDaysConverter.setGermanPublicHolidaysEnabled(true);
LocalDate dayOfReformation = LocalDate.of(2018, 10, 31);
LocalDate allSaintsDays = LocalDate.of(2018, 11, 1);
WorkingDaysToDaysConverter.setCustomHolidays(Arrays.asList(dayOfReformation, allSaintsDays));
}
@Test
void should_AssertNotEqual_When_InitializingDifferentDates() throws InvalidArgumentException {
WorkingDaysToDaysReportConverter instance1 =
WorkingDaysToDaysReportConverter.initialize(
getShortListOfColumnHeaders(), Instant.parse("2018-02-04T00:00:00.000Z"));
WorkingDaysToDaysReportConverter instance2 =
WorkingDaysToDaysReportConverter.initialize(
getShortListOfColumnHeaders(), Instant.parse("2018-02-05T00:00:00.000Z"));
assertThat(instance1).isNotEqualTo(instance2);
}
@Test
void should_ReturnWorkingDays_When_ConvertingDaysToWorkingDays() throws InvalidArgumentException {
WorkingDaysToDaysReportConverter instance =
WorkingDaysToDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-02-06T00:00:00.000Z"));
int oneBelowLimit = -16;
int oneAboveLimit = 16;
assertThat(instance.convertDaysToWorkingDays(oneBelowLimit)).isEqualTo(oneBelowLimit);
assertThat(instance.convertDaysToWorkingDays(-15)).isEqualTo(-11);
assertThat(instance.convertDaysToWorkingDays(-4)).isEqualTo(-2);
assertThat(instance.convertDaysToWorkingDays(-3)).isEqualTo(-1);
assertThat(instance.convertDaysToWorkingDays(-2)).isEqualTo(-1);
assertThat(instance.convertDaysToWorkingDays(-1)).isEqualTo(-1);
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(3);
assertThat(instance.convertDaysToWorkingDays(4)).isEqualTo(3);
assertThat(instance.convertDaysToWorkingDays(5)).isEqualTo(3);
assertThat(instance.convertDaysToWorkingDays(6)).isEqualTo(4);
assertThat(instance.convertDaysToWorkingDays(15)).isEqualTo(11);
assertThat(instance.convertDaysToWorkingDays(oneAboveLimit)).isEqualTo(oneAboveLimit);
}
@Test
void should_ReturnWorkingDaysUnchanged_When_ConvertingWorkingDaysOutOfNegativeLimit()
throws InvalidArgumentException {
WorkingDaysToDaysReportConverter instance =
WorkingDaysToDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-02-06T00:00:00.000Z"));
assertThat(instance.convertWorkingDaysToDays(-999)).containsExactlyInAnyOrder(-999);
}
@Test
void should_ReturnWorkingDaysUnchanged_When_ConvertingWorkingDaysOutOfPositiveLimit()
throws InvalidArgumentException {
WorkingDaysToDaysReportConverter instance =
WorkingDaysToDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-02-06T00:00:00.000Z"));
assertThat(instance.convertWorkingDaysToDays(999)).containsExactlyInAnyOrder(999);
}
@Test
void should_ReturnAllMatchingDays_When_ConvertingWorkingDaysToDays()
throws InvalidArgumentException {
WorkingDaysToDaysReportConverter instance =
WorkingDaysToDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-02-27T00:00:00.000Z"));
assertThat(instance.convertWorkingDaysToDays(-13)).containsExactlyInAnyOrder(-13);
assertThat(instance.convertWorkingDaysToDays(-12)).containsExactlyInAnyOrder(-12);
assertThat(instance.convertWorkingDaysToDays(-8)).containsExactlyInAnyOrder(-12);
assertThat(instance.convertWorkingDaysToDays(-7)).containsExactlyInAnyOrder(-11);
assertThat(instance.convertWorkingDaysToDays(-6)).containsExactlyInAnyOrder(-10, -9, -8);
assertThat(instance.convertWorkingDaysToDays(-5)).containsExactlyInAnyOrder(-7);
assertThat(instance.convertWorkingDaysToDays(-4)).containsExactlyInAnyOrder(-6);
assertThat(instance.convertWorkingDaysToDays(-3)).containsExactlyInAnyOrder(-5);
assertThat(instance.convertWorkingDaysToDays(-2)).containsExactlyInAnyOrder(-4);
assertThat(instance.convertWorkingDaysToDays(-1)).containsExactlyInAnyOrder(-1, -2, -3);
assertThat(instance.convertWorkingDaysToDays(0)).containsExactlyInAnyOrder(0);
assertThat(instance.convertWorkingDaysToDays(1)).containsExactlyInAnyOrder(1);
assertThat(instance.convertWorkingDaysToDays(2)).containsExactlyInAnyOrder(2);
assertThat(instance.convertWorkingDaysToDays(3)).containsExactlyInAnyOrder(3, 4, 5);
assertThat(instance.convertWorkingDaysToDays(4)).containsExactlyInAnyOrder(6);
assertThat(instance.convertWorkingDaysToDays(5)).containsExactlyInAnyOrder(7);
assertThat(instance.convertWorkingDaysToDays(6)).containsExactlyInAnyOrder(8);
assertThat(instance.convertWorkingDaysToDays(7)).containsExactlyInAnyOrder(9);
assertThat(instance.convertWorkingDaysToDays(8)).containsExactlyInAnyOrder(10, 11, 12);
assertThat(instance.convertWorkingDaysToDays(9)).containsExactlyInAnyOrder(13);
assertThat(instance.convertWorkingDaysToDays(10)).containsExactlyInAnyOrder(14);
assertThat(instance.convertWorkingDaysToDays(11)).containsExactlyInAnyOrder(15);
assertThat(instance.convertWorkingDaysToDays(12)).containsExactlyInAnyOrder(12);
assertThat(instance.convertWorkingDaysToDays(13)).containsExactlyInAnyOrder(13);
}
@Test
void should_ReturnAllMatchingDays_When_ConvertingWorkingDaysToDaysAtWeekend()
throws InvalidArgumentException {
WorkingDaysToDaysReportConverter instance =
WorkingDaysToDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-03-10T00:00:00.000Z"));
assertThat(instance.convertWorkingDaysToDays(-13)).containsExactlyInAnyOrder(-13);
assertThat(instance.convertWorkingDaysToDays(-12)).containsExactlyInAnyOrder(-12);
assertThat(instance.convertWorkingDaysToDays(-8)).containsExactlyInAnyOrder(-10);
assertThat(instance.convertWorkingDaysToDays(-7)).containsExactlyInAnyOrder(-9);
assertThat(instance.convertWorkingDaysToDays(-6)).containsExactlyInAnyOrder(-8);
assertThat(instance.convertWorkingDaysToDays(-5)).containsExactlyInAnyOrder(-5, -6, -7);
assertThat(instance.convertWorkingDaysToDays(-4)).containsExactlyInAnyOrder(-4);
assertThat(instance.convertWorkingDaysToDays(-3)).containsExactlyInAnyOrder(-3);
assertThat(instance.convertWorkingDaysToDays(-2)).containsExactlyInAnyOrder(-2);
assertThat(instance.convertWorkingDaysToDays(-1)).containsExactlyInAnyOrder(-1);
assertThat(instance.convertWorkingDaysToDays(0)).containsExactlyInAnyOrder(0, 1);
assertThat(instance.convertWorkingDaysToDays(1)).containsExactlyInAnyOrder(2);
assertThat(instance.convertWorkingDaysToDays(2)).containsExactlyInAnyOrder(3);
assertThat(instance.convertWorkingDaysToDays(3)).containsExactlyInAnyOrder(4);
assertThat(instance.convertWorkingDaysToDays(4)).containsExactlyInAnyOrder(5);
assertThat(instance.convertWorkingDaysToDays(5)).containsExactlyInAnyOrder(6, 7, 8);
assertThat(instance.convertWorkingDaysToDays(6)).containsExactlyInAnyOrder(9);
assertThat(instance.convertWorkingDaysToDays(7)).containsExactlyInAnyOrder(10);
assertThat(instance.convertWorkingDaysToDays(8)).containsExactlyInAnyOrder(11);
assertThat(instance.convertWorkingDaysToDays(9)).containsExactlyInAnyOrder(12);
assertThat(instance.convertWorkingDaysToDays(10)).containsExactlyInAnyOrder(13, 14, 15);
assertThat(instance.convertWorkingDaysToDays(11)).containsExactlyInAnyOrder(16);
assertThat(instance.convertWorkingDaysToDays(12)).containsExactlyInAnyOrder(12);
assertThat(instance.convertWorkingDaysToDays(13)).containsExactlyInAnyOrder(13);
}
@Test
void should_ReturnAllMatchingDays_When_ConvertingWorkingDaysToDaysOnEasterSunday()
throws InvalidArgumentException {
WorkingDaysToDaysReportConverter instance =
WorkingDaysToDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-04-01T00:00:00.000Z"));
assertThat(instance.convertWorkingDaysToDays(-13)).containsExactlyInAnyOrder(-13);
assertThat(instance.convertWorkingDaysToDays(-12)).containsExactlyInAnyOrder(-12);
assertThat(instance.convertWorkingDaysToDays(-8)).containsExactlyInAnyOrder(-12);
assertThat(instance.convertWorkingDaysToDays(-7)).containsExactlyInAnyOrder(-11);
assertThat(instance.convertWorkingDaysToDays(-6)).containsExactlyInAnyOrder(-10);
assertThat(instance.convertWorkingDaysToDays(-5)).containsExactlyInAnyOrder(-9);
assertThat(instance.convertWorkingDaysToDays(-4)).containsExactlyInAnyOrder(-6, -7, -8);
assertThat(instance.convertWorkingDaysToDays(-3)).containsExactlyInAnyOrder(-5);
assertThat(instance.convertWorkingDaysToDays(-2)).containsExactlyInAnyOrder(-4);
assertThat(instance.convertWorkingDaysToDays(-1)).containsExactlyInAnyOrder(-3);
assertThat(instance.convertWorkingDaysToDays(0)).containsExactlyInAnyOrder(0, 1, -1, -2);
assertThat(instance.convertWorkingDaysToDays(1)).containsExactlyInAnyOrder(2);
assertThat(instance.convertWorkingDaysToDays(2)).containsExactlyInAnyOrder(3);
assertThat(instance.convertWorkingDaysToDays(3)).containsExactlyInAnyOrder(4);
assertThat(instance.convertWorkingDaysToDays(4)).containsExactlyInAnyOrder(5, 6, 7);
assertThat(instance.convertWorkingDaysToDays(5)).containsExactlyInAnyOrder(8);
assertThat(instance.convertWorkingDaysToDays(6)).containsExactlyInAnyOrder(9);
assertThat(instance.convertWorkingDaysToDays(7)).containsExactlyInAnyOrder(10);
assertThat(instance.convertWorkingDaysToDays(8)).containsExactlyInAnyOrder(11);
assertThat(instance.convertWorkingDaysToDays(9)).containsExactlyInAnyOrder(12, 13, 14);
assertThat(instance.convertWorkingDaysToDays(10)).containsExactlyInAnyOrder(15);
assertThat(instance.convertWorkingDaysToDays(11)).containsExactlyInAnyOrder(16);
assertThat(instance.convertWorkingDaysToDays(12)).containsExactlyInAnyOrder(12);
assertThat(instance.convertWorkingDaysToDays(13)).containsExactlyInAnyOrder(13);
}
@Test
void should_ReturnWorkingDays_When_ConvertingDaysToWorkingDaysOnEasterHolidays()
throws InvalidArgumentException {
WorkingDaysToDaysReportConverter instance =
WorkingDaysToDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-03-28T00:00:00.000Z"));
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(4)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(5)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(6)).isEqualTo(2);
}
@Test
void should_ReturnWorkingDays_When_ConvertingDaysToWorkingDaysOnWhitsunHolidays()
throws InvalidArgumentException {
WorkingDaysToDaysReportConverter instance =
WorkingDaysToDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-05-16T00:00:00.000Z"));
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(4)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(5)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(6)).isEqualTo(3);
}
@Test
void should_ReturnWorkingDays_When_ConvertingDaysToWorkingDaysOnLabourDay()
throws InvalidArgumentException {
WorkingDaysToDaysReportConverter instance =
WorkingDaysToDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-04-26T00:00:00.000Z"));
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(4)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(5)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(6)).isEqualTo(3);
assertThat(instance.convertDaysToWorkingDays(7)).isEqualTo(4);
}
@Test
void should_ReturnWorkingDays_When_ConvertingDaysToWorkingDaysOnAscensionDay()
throws InvalidArgumentException {
WorkingDaysToDaysReportConverter instance =
WorkingDaysToDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-05-07T00:00:00.000Z"));
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(4)).isEqualTo(3);
assertThat(instance.convertDaysToWorkingDays(5)).isEqualTo(3);
assertThat(instance.convertDaysToWorkingDays(6)).isEqualTo(3);
assertThat(instance.convertDaysToWorkingDays(7)).isEqualTo(4);
}
@Test
void should_ReturnWorkingDays_When_ConvertingDaysToWorkingDaysOnDayOfGermanUnity()
throws InvalidArgumentException {
WorkingDaysToDaysReportConverter instance =
WorkingDaysToDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-10-01T00:00:00.000Z"));
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(4)).isEqualTo(3);
assertThat(instance.convertDaysToWorkingDays(5)).isEqualTo(3);
assertThat(instance.convertDaysToWorkingDays(6)).isEqualTo(3);
assertThat(instance.convertDaysToWorkingDays(7)).isEqualTo(4);
}
@Test
void should_ReturnWorkingDays_When_ConvertingDaysToWorkingDaysOnChristmasAndNewYearHolidays()
throws InvalidArgumentException {
WorkingDaysToDaysReportConverter instance =
WorkingDaysToDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-12-20T00:00:00.000Z"));
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(4)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(5)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(6)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(7)).isEqualTo(3);
assertThat(instance.convertDaysToWorkingDays(8)).isEqualTo(4);
assertThat(instance.convertDaysToWorkingDays(9)).isEqualTo(4);
assertThat(instance.convertDaysToWorkingDays(10)).isEqualTo(4);
assertThat(instance.convertDaysToWorkingDays(11)).isEqualTo(5);
assertThat(instance.convertDaysToWorkingDays(12)).isEqualTo(5);
assertThat(instance.convertDaysToWorkingDays(13)).isEqualTo(6);
assertThat(instance.convertDaysToWorkingDays(14)).isEqualTo(7);
}
@Test
void should_ReturnWorkingDays_When_ConvertingDaysToWorkingDaysOnCustomHoliday()
throws InvalidArgumentException {
WorkingDaysToDaysReportConverter instance =
WorkingDaysToDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), Instant.parse("2018-10-26T00:00:00.000Z"));
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(0);
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(0);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(4)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(5)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(6)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(7)).isEqualTo(3);
}
private List<TimeIntervalColumnHeader> getShortListOfColumnHeaders() {
List<TimeIntervalColumnHeader> columnHeaders = new ArrayList<>();
columnHeaders.add(new TimeIntervalColumnHeader(Integer.MIN_VALUE, -3));
columnHeaders.add(new TimeIntervalColumnHeader(-1, -2));
columnHeaders.add(new TimeIntervalColumnHeader(0));
columnHeaders.add(new TimeIntervalColumnHeader(1, 2));
columnHeaders.add(new TimeIntervalColumnHeader(3, Integer.MAX_VALUE));
return columnHeaders;
}
private List<TimeIntervalColumnHeader> getLargeListOfColumnHeaders() {
List<TimeIntervalColumnHeader> columnHeaders = new ArrayList<>();
columnHeaders.add(new TimeIntervalColumnHeader(Integer.MIN_VALUE, -11));
columnHeaders.add(new TimeIntervalColumnHeader(-10, -6));
columnHeaders.add(new TimeIntervalColumnHeader(-5, -2));
columnHeaders.add(new TimeIntervalColumnHeader(-1));
columnHeaders.add(new TimeIntervalColumnHeader(0));
columnHeaders.add(new TimeIntervalColumnHeader(1));
columnHeaders.add(new TimeIntervalColumnHeader(2, 5));
columnHeaders.add(new TimeIntervalColumnHeader(6, 10));
columnHeaders.add(new TimeIntervalColumnHeader(11, Integer.MAX_VALUE));
return columnHeaders;
}
}