TestContextResolver.java

package io.github.giulong.spectrum.extensions.resolvers;

import io.github.giulong.spectrum.utils.TestContext;
import io.github.giulong.spectrum.utils.ContextManager;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.ParameterContext;
import org.junit.jupiter.api.extension.support.TypeBasedParameterResolver;

import static org.junit.jupiter.api.extension.ExtensionContext.Namespace.GLOBAL;

@Slf4j
public class TestContextResolver extends TypeBasedParameterResolver<TestContext> {

    public static final String TEST_CONTEXT = "testContext";

    private final ContextManager contextManager = ContextManager.getInstance();

    @Override
    public TestContext resolveParameter(final ParameterContext arg0, final ExtensionContext context) {
        log.debug("Resolving {}", TEST_CONTEXT);

        final TestContext testContext = contextManager.initFor(context);
        context.getStore(GLOBAL).put(TEST_CONTEXT, testContext);

        return testContext;
    }
}