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.seam.example.seamdiscs.model.Artist;
import org.jboss.seam.example.seamdiscs.model.Band;
import org.jboss.seam.mock.DBUnitSeamTest;
import org.testng.annotations.Test;
public class DisplayArtistTest extends DBUnitSeamTest
{
@Override
protected void prepareDBUnitOperations() {
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());
}
}