package lavalink.client;

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.support.AnnotationSupport;

import java.util.Optional;

/**
 * Created by napster on 06.03.18.
 * <p>
 * Checks whether the required system properties have been set
 */
public class RequireSystemPropertyExists implements ExecutionCondition {

    @Override
    public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
        Optional<RequireSystemProperty> annotation = AnnotationSupport.findAnnotation(context.getElement(), RequireSystemProperty.class);
        if (annotation.isPresent()) {
            for (String propertyKey : annotation.get().value()) {
                String propertyValue = System.getProperty(propertyKey);
                if (propertyValue == null || propertyValue.isEmpty()) {
                    return ConditionEvaluationResult.disabled(String.format("System property '%s' not set. Skipping test.", propertyKey));
                }
            }
            return ConditionEvaluationResult.enabled("All required system properties present. Continuing test.");
        }
        return ConditionEvaluationResult.enabled("No RequireSystemProperty annotation found. Continuing test.");
    }
}