I think that page parameters do not work in integration tests.
I have the following test:
ItemTest.java
public class ItemTest extends SeamTest {
@Test
public void testRequestParameterAnnotation() throws Exception {
new NonFacesRequest("/item.xhtml") {
@Override
protected void beforeRequest() {
setParameter("itemId", "1");
}
@Override
protected void renderResponse() throws Exception {
checkItemRetrieval(getValue("#{itemHome}"));
}
}.run();
}
@Test
public void testPageParameter() throws Exception {
new NonFacesRequest("/item.xhtml") {
@Override
protected void beforeRequest() {
setParameter("id", "1");
}
@Override
protected void renderResponse() throws Exception {
checkItemRetrieval(getValue("#{itemHome}"));
}
}.run();
}
private void checkItemRetrieval(Object object) {
ItemHome itemHome = (ItemHome) object;
assert itemHome.getInstance().getId() != null;
}
}
@Name("itemHome")
public class ItemHome extends EntityHome<Item>
{
@RequestParameter
Long itemId;
@Override
public Object getId()
{
if (itemId==null)
{
return super.getId();
}
else
{
return itemId;
}
}
}
<page view-id="/item.xhtml">
<param name="id"
value="#{itemHome.id}"
converterId="javax.faces.Long"/>
</page>
Also, for anyone looking for a workaround like I was, this works:
@Override
protected void beforeRequest() {
FacesContext.getCurrentInstance().renderResponse();
setParameter("id", "1");
}