/* Copyright 2013 Fabian Steeg, hbz. Licensed under the Eclipse Public License 1.0 */ package tests; // NOPMD import static org.fest.assertions.Assertions.assertThat; import static org.fluentlenium.core.filter.FilterConstructor.withId; import static org.fluentlenium.core.filter.FilterConstructor.withText; import static play.test.Helpers.HTMLUNIT; import static play.test.Helpers.running; import org.junit.Test; import play.libs.F.Callback; import play.test.TestBrowser; /** * Browser-based tests using Selenium WebDriver and FluentLenium. * <p/> * Run with `play test` (currently doesn't work in Eclipse). * * @author Fabian Steeg (fsteeg) */ @SuppressWarnings("javadoc") public class BrowserTests extends SearchTestsHarness { private static final String API_PAGE = "http://localhost:" + SearchTestsHarness.TEST_SERVER_PORT + "/api"; @Test public void accessAssets() { /* works with play test, but not in eclipse */ running(TEST_SERVER, new Runnable() { @Override public void run() { assertThat(call("assets/javascripts/bootstrap.min.js")).isNotNull(); } }); } @Test public void queryForm() { running(TEST_SERVER, HTMLUNIT, new Callback<TestBrowser>() { @Override public void invoke(final TestBrowser browser) throws InterruptedException { browser.goTo(API_PAGE); assertThat(browser.title()).isEqualTo("lobid - api"); browser.find("input", withId("id")) .text("http://d-nb.info/gnd/118836617"); browser.find("button", withText("Search")).first().click(); assertThat(browser.url()).isNotEqualTo(API_PAGE); assertThat(browser.pageSource()).contains("118836617") .contains("Schmidt, Hannelore").contains("Glaser, Hannelore") .contains("Schmidt, Loki"); } }); } @Test public void sampleRequestResourceById() { running(TEST_SERVER, HTMLUNIT, new Callback<TestBrowser>() { @Override public void invoke(final TestBrowser browser) { browser.goTo(API_PAGE); browser.find("a", withText("hbz ID")).first().click(); assertTypee(browser); } }); } private static void assertTypee(final TestBrowser browser) { assertThat(browser.pageSource()).contains("Typee") .contains("a peep at Polynesian life") // TODO: these enrichments are missing // .contains("http://gutenberg.org/ebooks/9269") // .contains("http://gutenberg.org/ebooks/23969") // .contains("http://openlibrary.org/works/OL14953734W") // .contains("http://dbpedia.org/resource/Typee") .contains("http://lobid.org/item/HT002189125:DE-5-4:U%20MEL-11") .contains("exemplar"); } @Test public void sampleRequestResourceByAuthor() { running(TEST_SERVER, HTMLUNIT, new Callback<TestBrowser>() { @Override public void invoke(final TestBrowser browser) { browser.goTo(API_PAGE); browser.click("a", withText("Abramson")); assertThat(browser.pageSource()).contains("Abramson") .contains("The ethnic factor in American catholicism") .contains("an analysis of interethnic marriage") .contains("Abramson, Harold J."); assertThat(browser.pageSource()) .doesNotContain( "Error-correcting codes from linear sequential circuits") .doesNotContain("Abramson, N. M."); } }); } @Test public void sampleRequestResourceBySubjectId() { running(TEST_SERVER, HTMLUNIT, new Callback<TestBrowser>() { @Override public void invoke(final TestBrowser browser) { browser.goTo(API_PAGE); browser.click("a", withText("4414195-6")); assertThat(browser.pageSource()) .contains("Heimatstimmen aus dem Kreis Olpe") .contains( "Ein Papierkrieg um die Instandsetzung des Wittgensteiner " + "Kohlenwegs in der Gemarkung Heinsberg 1837 bis 1839") .contains("Hundt, Theo"); } }); } @Test public void sampleRequestResourceBySubjectLabel() { running(TEST_SERVER, HTMLUNIT, new Callback<TestBrowser>() { @Override public void invoke(final TestBrowser browser) { browser.goTo(API_PAGE); browser.click("a", withText("Chemie")); assertThat(browser.pageSource()).contains("Schore, Neil Eric") .contains("structure and function"); } }); } @Test public void sampleRequestOrganisationByTitle() { running(TEST_SERVER, HTMLUNIT, new Callback<TestBrowser>() { @Override public void invoke(final TestBrowser browser) { browser.goTo(API_PAGE); browser.click("a", withText("/organisation?name=Universität")); assertThat(browser.pageSource()).contains("Universität") .contains("Universität Basel") .contains("Ruhr-Universität Bochum, Universitätsbibliothek") .contains("Universitätsstr. 150") .contains("http://www.ub.ruhr-uni-bochum.de") .contains("mailto:benutzung.ub@ruhr-uni-bochum.de").contains( "http://de.wikipedia.org/wiki/Universitätsbibliothek_Bochum"); } }); } @Test public void sampleRequestGndByAuthor() { running(TEST_SERVER, HTMLUNIT, new Callback<TestBrowser>() { @Override public void invoke(final TestBrowser browser) { browser.goTo(API_PAGE); final String link = "/person?name=Johann+Sebastian+Bach"; browser.click("a", withText(link)); System.out.println(browser.pageSource()); assertThat(browser.pageSource()).contains("Bach, Johann Sebastian") .contains("Lithograph, tätig in Leipzig um 1835-1837") .contains("Bach, Johann Sebastian") .containsIgnoringCase("<der Jüngere") .contains("Bach, Johann Samuel") .contains("Bāḵ, Jōhān Sebaṣtī'ān") .contains("Bach, Joh. Sebst.").contains("Dt. Maler"); } }); } @Test public void shortModifierSampleRequest() { running(TEST_SERVER, HTMLUNIT, new Callback<TestBrowser>() { @Override public void invoke(final TestBrowser browser) { browser.goTo(API_PAGE); browser.click("a", withId("short.field.sample")); assertThat(browser.pageSource()).contains("edoweb:1637998"); } }); } }