[
https://issues.apache.org/jira/browse/WICKET-2898?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Igor Vaynberg updated WICKET-2898:
----------------------------------
Fix Version/s: 1.5-M2
(was: 1.5-M1)
> Wicket Tester does not properly set the rendered page when
> setResponsePage(xxx.class) and setRedirect(true) are called as a result of
> executeAjaxEvent on an AjaxButton.
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: WICKET-2898
> URL: https://issues.apache.org/jira/browse/WICKET-2898
> Project: Wicket
> Issue Type: Bug
> Components: wicket
> Affects Versions: 1.4.8
> Reporter: Scott Hraban
> Fix For: 1.4.11, 1.5-M2
>
>
> The code that is being tested is supposed to AJAX submit a form, and if login
> is successful, do a redirect to the home page.
> It works in real life, but the Wicket Tester seems to have problems with it.
> The following is a simplification of the code being tested:
> public InputForm extends Form
> {
> public InputForm()
> {
> new AjaxButton("button", InputForm.this)
> {
> private static final long serialVersionUID = 1L;
> @Override
> protected void onSubmit(final AjaxRequestTarget target,
> final Form form)
> {
> setResponsePage(IndexPage.class);
> setRedirect(true);
> }
> };
> }
> @Override
> protected void onSubmit()
> {
> if (!<authenticate>)
> {
> error("fail");
> }
> }
> }
> And this is the test code:
> @Test
> public void testLogin()
> {
> tester.startPage(LoginPage.class);
> tester.assertRenderedPage(LoginPage.class);
> final FormTester formTester = tester.newFormTester("inputForm");
> formTester.setValue("username", "VALID");
> formTester.setValue("password", "VALID");
> formTester.setValue("button", "true");
> tester.executeAjaxEvent("inputForm:button", "onclick");
> tester.assertRenderedPage(IndexPage.class);
> tester.assertNoErrorMessage();
> }
> This issue seems to be specific in that we need the redirect, using AJAX, and
> setResponsePage() with a class. If I change it to setResponsePage(new
> IndexPage());, the there is no problem, but this is not the right thing to do
> for the real world.
> It appears that the problem might be in
> MockWebApplication::postProcessRequestCycle, in that the code in 1.3.7 tester
> passed this test, but the 1.4.8 tester does not, and this is the 1.3.7 and
> 1.4.8 code to compare:
> 1.3.7:
> if (httpResponse.isRedirect())
> {
> lastRenderedPage =
> generateLastRenderedPage(cycle);
> MockHttpServletRequest newHttpRequest = new
> MockHttpServletRequest(application,
> servletSession,
> application.getServletContext());
>
> newHttpRequest.setRequestToRedirectString(httpResponse.getRedirectLocation());
> wicketRequest =
> application.newWebRequest(newHttpRequest);
> cycle = createRequestCycle();
> cycle.request();
> }
> 1.4.8:
> if (httpResponse.isRedirect())
> {
> lastRenderedPage =
> generateLastRenderedPage(cycle);
> MockHttpServletRequest newHttpRequest = new
> MockHttpServletRequest(application,
> servletSession,
> application.getServletContext());
>
> newHttpRequest.setRequestToRedirectString(httpResponse.getRedirectLocation());
> wicketRequest =
> application.newWebRequest(newHttpRequest);
> cycle = createRequestCycle();
> cycle.request();
> }
> else
> {
> String url =
> httpResponse.getHeader("Ajax-Location");
> if (url != null)
> {
> MockHttpServletRequest newHttpRequest =
> new MockHttpServletRequest(application,
> servletSession,
> application.getServletContext());
>
> newHttpRequest.setRequestToRedirectString(url);
> wicketRequest =
> application.newWebRequest(newHttpRequest);
> cycle = createRequestCycle();
> cycle.request();
> }
> }
> What I notice is that the AJAX path for the redirect is missing the
> "lastRenderedPage = generateLastRenderedPage(cycle);" that is there for the
> regular redirect, and was there in 1.3.7 for the AJAX path (since there was
> no distinction.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.