From ad15fedcab100c33f9bbce096af61ae31347e7ea Mon Sep 17 00:00:00 2001 From: Benjamin Eckstein <13351939+benjamineckstein@users.noreply.github.com> Date: Mon, 6 Jan 2020 17:23:35 +0100 Subject: [PATCH] TSK-1012: Add dynamic list of pojos for pojotesting (cherry picked from commit a97fdfa4bdb7a99ab65638ee5e282a659c09e77d) --- .../impl/DaysToWorkingDaysConverter.java | 20 ---- .../src/test/java/pro/taskana/PojoTest.java | 94 +++++++++---------- .../impl/DaysToWorkingDaysConverterTest.java | 13 --- 3 files changed, 45 insertions(+), 82 deletions(-) diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/DaysToWorkingDaysConverter.java b/lib/taskana-core/src/main/java/pro/taskana/impl/DaysToWorkingDaysConverter.java index f115f6339..70b52f16c 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/DaysToWorkingDaysConverter.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/DaysToWorkingDaysConverter.java @@ -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. */ diff --git a/lib/taskana-core/src/test/java/pro/taskana/PojoTest.java b/lib/taskana-core/src/test/java/pro/taskana/PojoTest.java index db85e6c67..ba9f29684 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/PojoTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/PojoTest.java @@ -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 equalsContract() { return @@ -46,47 +46,52 @@ class PojoTest { @TestFactory Collection validateGetters() { - return getPojoClasses() - .map(cl -> DynamicTest.dynamicTest("Check Getter exist for " + cl.getSimpleName(), - () -> validateWithRules(cl, new GetterMustExistRule()) - )) - .collect(Collectors.toList()); + return + getPojoClasses() + .map(cl -> DynamicTest.dynamicTest("Check Getter exist for " + cl.getSimpleName(), + () -> validateWithRules(cl, new GetterMustExistRule()) + )) + .collect(Collectors.toList()); } @TestFactory Collection validateSetters() { - return getPojoClasses() - .map(cl -> DynamicTest.dynamicTest("Check Setter for " + cl.getSimpleName(), - () -> validateWithRules(cl, new SetterMustExistRule()) - )) - .collect(Collectors.toList()); + return + getPojoClasses() + .map(cl -> DynamicTest.dynamicTest("Check Setter for " + cl.getSimpleName(), + () -> validateWithRules(cl, new SetterMustExistRule()) + )) + .collect(Collectors.toList()); } @TestFactory Collection validateGetAndSet() { - return getPojoClasses() - .map(cl -> DynamicTest.dynamicTest("Test set & get " + cl.getSimpleName(), - () -> validateWithTester(cl, new GetterTester(), new SetterTester()) - )) - .collect(Collectors.toList()); + return + getPojoClasses() + .map(cl -> DynamicTest.dynamicTest("Test set & get " + cl.getSimpleName(), + () -> validateWithTester(cl, new GetterTester(), new SetterTester()) + )) + .collect(Collectors.toList()); } @TestFactory Collection validateNoStaticExceptFinalFields() { - return getPojoClasses() - .map(cl -> DynamicTest.dynamicTest("Check static fields for " + cl.getSimpleName(), - () -> validateWithRules(cl, new NoStaticExceptFinalRule()) - )) - .collect(Collectors.toList()); + return + getPojoClasses() + .map(cl -> DynamicTest.dynamicTest("Check static fields for " + cl.getSimpleName(), + () -> validateWithRules(cl, new NoStaticExceptFinalRule()) + )) + .collect(Collectors.toList()); } @TestFactory Collection validateNoPublicFields() { - return getPojoClasses() - .map(cl -> DynamicTest.dynamicTest("Check public fields for " + cl.getSimpleName(), - () -> validateWithRules(cl, new NoPublicFieldsRule()) - )) - .collect(Collectors.toList()); + return + getPojoClasses() + .map(cl -> DynamicTest.dynamicTest("Check public fields for " + cl.getSimpleName(), + () -> validateWithRules(cl, new NoPublicFieldsRule()) + )) + .collect(Collectors.toList()); } private void validateWithRules(Class cl, Rule... rules) { @@ -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> 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); } } + diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/DaysToWorkingDaysConverterTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/DaysToWorkingDaysConverterTest.java index eebfcb94f..a21705d29 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/DaysToWorkingDaysConverterTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/DaysToWorkingDaysConverterTest.java @@ -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 reportItems = singletonList(new TimeIntervalColumnHeader(0));