package net.thucydides.core.steps;
import net.thucydides.core.pages.Pages;
import net.thucydides.core.webdriver.WebdriverProxyFactory;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.io.File;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import static org.mockito.Mockito.verify;
public class WhenCreatingANewBaseStepListener {
@Mock
WebdriverProxyFactory proxyFactory;
@Mock
File outputDirectory;
@Mock
FirefoxDriver driver;
class TestableBaseStepListener extends BaseStepListener {
public TestableBaseStepListener(final Class<? extends WebDriver> driverClass, final File outputDirectory) {
super(driverClass, outputDirectory);
}
public TestableBaseStepListener(final File outputDirectory, final Pages pages) {
super(outputDirectory, pages);
}
@Override
protected WebdriverProxyFactory getProxyFactory() {
return proxyFactory;
}
}
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
@Test
public void should_create_a_new_proxy_driver_using_the_specified_driver_class() {
new TestableBaseStepListener(FirefoxDriver.class, outputDirectory);
verify(proxyFactory).proxyFor(FirefoxDriver.class);
}
@Test
public void should_create_a_new_proxy_driver_using_the_pages_driver_if_provided() {
Pages pages = new Pages(driver);
BaseStepListener baseStepListener = new BaseStepListener(outputDirectory, pages);
assertThat(baseStepListener.getDriver(), is(pages.getDriver()));
}
@Test
public void should_be_able_to_create_a_base_listener_without_a_page_factory() {
Pages pages = new Pages(driver);
BaseStepListener baseStepListener = new BaseStepListener(outputDirectory);
assertThat(baseStepListener.getDriver(), is(nullValue()));
}
@Test
public void when_the_pages_object_has_no_driver_one_should_be_created() {
Pages pages = new Pages((WebDriver) null);
BaseStepListener baseStepListener = new BaseStepListener(outputDirectory, pages);
assertThat(pages.getDriver(), is(not(nullValue())));
assertThat(baseStepListener.getDriver(), is(pages.getDriver()));
}
@Test
public void when_the_pages_is_null_a_new_driver_should_be_created() {
BaseStepListener baseStepListener = new BaseStepListener(outputDirectory, (Pages) null);
assertThat(baseStepListener.getDriver(), is(not(nullValue())));
}
@Test
public void should_use_the_driver_from_the_pages_object_if_assigend() {
BaseStepListener baseStepListener = new TestableBaseStepListener(FirefoxDriver.class, outputDirectory);
verify(proxyFactory).proxyFor(FirefoxDriver.class);
}
}