ROT: Verbesserungen aus 'deserialization' in 'sumup-adder' gemerged
[demos/kafka/training] / src / test / java / de / juplo / kafka / ErrorCannotBeGeneratedCondition.java
diff --git a/src/test/java/de/juplo/kafka/ErrorCannotBeGeneratedCondition.java b/src/test/java/de/juplo/kafka/ErrorCannotBeGeneratedCondition.java
new file mode 100644 (file)
index 0000000..606218f
--- /dev/null
@@ -0,0 +1,60 @@
+package de.juplo.kafka;
+
+import org.junit.jupiter.api.extension.ConditionEvaluationResult;
+import org.junit.jupiter.api.extension.ExecutionCondition;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.platform.commons.util.AnnotationUtils;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+
+public class ErrorCannotBeGeneratedCondition implements ExecutionCondition
+{
+  @Override
+  public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context)
+  {
+    final Optional<SkipWhenErrorCannotBeGenerated> optional =
+        AnnotationUtils.findAnnotation(
+            context.getElement(),
+            SkipWhenErrorCannotBeGenerated.class);
+
+    if (context.getTestInstance().isEmpty())
+      return ConditionEvaluationResult.enabled("Test-instance ist not available");
+
+    if (optional.isPresent())
+    {
+      SkipWhenErrorCannotBeGenerated skipWhenErrorCannotBeGenerated = optional.get();
+      GenericApplicationTests instance = (GenericApplicationTests)context.getTestInstance().get();
+      List<String> missingRequiredErrors = new LinkedList<>();
+
+      if (skipWhenErrorCannotBeGenerated.poisonPill() && !instance.recordGenerator.canGeneratePoisonPill())
+        missingRequiredErrors.add("Poison-Pill");
+
+      if (skipWhenErrorCannotBeGenerated.logicError() && !instance.recordGenerator.canGenerateLogicError())
+        missingRequiredErrors.add("Logic-Error");
+
+      StringBuilder builder = new StringBuilder();
+      builder.append(context.getTestClass().get().getSimpleName());
+
+      if (missingRequiredErrors.isEmpty())
+      {
+        builder.append(" can generate all required types of errors");
+        return ConditionEvaluationResult.enabled(builder.toString());
+      }
+
+      builder.append(" cannot generate the required error(s): ");
+      builder.append(
+          missingRequiredErrors
+              .stream()
+              .collect(Collectors.joining(", ")));
+
+      return ConditionEvaluationResult.disabled(builder.toString());
+    }
+
+    return ConditionEvaluationResult.enabled(
+        "Not annotated with " + SkipWhenErrorCannotBeGenerated.class.getSimpleName());
+  }
+}