TSK-1012: Add dynamic list of pojos for pojotesting

(cherry picked from commit a97fdfa4bdb7a99ab65638ee5e282a659c09e77d)
This commit is contained in:
Benjamin Eckstein 2020-01-06 17:23:35 +01:00 committed by Mustapha Zorgati
parent c500599e1c
commit ad15fedcab
3 changed files with 45 additions and 82 deletions

View File

@ -11,7 +11,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.LongStream;
import java.util.stream.Stream;
@ -290,25 +289,6 @@ public final class DaysToWorkingDaysConverter {
+ '}';
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
DaysToWorkingDaysConverter that = (DaysToWorkingDaysConverter) o;
return positiveDaysToWorkingDays.equals(that.positiveDaysToWorkingDays)
&& negativeDaysToWorkingDays.equals(that.negativeDaysToWorkingDays)
&& dateCreated.equals(that.dateCreated);
}
@Override
public int hashCode() {
return Objects.hash(positiveDaysToWorkingDays, negativeDaysToWorkingDays, dateCreated);
}
/**
* Enumeration of German holidays.
*/

View File

@ -4,7 +4,9 @@ import java.util.Collection;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestFactory;
import com.openpojo.reflection.impl.PojoClassFactory;
@ -17,24 +19,22 @@ import com.openpojo.validation.rule.impl.SetterMustExistRule;
import com.openpojo.validation.test.Tester;
import com.openpojo.validation.test.impl.GetterTester;
import com.openpojo.validation.test.impl.SetterTester;
import com.tngtech.archunit.core.domain.JavaClass;
import com.tngtech.archunit.core.importer.ClassFileImporter;
import nl.jqno.equalsverifier.EqualsVerifier;
import nl.jqno.equalsverifier.Warning;
import pro.taskana.impl.AttachmentImpl;
import pro.taskana.impl.AttachmentSummaryImpl;
import pro.taskana.impl.ClassificationImpl;
import pro.taskana.impl.ClassificationSummaryImpl;
import pro.taskana.impl.TaskImpl;
import pro.taskana.impl.TaskSummaryImpl;
import pro.taskana.impl.WorkbasketAccessItemImpl;
import pro.taskana.impl.WorkbasketImpl;
import pro.taskana.impl.WorkbasketSummaryImpl;
/**
* check classes with a custom equals and hashcode implementation for correctness.
*/
class PojoTest {
@Test
void testsThatPojoClassesAreFound() {
Assertions.assertTrue(getPojoClasses().count() > 0);
}
@TestFactory
Collection<DynamicTest> equalsContract() {
return
@ -46,7 +46,8 @@ class PojoTest {
@TestFactory
Collection<DynamicTest> validateGetters() {
return getPojoClasses()
return
getPojoClasses()
.map(cl -> DynamicTest.dynamicTest("Check Getter exist for " + cl.getSimpleName(),
() -> validateWithRules(cl, new GetterMustExistRule())
))
@ -55,7 +56,8 @@ class PojoTest {
@TestFactory
Collection<DynamicTest> validateSetters() {
return getPojoClasses()
return
getPojoClasses()
.map(cl -> DynamicTest.dynamicTest("Check Setter for " + cl.getSimpleName(),
() -> validateWithRules(cl, new SetterMustExistRule())
))
@ -64,7 +66,8 @@ class PojoTest {
@TestFactory
Collection<DynamicTest> validateGetAndSet() {
return getPojoClasses()
return
getPojoClasses()
.map(cl -> DynamicTest.dynamicTest("Test set & get " + cl.getSimpleName(),
() -> validateWithTester(cl, new GetterTester(), new SetterTester())
))
@ -73,7 +76,8 @@ class PojoTest {
@TestFactory
Collection<DynamicTest> validateNoStaticExceptFinalFields() {
return getPojoClasses()
return
getPojoClasses()
.map(cl -> DynamicTest.dynamicTest("Check static fields for " + cl.getSimpleName(),
() -> validateWithRules(cl, new NoStaticExceptFinalRule())
))
@ -82,7 +86,8 @@ class PojoTest {
@TestFactory
Collection<DynamicTest> validateNoPublicFields() {
return getPojoClasses()
return
getPojoClasses()
.map(cl -> DynamicTest.dynamicTest("Check public fields for " + cl.getSimpleName(),
() -> validateWithRules(cl, new NoPublicFieldsRule())
))
@ -110,21 +115,12 @@ class PojoTest {
.verify();
}
//TODO find a way to dynamically create a list with custom implemented equals or hash methods.
private Stream<Class<?>> getPojoClasses() {
return Stream.of(
KeyDomain.class,
ObjectReference.class,
TimeInterval.class,
AttachmentImpl.class,
AttachmentSummaryImpl.class,
ClassificationImpl.class,
ClassificationSummaryImpl.class,
TaskImpl.class,
TaskSummaryImpl.class,
WorkbasketAccessItemImpl.class,
WorkbasketImpl.class,
WorkbasketSummaryImpl.class
);
//TODO how to identify pojos? Is overwritten equals method enough?
return new ClassFileImporter().importPackages("pro.taskana")
.stream()
.filter(javaClass -> javaClass.tryGetMethod("equals", Object.class).isPresent())
.map(JavaClass::reflect);
}
}

View File

@ -30,19 +30,6 @@ class DaysToWorkingDaysConverterTest {
DaysToWorkingDaysConverter.setCustomHolidays(Arrays.asList(dayOfReformation, allSaintsDays));
}
@Test
void testInitializeForDifferentReportLineItemDefinitions() throws InvalidArgumentException {
DaysToWorkingDaysConverter instance1 = DaysToWorkingDaysConverter
.initialize(getShortListOfColumnHeaders(), Instant.parse("2018-02-03T00:00:00.000Z"));
DaysToWorkingDaysConverter instance2 = DaysToWorkingDaysConverter
.initialize(getShortListOfColumnHeaders(), Instant.parse("2018-02-03T00:00:00.000Z"));
DaysToWorkingDaysConverter instance3 = DaysToWorkingDaysConverter
.initialize(getLargeListOfColumnHeaders(), Instant.parse("2018-02-03T00:00:00.000Z"));
assertEquals(instance1, instance2);
assertNotEquals(instance1, instance3);
}
@Test
void testConvertWorkingDaysToDaysForTasks() throws InvalidArgumentException {
List<TimeIntervalColumnHeader> reportItems = singletonList(new TimeIntervalColumnHeader(0));