StatefulExtentTestResolver.java

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

import com.aventstack.extentreports.ExtentTest;
import io.github.giulong.spectrum.utils.ContextManager;
import io.github.giulong.spectrum.utils.StatefulExtentTest;
import io.github.giulong.spectrum.types.TestData;
import io.github.giulong.spectrum.utils.Configuration;
import io.github.giulong.spectrum.utils.ExtentReporter;
import io.github.giulong.spectrum.utils.video.Video;
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 io.github.giulong.spectrum.extensions.resolvers.ConfigurationResolver.CONFIGURATION;
import static io.github.giulong.spectrum.extensions.resolvers.TestDataResolver.TEST_DATA;
import static org.junit.jupiter.api.extension.ExtensionContext.Namespace.GLOBAL;

@Slf4j
public class StatefulExtentTestResolver extends TypeBasedParameterResolver<StatefulExtentTest> {

    public static final String STATEFUL_EXTENT_TEST = "statefulExtentTest";

    private final ExtentReporter extentReporter = ExtentReporter.getInstance();
    private final ContextManager contextManager = ContextManager.getInstance();

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

        final ExtensionContext.Store store = context.getStore(GLOBAL);
        final TestData testData = store.get(TEST_DATA, TestData.class);
        final ExtentTest extentTest = extentReporter.createExtentTestFrom(context);
        final Video video = store.get(CONFIGURATION, Configuration.class).getVideo();
        final Video.ExtentTest videoExtentTest = video.getExtentTest();
        final StatefulExtentTest statefulExtentTest = StatefulExtentTest
                .builder()
                .currentNode(extentTest)
                .build();

        if (!video.isDisabled() && videoExtentTest.isAttach()) {
            extentReporter.attachVideo(extentTest, videoExtentTest, testData.getTestId(), testData.getVideoPath());
        }

        extentReporter.logTestStartOf(extentTest);
        store.put(STATEFUL_EXTENT_TEST, statefulExtentTest);
        contextManager.put(context, STATEFUL_EXTENT_TEST, statefulExtentTest);

        return statefulExtentTest;
    }
}