package org.jboss.seam.example.seamdiscs.test;
import static org.jboss.seam.example.seamdiscs.test.TestStrings.DISC1_ARTIST;
import static org.jboss.seam.example.seamdiscs.test.TestStrings.DISC1_NAME;
import static org.jboss.seam.example.seamdiscs.test.TestStrings.DISC2_ARTIST;
import static org.jboss.seam.example.seamdiscs.test.TestStrings.DISC2_NAME;
import static org.jboss.seam.example.seamdiscs.test.TestStrings.DISC3_ARTIST;
import static org.jboss.seam.example.seamdiscs.test.TestStrings.DISC3_NAME;
import static org.jboss.seam.example.seamdiscs.test.TestStrings.DISC4_ARTIST;
import static org.jboss.seam.example.seamdiscs.test.TestStrings.DISC4_NAME;
import static org.jboss.seam.example.seamdiscs.test.TestStrings.DISC5_ARTIST;
import static org.jboss.seam.example.seamdiscs.test.TestStrings.DISC5_NAME;
import static org.jboss.seam.example.seamdiscs.test.TestStrings.DISC6_ARTIST;
import static org.jboss.seam.example.seamdiscs.test.TestStrings.DISC6_NAME;
import javax.faces.model.DataModel;
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.Disc;
import org.jboss.seam.mock.DBJUnitSeamTest;
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 DisplayDiscTest extends DBJUnitSeamTest
{
@Deployment(name="DisplayDiscTest")
@OverProtocol("Servlet 3.0")
public static Archive<?> createDeployment()
{
EnterpriseArchive er = Deployments.seamdiscsDeployment();
WebArchive web = er.getAsType(WebArchive.class, "seamdiscs-web.war");
web.addClasses(DisplayDiscTest.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 testDisplayDiscs() throws Exception
{
new FacesRequest("/discs.xhtml")
{
@Override
protected void renderResponse() throws Exception
{
Object discs = getValue("#{discs.dataModel}");
assert discs instanceof DataModel;
DataModel dataModel = (DataModel) discs;
// Check for the correct number of results
assert dataModel.getRowCount() == 6;
// Check for correct ordering
assertDisc(dataModel, 0, DISC5_NAME, DISC5_ARTIST);
assertDisc(dataModel, 1, DISC6_NAME, DISC6_ARTIST);
assertDisc(dataModel, 2, DISC1_NAME, DISC1_ARTIST);
assertDisc(dataModel, 3, DISC2_NAME, DISC2_ARTIST);
assertDisc(dataModel, 4, DISC4_NAME, DISC4_ARTIST);
assertDisc(dataModel, 5, DISC3_NAME, DISC3_ARTIST);
}
}.run();
}
@Test
public void testDisplayDisc() throws Exception
{
// TODO Test navigation, but need a MockNavigationHandler
new NonFacesRequest("/discs.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("actionOutcome", "disc");
setParameter("discId", "3");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Integer) 3).equals(getValue("#{discHome.id}"));
Object object = null;
object = getValue("#{disc}");
assert object instanceof Disc;
Disc disc1 = (Disc) object;
assert DISC3_NAME.equals(disc1.getName());
}
}.run();
}
private void assertDisc(DataModel dataModel, int row, String discName, String artistName)
{
dataModel.setRowIndex(row);
Object rowData = dataModel.getRowData();
assert rowData instanceof Disc;
Disc disc = (Disc) rowData;
assert discName.equals(disc.getName());
assert artistName.equals(disc.getArtist().getName());
}
}