page scope propagation in Integration Tests
lucas84 Sep 10, 2009 11:02 AMhi guys,
Is in integration tests support for page scope?? Here is simple example where it doesn't work. The environment is seam-2.2.0 GA
page.xml for page I'm trying to test
<page xmlns="http://jboss.com/products/seam/pages" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.1.xsd"> <rewrite pattern="/offers/{offerId}/details" /> <action execute="#{singleOfferRentOrderAction.initialize}"/> <param name="offerId" value="#{singleOfferRentOrderAction.offerId}" required="true"/> </page>
Integration test:
new NonFacesRequest("/offers/details.xhtml") { @Override protected void beforeRequest() { setParameter("offerId", "1"); } }.run(); new FacesRequest("/offers/details.xhtml") { @Override protected void updateModelValues() throws Exception { //renting details setValue("#{singleOfferRentOrderAction.rentFromDate}", DateUtils.create(2009, 07, 10)); setValue("#{singleOfferRentOrderAction.rentToDate}", DateUtils.create(2009, 07, 20)); setValue("#{singleOfferRentOrderAction.quantity}", 1l); //charging options setValue("#{singleOfferRentOrderAction.isTransportIncluded}", true); setValue("#{singleOfferRentOrderAction.isInsuranceIncluded}", true); setValue("#{singleOfferRentOrderAction.isInstallmentIncluded}", true); setValue("#{singleOfferRentOrderAction.isIncludeDeposit}", true); //delivery details setValue("#{singleOfferRentOrderAction.deliveryCityName}", "Szczecin"); setValue("#{singleOfferRentOrderAction.deliveryZipCode}", "70-781"); setValue("#{singleOfferRentOrderAction.deliveryStreet}", "Wyzwolenia"); setValue("#{singleOfferRentOrderAction.deliveryHouseNo}", "15"); } @Override protected void invokeApplication() throws Exception { String outcome = (String) invokeAction("#{singleOfferRentOrderAction.perform}"); assertEquals(outcome, "success"); } }.run();
Component, which I use in test
@Scope(ScopeType.PAGE) @Name("singleOfferRentOrderAction") public class SingleOfferRentOrderAction extends RentOrderAction { private Long offerId; public String initialize() { ... } public String perform() { ... } }
As you can see in the test case I do NonFacesRequest to /offers/details.xhtml (Get method) just to set parameter and fire initialize method. Than I do FacesRequest(Post method) to /offers/details.xhtml in order to submit the form and invoke action method. I am on the same page, so the same instance of singleOfferRentOrderAction (as it is kept in a page scope) should be retrieved among request. The problem is that I get new instance of singleOfferRentOrderAction in facesRequest (so it isn't initialized). I quess the problem is that page scope isn't supported so I get new instance. In production it works well.
My questions are:
1) is page scope supported?
2) if do what I do wrong
thx for any replies and hints