package com.jboss.dvd.seam.test; import java.io.File; import javax.faces.model.ListDataModel; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.OverProtocol; import org.jboss.arquillian.junit.Arquillian; import org.jboss.seam.mock.JUnitSeamTest; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.importer.ZipImporter; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import com.jboss.dvd.seam.Accept; import com.jboss.dvd.seam.FullTextSearch; import com.jboss.dvd.seam.Product; @RunWith(Arquillian.class) public class SearchTest extends JUnitSeamTest { @Deployment(name = "SearchTest") @OverProtocol("Servlet 3.0") public static Archive<?> createDeployment() { WebArchive web = ShrinkWrap.create(ZipImporter.class, "seam-dvdstore.war").importFrom(new File("target/seam-dvdstore.war")).as(WebArchive.class); web.addPackages(true, Accept.class.getPackage()); return web; } @Test public void testNoParamSearch() throws Exception { // Wait a while for the indexing Thread.sleep(10000); new FacesRequest() { FullTextSearch search; @Override protected void updateModelValues() { search = (FullTextSearch) getInstance("search"); search.setSearchQuery("king"); } @Override protected void invokeApplication() { String outcome = search.doSearch(); Assert.assertEquals("search outcome", "browse", outcome); } @Override protected void renderResponse() { ListDataModel model = (ListDataModel) lookup("searchResults"); //exact number of matches depends on search algorithm, //so we only check that at least something was found: Assert.assertTrue("should have found something", model.isRowAvailable()); Product firstMatch = (Product) model.getRowData(); Assert.assertTrue("at least top match should have keyword in title", firstMatch.getTitle().toLowerCase().contains("king")); Assert.assertTrue("in conversation", isLongRunningConversation()); } }.run(); } }