package org.fluentlenium.core; import org.apache.http.message.BasicNameValuePair; import org.fluentlenium.core.url.ParsedUrlTemplate; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Mockito.verify; @RunWith(MockitoJUnitRunner.class) public class FluentPageUrlTemplateTest { private FluentPage fluentPage; private FluentPage fluentPage2; @Mock private FluentControl control; @Before public void before() { fluentPage = Mockito.spy(new FluentPage(control) { @Override public String getUrl() { return "/abc/{param1}/def/{param2}"; } }); fluentPage2 = Mockito.spy(new FluentPage(control) { @Override public String getUrl() { return "abc/{param1}/def/{param2}/"; } }); } @Test public void testGetUrlParams() { String url = fluentPage.getUrl("test1", "test2"); assertThat(url).isEqualTo("/abc/test1/def/test2"); } @Test public void testGetUrlParams2() { String url = fluentPage2.getUrl("test1", "test2"); assertThat(url).isEqualTo("abc/test1/def/test2/"); } @Test public void testGetUrlMissingParams() { assertThatThrownBy(() -> fluentPage.getUrl("test1")).isExactlyInstanceOf(IllegalArgumentException.class) .hasMessage("Value for parameter param2 is missing."); } @Test public void testGetUrlMissingParams2() { assertThatThrownBy(() -> fluentPage2.getUrl("test1")).isExactlyInstanceOf(IllegalArgumentException.class) .hasMessage("Value for parameter param2 is missing."); } @Test public void testGoUrlParams() { fluentPage.go("test1", "test2"); verify(control).goTo("/abc/test1/def/test2"); } @Test public void testGoUrlParams2() { fluentPage2.go("test1", "test2"); verify(control).goTo("abc/test1/def/test2/"); } @Test public void testGoMissingParams() { assertThatThrownBy(() -> fluentPage.go("test1")).isExactlyInstanceOf(IllegalArgumentException.class) .hasMessage("Value for parameter param2 is missing."); } @Test public void testGoMissingParams2() { assertThatThrownBy(() -> fluentPage2.go("test1")).isExactlyInstanceOf(IllegalArgumentException.class) .hasMessage("Value for parameter param2 is missing."); } @Test public void testGetParameters() { Mockito.when(control.url()).thenReturn("/abc/test1/def/test2"); ParsedUrlTemplate parsedUrl = fluentPage.parseUrl(); assertThat(parsedUrl.matches()).isTrue(); assertThat(parsedUrl.parameters().size()).isEqualTo(2); assertThat(parsedUrl.parameters().keySet()).containsExactly("param1", "param2"); assertThat(parsedUrl.parameters().values()).containsExactly("test1", "test2"); } @Test public void testGetParameters2() { Mockito.when(control.url()).thenReturn("/abc/test1/def/test2"); ParsedUrlTemplate parsedUrl = fluentPage2.parseUrl(); assertThat(parsedUrl.matches()).isTrue(); assertThat(parsedUrl.parameters().size()).isEqualTo(2); assertThat(parsedUrl.parameters().keySet()).containsExactly("param1", "param2"); assertThat(parsedUrl.parameters().values()).containsExactly("test1", "test2"); } @Test public void testGetParametersQueryString() { Mockito.when(control.url()).thenReturn("/abc/test1/def/test2?param1=qp1¶m2=qp2"); ParsedUrlTemplate parsedUrl = fluentPage.parseUrl(); assertThat(parsedUrl.matches()).isTrue(); assertThat(parsedUrl.parameters().size()).isEqualTo(2); assertThat(parsedUrl.parameters().keySet()).containsExactly("param1", "param2"); assertThat(parsedUrl.parameters().values()).containsExactly("test1", "test2"); assertThat(parsedUrl.queryParameters()) .containsExactly(new BasicNameValuePair("param1", "qp1"), new BasicNameValuePair("param2", "qp2")); } @Test public void testIsAt() { Mockito.when(control.url()).thenReturn("/abc/test1/def/test2"); fluentPage.isAt(); } @Test public void testIsAt2() { Mockito.when(control.url()).thenReturn("/abc/test1/def/test2"); fluentPage2.isAt(); } @Test public void testIsAtFailing() { Mockito.when(control.url()).thenReturn("/abc/test1/test2"); assertThatThrownBy(() -> fluentPage.isAt()).isInstanceOf(AssertionError.class) .hasMessage("Current URL [/abc/test1/test2] doesn't match expected Page URL [/abc/{param1}/def/{param2}]"); } @Test public void testIsAtFailing2() { Mockito.when(control.url()).thenReturn("/abc/test1/test2"); assertThatThrownBy(() -> fluentPage2.isAt()).isInstanceOf(AssertionError.class) .hasMessage("Current URL [/abc/test1/test2] doesn't match expected Page URL [abc/{param1}/def/{param2}/]"); } }