001package org.conqat.lib.commons.test;
002
003import java.util.Optional;
004
005import org.conqat.lib.commons.test.tags.AssumeExecutionOnCiServer;
006import org.junit.jupiter.api.extension.ConditionEvaluationResult;
007import org.junit.jupiter.api.extension.ExecutionCondition;
008import org.junit.jupiter.api.extension.ExtensionContext;
009import org.junit.platform.commons.util.AnnotationUtils;
010
011/**
012 * Extension class for conditional test execution. Checks classes and/or methods
013 * annotated with {@link AssumeExecutionOnCiServer}. If annotation present, test
014 * will only be executed on the CI server.
015 */
016public class AssumeExecutionOnCiServerCondition implements ExecutionCondition {
017
018        /** Evaluates whether execution is on CI server. */
019        @Override
020        public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
021
022                Optional<AssumeExecutionOnCiServer> annotation = AnnotationUtils.findAnnotation(context.getElement(),
023                                AssumeExecutionOnCiServer.class);
024
025                if (!annotation.isPresent()) {
026                        return ConditionEvaluationResult.enabled("No AssumeExecutionOnCiServer annotation found. Continuing test!");
027                }
028
029                if (!TestUtils.isExecutionOnCiServer()) {
030                        return ConditionEvaluationResult
031                                        .disabled("This test can only be executed in CI server environment. Skipping!");
032                }
033                return ConditionEvaluationResult.enabled("Test is executed in CI server environment. Continuing test!");
034        }
035}