package org.fluentlenium.core.hook;
import org.fluentlenium.adapter.FluentAdapter;
import org.fluentlenium.core.components.DefaultComponentInstantiator;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.pagefactory.ElementLocator;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
public class BaseHookTest {
@Mock
private WebDriver webDriver;
@Mock
private WebElement element;
@Mock
private ElementLocator locator;
@Mock
private Object options;
private DefaultComponentInstantiator instantiator;
private BaseHook<?> hook;
private FluentAdapter fluentAdapter;
@Before
public void before() {
fluentAdapter = new FluentAdapter();
fluentAdapter.initFluent(webDriver);
instantiator = new DefaultComponentInstantiator(fluentAdapter);
hook = new BaseHook<>(fluentAdapter, instantiator, () -> element, () -> locator, () -> "toString", options);
}
@Test
public void testDelegatesElement() {
hook.click();
verify(element).click();
}
@Test
public void testDelegatesLocator() {
hook.findElement();
verify(element, never()).findElement(any(By.class));
verify(locator).findElement();
}
@Test
public void testGetters() {
assertThat(hook.getDriver()).isSameAs(webDriver);
assertThat(hook.getInstantiator()).isSameAs(instantiator);
assertThat(hook.getElement()).isSameAs(element);
assertThat(hook.getWrappedElement()).isSameAs(element);
assertThat(hook.getElementLocator()).isSameAs(locator);
assertThat(hook.getOptions()).isSameAs(options);
}
@Test
public void testNoOptionHook() {
Object defaultOptions = new Object();
BaseHook noOptionHook = new BaseHook<Object>(fluentAdapter, instantiator, () -> element, () -> locator, () -> "hook",
null) {
@Override
protected Object newOptions() {
return defaultOptions;
}
};
assertThat(noOptionHook.getOptions()).isSameAs(defaultOptions);
}
@Test
public void testNoOptionHookWithoutDefault() {
BaseHook noOptionHook = new BaseHook<>(fluentAdapter, instantiator, () -> element, () -> locator, () -> "hook", null);
assertThat(noOptionHook.getOptions()).isNull();
}
}