package tutorial_1_server.testing;
import com.google.guiceberry.GuiceBerryEnvMain;
import com.google.guiceberry.GuiceBerryModule;
import com.google.guiceberry.TestScoped;
import com.google.inject.AbstractModule;
import com.google.inject.Inject;
import com.google.inject.Provides;
import com.google.inject.Singleton;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import tutorial_1_server.prod.PetStoreServer;
public class PetStoreEnv0Simple extends AbstractModule {
@Provides @Singleton
@PortNumber int getPortNumber() {
return FreePortFinder.findFreePort();
}
@Provides @TestScoped
WebDriver getWebDriver() {
WebDriver driver = new HtmlUnitDriver();
return driver;
}
@Provides
@Singleton
protected PetStoreServer buildPetStoreServer(@PortNumber int portNumber) {
return new PetStoreServer(portNumber);
}
@Override
protected void configure() {
install(new GuiceBerryModule());
bind(GuiceBerryEnvMain.class).to(PetStoreServerStarter.class);
}
private static final class PetStoreServerStarter implements GuiceBerryEnvMain {
@Inject
private PetStoreServer petStoreServer;
public void run() {
// Starting a server should never be done in a @Provides method
// (or inside Provider's get).
petStoreServer.start();
}
}
}