From 82fb6bba3dd68a6b10e74e2dfbd6d37c86266814 Mon Sep 17 00:00:00 2001
From: Benjamin Eckstein <13351939+benjamineckstein@users.noreply.github.com>
Date: Tue, 19 Nov 2019 23:26:27 +0100
Subject: [PATCH] TSK-950: Add Pojo Tests for field validation
---
lib/taskana-core/pom.xml | 6 +
.../pro/taskana/impl/TaskSummaryImpl.java | 64 +++++++++
.../impl/WorkbasketAccessItemImpl.java | 10 +-
.../taskana/impl/WorkbasketServiceImpl.java | 2 +-
.../pro/taskana/EqualsAndHashCodeTest.java | 59 --------
.../src/test/java/pro/taskana/PojoTest.java | 132 ++++++++++++++++++
pom.xml | 1 +
7 files changed, 211 insertions(+), 63 deletions(-)
delete mode 100644 lib/taskana-core/src/test/java/pro/taskana/EqualsAndHashCodeTest.java
create mode 100644 lib/taskana-core/src/test/java/pro/taskana/PojoTest.java
diff --git a/lib/taskana-core/pom.xml b/lib/taskana-core/pom.xml
index 6f937a947..9d05c361b 100644
--- a/lib/taskana-core/pom.xml
+++ b/lib/taskana-core/pom.xml
@@ -108,6 +108,12 @@
${version.equalsverifier}
test
+
+ com.openpojo
+ openpojo
+ ${version.openpojo}
+ test
+
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskSummaryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskSummaryImpl.java
index 5bcbd7b47..78f476009 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskSummaryImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskSummaryImpl.java
@@ -525,6 +525,70 @@ public class TaskSummaryImpl implements TaskSummary {
this.custom16 = custom16;
}
+ public String getCustom1() {
+ return custom1;
+ }
+
+ public String getCustom2() {
+ return custom2;
+ }
+
+ public String getCustom3() {
+ return custom3;
+ }
+
+ public String getCustom4() {
+ return custom4;
+ }
+
+ public String getCustom5() {
+ return custom5;
+ }
+
+ public String getCustom6() {
+ return custom6;
+ }
+
+ public String getCustom7() {
+ return custom7;
+ }
+
+ public String getCustom8() {
+ return custom8;
+ }
+
+ public String getCustom9() {
+ return custom9;
+ }
+
+ public String getCustom10() {
+ return custom10;
+ }
+
+ public String getCustom11() {
+ return custom11;
+ }
+
+ public String getCustom12() {
+ return custom12;
+ }
+
+ public String getCustom13() {
+ return custom13;
+ }
+
+ public String getCustom14() {
+ return custom14;
+ }
+
+ public String getCustom15() {
+ return custom15;
+ }
+
+ public String getCustom16() {
+ return custom16;
+ }
+
@Override
public int hashCode() {
final int prime = 31;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemImpl.java
index 5e5bf4edf..df262ae0e 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemImpl.java
@@ -79,14 +79,18 @@ public class WorkbasketAccessItemImpl implements WorkbasketAccessItem {
return accessId;
}
- public void setAccessId(String accessId) {
+ public void setAccessIdWithSanitizing(String accessId) {
if (TaskanaEngineConfiguration.shouldUseLowerCaseForAccessIds()) {
- this.accessId = accessId != null ? accessId.toLowerCase() : null;
+ setAccessId(accessId != null ? accessId.toLowerCase() : null);
} else {
- this.accessId = accessId;
+ setAccessId(accessId);
}
}
+ public void setAccessId(String accessId) {
+ this.accessId = accessId;
+ }
+
/*
* (non-Javadoc)
* @see pro.taskana.impl.WorkbasketAccessItem#getAccessName()
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java
index 2f9f88851..e48aae9f1 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java
@@ -159,7 +159,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
public WorkbasketAccessItem newWorkbasketAccessItem(String workbasketId, String accessId) {
WorkbasketAccessItemImpl accessItem = new WorkbasketAccessItemImpl();
accessItem.setWorkbasketId(workbasketId);
- accessItem.setAccessId(accessId);
+ accessItem.setAccessIdWithSanitizing(accessId);
return accessItem;
}
diff --git a/lib/taskana-core/src/test/java/pro/taskana/EqualsAndHashCodeTest.java b/lib/taskana-core/src/test/java/pro/taskana/EqualsAndHashCodeTest.java
deleted file mode 100644
index bd237f350..000000000
--- a/lib/taskana-core/src/test/java/pro/taskana/EqualsAndHashCodeTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package pro.taskana;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.junit.jupiter.api.DynamicTest;
-import org.junit.jupiter.api.TestFactory;
-
-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 EqualsAndHashCodeTest {
-
- @TestFactory
- Collection equalsContract() {
- return
- getPojoClasses().stream()
- .map(cl -> DynamicTest.dynamicTest("Check Hash and Equals for " + cl.getSimpleName(),
- () -> {
- EqualsVerifier.forClass(cl)
- .suppress(Warning.NONFINAL_FIELDS, Warning.STRICT_INHERITANCE)
- .withRedefinedSuperclass()
- .verify();
- }))
- .collect(Collectors.toList());
- }
-
- //TODO find a way to dynamically create a list with custom implemented equals or hash methods.
- private List> getPojoClasses() {
- return Arrays.asList(
- KeyDomain.class,
- ObjectReference.class,
- TimeInterval.class,
- AttachmentImpl.class,
- AttachmentSummaryImpl.class,
- ClassificationImpl.class,
- ClassificationSummaryImpl.class,
- TaskImpl.class,
- TaskSummaryImpl.class,
- WorkbasketAccessItemImpl.class,
- WorkbasketImpl.class,
- WorkbasketSummaryImpl.class
- );
- }
-}
diff --git a/lib/taskana-core/src/test/java/pro/taskana/PojoTest.java b/lib/taskana-core/src/test/java/pro/taskana/PojoTest.java
new file mode 100644
index 000000000..0a8439706
--- /dev/null
+++ b/lib/taskana-core/src/test/java/pro/taskana/PojoTest.java
@@ -0,0 +1,132 @@
+package pro.taskana;
+
+import java.util.Collection;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.DynamicTest;
+import org.junit.jupiter.api.TestFactory;
+
+import com.openpojo.reflection.impl.PojoClassFactory;
+import com.openpojo.validation.ValidatorBuilder;
+import com.openpojo.validation.rule.Rule;
+import com.openpojo.validation.rule.impl.GetterMustExistRule;
+import com.openpojo.validation.rule.impl.NoPublicFieldsRule;
+import com.openpojo.validation.rule.impl.NoStaticExceptFinalRule;
+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 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 {
+
+ @TestFactory
+ Collection equalsContract() {
+ return
+ getPojoClasses()
+ .map(cl -> DynamicTest.dynamicTest("Check Hash and Equals for " + cl.getSimpleName(),
+ () -> verifyHashAndEquals(cl)))
+ .collect(Collectors.toList());
+ }
+
+ @TestFactory
+ Collection validateGetters() {
+ 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());
+ }
+
+ @TestFactory
+ Collection validateGetAndSet() {
+ 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());
+ }
+
+ @TestFactory
+ Collection validateNoPublicFields() {
+ 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) {
+ ValidatorBuilder.create()
+ .with(rules)
+ .build()
+ .validate(PojoClassFactory.getPojoClass(cl));
+ }
+ private void validateWithTester(Class> cl, Tester... testers) {
+ ValidatorBuilder.create()
+ .with(testers)
+ .build()
+ .validate(PojoClassFactory.getPojoClass(cl));
+ }
+
+ private void verifyHashAndEquals(Class> cl) {
+ EqualsVerifier.forClass(cl)
+ .suppress(Warning.NONFINAL_FIELDS, Warning.STRICT_INHERITANCE)
+ .withRedefinedSuperclass()
+ .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
+ );
+ }
+}
diff --git a/pom.xml b/pom.xml
index 8f50e12f2..3cf7d55b7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -70,6 +70,7 @@
1.7.1
1.3
3.1.10
+ 0.8.13
1.4.197