package org.jboss.seam.example.seamdiscs.test; import static org.jboss.seam.example.seamdiscs.test.TestStrings.ARTIST1_NAME; import static org.jboss.seam.example.seamdiscs.test.TestStrings.ARTIST2_NAME; import static org.jboss.seam.example.seamdiscs.test.TestStrings.ARTIST3_NAME; import static org.jboss.seam.example.seamdiscs.test.TestStrings.ARTIST4_NAME; import static org.jboss.seam.example.seamdiscs.test.TestStrings.ARTIST5_NAME; import static org.jboss.seam.example.seamdiscs.test.TestStrings.ARTIST6_NAME; import java.util.ArrayList; import java.util.List; import javax.faces.model.DataModel; import org.apache.myfaces.trinidad.model.CollectionModel; import org.apache.myfaces.trinidad.model.SortCriterion; 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.example.seamdiscs.model.Artist; import org.jboss.seam.example.seamdiscs.model.Band; import org.jboss.seam.mock.DBJUnitSeamTest; import org.jboss.seam.trinidad.SeamCollectionModel; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.spec.EnterpriseArchive; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.runner.RunWith; import org.junit.Test; @RunWith(Arquillian.class) public class DisplayArtistTest extends DBJUnitSeamTest { @Deployment(name="DisplayArtistTest") @OverProtocol("Servlet 3.0") public static Archive<?> createDeployment() { EnterpriseArchive er = Deployments.seamdiscsDeployment(); WebArchive web = er.getAsType(WebArchive.class, "seamdiscs-web.war"); web.addClasses(DisplayArtistTest.class); return er; } @Override protected void prepareDBUnitOperations() { setDatabase("HSQL"); setDatasourceJndiName("java:/jboss/seamdiscsDatasource"); beforeTestOperations.add( new DataSetOperation("org/jboss/seam/example/seamdiscs/test/BaseData.xml") ); } @Test public void testDisplayArtists() throws Exception { new NonFacesRequest("/artists.xhtml") { @Override protected void renderResponse() throws Exception { Object artists = getValue("#{artists.dataModel}"); assert artists instanceof DataModel; DataModel artistsDataModel = (DataModel) artists; // Check for the correct number of results assert artistsDataModel.getRowCount() == 6; // Check for correct ordering assertArtist(artistsDataModel, 0, ARTIST5_NAME); assertArtist(artistsDataModel, 1, ARTIST6_NAME); assertArtist(artistsDataModel, 2, ARTIST1_NAME); assertArtist(artistsDataModel, 3, ARTIST4_NAME); assertArtist(artistsDataModel, 4, ARTIST2_NAME); assertArtist(artistsDataModel, 5, ARTIST3_NAME); } }.run(); } @Test public void testFilterArtists() throws Exception { new FacesRequest("/artists.xhtml") { @Override protected void updateModelValues() throws Exception { setValue("#{exampleArtist.name}", "r"); } @Override protected void renderResponse() throws Exception { Object artists = getValue("#{artists.dataModel}"); assert artists instanceof DataModel; DataModel artistsDataModel = (DataModel) artists; // Check for the correct number of results assert artistsDataModel.getRowCount() == 2; // Check for correct ordering assertArtist(artistsDataModel, 0, ARTIST5_NAME); assertArtist(artistsDataModel, 1, ARTIST6_NAME); } }.run(); new FacesRequest("/artists.xhtml") { @Override protected void updateModelValues() throws Exception { setValue("#{exampleArtist.name}", "Ri"); } @Override protected void renderResponse() throws Exception { Object artists = getValue("#{artists.dataModel}"); assert artists instanceof DataModel; DataModel artistsDataModel = (DataModel) artists; // Check for the correct number of results assert artistsDataModel.getRowCount() == 1; // Check for correct ordering assertArtist(artistsDataModel, 0, ARTIST6_NAME); } }.run(); } @Test public void testSeamCollectionModel() throws Exception { new NonFacesRequest("/artists.xhtml") { @Override protected void renderResponse() throws Exception { Object artists = getValue("#{artists.dataModel}"); assert artists instanceof CollectionModel; CollectionModel collectionModel = (CollectionModel) artists; // Reorder the list List<SortCriterion> criteria = new ArrayList<SortCriterion>(); criteria.add(new SortCriterion("artist.name", true)); collectionModel.setSortCriteria(criteria); // Check for correct ordering assertArtist(collectionModel, 5, ARTIST5_NAME); assertArtist(collectionModel, 4, ARTIST6_NAME); assertArtist(collectionModel, 3, ARTIST1_NAME); assertArtist(collectionModel, 2, ARTIST4_NAME); assertArtist(collectionModel, 1, ARTIST2_NAME); assertArtist(collectionModel, 0, ARTIST3_NAME); } }.run(); } @Test public void testDisplayArtist() throws Exception { // TODO Test navigation, but need a MockNavigationHandler new NonFacesRequest("/artists.xhtml") { @Override protected void beforeRequest() { setParameter("actionOutcome", "artist"); setParameter("artistId", "1"); } @Override protected void renderResponse() throws Exception { assert ((Integer) 1).equals(getValue("#{artistHome.id}")); Object object = null; object = getValue("#{artist}"); assert object instanceof Band; Band artist1 = (Band) object; assert ARTIST1_NAME.equals(artist1.getName()); assert artist1.getBandMembers().size() == 3; } }.run(); } private void assertArtist(DataModel dataModel, int row, String name) { dataModel.setRowIndex(row); Object rowData = dataModel.getRowData(); assert rowData instanceof Artist; Artist artist = (Artist) rowData; assert name.equals(artist.getName()); } }