DownloadWaitResolver.java

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

import io.github.giulong.spectrum.utils.Configuration;
import io.github.giulong.spectrum.types.DownloadWait;
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 org.openqa.selenium.WebDriver;

import static io.github.giulong.spectrum.extensions.resolvers.ConfigurationResolver.CONFIGURATION;
import static io.github.giulong.spectrum.extensions.resolvers.DriverResolver.DRIVER;
import static org.junit.jupiter.api.extension.ExtensionContext.Namespace.GLOBAL;

@Slf4j
public class DownloadWaitResolver extends TypeBasedParameterResolver<DownloadWait> {

    public static final String DOWNLOAD_WAIT = "downloadWait";

    @Override
    public DownloadWait resolveParameter(final ParameterContext parameterContext, final ExtensionContext context) {
        log.debug("Resolving {}", DOWNLOAD_WAIT);

        final ExtensionContext.Store rootStore = context.getRoot().getStore(GLOBAL);
        final ExtensionContext.Store store = context.getStore(GLOBAL);
        final WebDriver driver = store.get(DRIVER, WebDriver.class);
        final Configuration.Drivers.Waits waits = rootStore.get(CONFIGURATION, Configuration.class).getDrivers().getWaits();
        final DownloadWait webDriverWait = new DownloadWait(driver, waits.getDownloadTimeout());

        store.put(DOWNLOAD_WAIT, webDriverWait);
        return webDriverWait;
    }
}