Wicket
  1. Wicket
  2. WICKET-1582

WicketTester executeAjaxEvent onclick generating non-AJAX response

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.3.4, 1.4-M3
    • Fix Version/s: 1.3.5, 1.4-RC1
    • Component/s: wicket
    • Labels:
      None
    • Environment:
      Wicket 1.3-SNAPSHOT as of today

      Description

      Executing:
      tester.executeAjaxEvent("linky", "onclick");
      tester.assertComponentOnAjaxResponse(component);
      throws an exception saying "The Previous response was not an AJAX response. You need to execute an AJAX event, using clickLink, before using this assert" although executeAjaxEvent should be resulting in an AJAX response (and prior to 1.3.3 it did).

      Executing tester.clickLink("linky"), which probably should be equivalent to the above executeAjaxEvent, does work.

      I'll attach a simple testcase demonstrating this behaviour.

      1. wicket1582.jar
        3 kB
        Nick Johnson

        Issue Links

          Activity

          Hide
          Timo Rantalaiho added a comment -

          Resolving for now to not block releases because of this. Please create a new issue if you're not happy with this workaround.

          Show
          Timo Rantalaiho added a comment - Resolving for now to not block releases because of this. Please create a new issue if you're not happy with this workaround.
          Hide
          Timo Rantalaiho added a comment - - edited

          Nick,

          Thanks for reporting!

          I now "fixed" this in 1.3.x and trunk by making this possible

                  @Test
                  public void testClickingAjaxLinkWithOnclick() {
                      final WicketTester tester = new WicketTester() {
                      @Override
                      protected WebRequestCycle resolveRequestCycle() {
                              return setupRequestAndResponse(true);
                      }
                  };
                  tester.startPage(MyPage.class);
          
                  final Component component = tester.getComponentFromLastRenderedPage("spanny");
                  assertNotNull(component);
                  
                  tester.executeAjaxEvent("linky", "onclick");
                  tester.assertComponentOnAjaxResponse(component);
          

          The reasoning can be found in this thread (hard to get the Nabble link right in this Jira without Confluence markup)

          http://www.nabble.com/WICKET-1582-blocked-by-WICKET-254-td19521561.html#a19521561

          Theoretically, the default could be the other way around, but then it would change the current behaviour and make existing tests fail :/ Anyway I think that in big projects you tend to have common places where WicketTester gets initialised and where you can change this if you want it in all your tests.

          Are you happy with this solution and can the issue be closed? Or do you have better ideas?

          Show
          Timo Rantalaiho added a comment - - edited Nick, Thanks for reporting! I now "fixed" this in 1.3.x and trunk by making this possible @Test public void testClickingAjaxLinkWithOnclick() { final WicketTester tester = new WicketTester() { @Override protected WebRequestCycle resolveRequestCycle() { return setupRequestAndResponse( true ); } }; tester.startPage(MyPage.class); final Component component = tester.getComponentFromLastRenderedPage( "spanny" ); assertNotNull(component); tester.executeAjaxEvent( "linky" , "onclick" ); tester.assertComponentOnAjaxResponse(component); The reasoning can be found in this thread (hard to get the Nabble link right in this Jira without Confluence markup) http://www.nabble.com/WICKET-1582-blocked-by-WICKET-254-td19521561.html#a19521561 Theoretically, the default could be the other way around, but then it would change the current behaviour and make existing tests fail :/ Anyway I think that in big projects you tend to have common places where WicketTester gets initialised and where you can change this if you want it in all your tests. Are you happy with this solution and can the issue be closed? Or do you have better ideas?
          Hide
          Nick Johnson added a comment -

          Simple test case showing nonequivalent behaviour between executeAjaxEvent("foo", "onclick") and clickLink("foo").

          Show
          Nick Johnson added a comment - Simple test case showing nonequivalent behaviour between executeAjaxEvent("foo", "onclick") and clickLink("foo").

            People

            • Assignee:
              Timo Rantalaiho
              Reporter:
              Nick Johnson
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development