Stefan Bauer created WICKET-7160:
------------------------------------

             Summary: WicketTester: onchange AJAX behavior broken for 
DropDownChoice when page has a request parameter with the same name as the id 
of the DropDownChoice
                 Key: WICKET-7160
                 URL: https://issues.apache.org/jira/browse/WICKET-7160
             Project: Wicket
          Issue Type: Bug
    Affects Versions: 9.21.0
            Reporter: Stefan Bauer
         Attachments: bug.zip

h5. Steps to reproduce

(see code example below)
 * in a Page that was instantiated using request parameters...
 * have a DropDownChoice whose Wicket ID is identical to the name of one of the 
request paameters...
 * add a AJAX onchange behavior...
 * and then try to trigger this behavior using the WicketTester

h5. Expected Result

(see code example below)
 * onchange behavior is triggered with the correct value

h4. Actual Result
 * onchange behavior is triggered, but the value is null

h4. Code example

(Full source attached)

 
{code:java}
public class DemoPage extends WebPage {
    public DemoPage(PageParameters parameters) {
        super(parameters);
    }

    @Override
    protected void onInitialize() {
        super.onInitialize();
        Form<String> form = new Form<>("form");
        DropDownChoice<String> select = new DropDownChoice<>(
                "select",
                new Model<>(),
                List.of("Choice 1", "Choice 2"));
        select.add(OnChangeAjaxBehavior.onChange(target -> {
            System.out.println("Selected choice changed to: " + 
select.getModelObject());
        }));
        form.add(select);
        add(form);
    }
} {code}
{code:java}
public class DemoPageTest {
    @ParameterizedTest
    @ValueSource(strings = { "select", "somethingElse" })
    void testOnChangeAjaxBehavior(String requestParameterName) {
        // ARRANGE
        WicketTester tester = new WicketTester();
        tester.startPage(DemoPage.class, new 
PageParameters().add(requestParameterName, "23"));

        // ACT
        FormTester formTester = tester.newFormTester("form");
        formTester.select("select", 1);
        tester.executeAjaxEvent("form:select", "change");

        // ASSERT
        tester.assertModelValue("form:select", "Choice 2");
    }
} {code}
 
h4. Background

This does not happen when the page is acutally run on a real servlet container, 
e.g. Jetty.

As far as I can see, this is related to the POST request that the WicketTester 
creates for triggering the onchange AJAX behavior. Given the Wicket ID of the 
DropDownChoice is "select", in production, the request looks something like 
this:

URL: /page?1-1.0-form-select&select=23

Body: select=1

But in WicketTester, the request looks like this (if I debugged this correctly)

URL: /page?1-1.0-form-select&select=23&select=1

Body: (empty)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to