package lt.inventi.wicket.component.repeater.expandable; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import java.util.ArrayList; import java.util.List; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.protocol.http.mock.MockHttpServletResponse; import org.apache.wicket.util.tester.WicketTester; import org.junit.Test; public class MultipleExpandableViewTest { private WicketTester tester = new WicketTester(); private List<String> view1Objects = new ArrayList<String>(); private List<String> view2Objects = new ArrayList<String>(); @Test public void addsItemsToSeparateViews() { IModel<List<String>> model1 = PropertyModel.of(this, "view1Objects"); IModel<List<String>> model2 = PropertyModel.of(this, "view2Objects"); MultipleViewTestPage page = new MultipleViewTestPage(model1, model2); tester.startPage(page); tester.clickLink(page.view1Link); checkScripts("var item=document.createElement('span');item.id='id03';$('#view1container').append(item);"); assertThat(getView1().size(), is(1)); assertThat(view1Objects.size(), is(1)); assertThat(getView2().size(), is(0)); assertThat(view2Objects.size(), is(0)); tester.clickLink(page.view2Link); checkScripts("var item=document.createElement('span');item.id='id04';$('#view2container').append(item);"); assertThat(getView1().size(), is(1)); assertThat(view1Objects.size(), is(1)); assertThat(getView2().size(), is(1)); assertThat(view2Objects.size(), is(1)); tester.clickLink(page.view2Link); checkScripts("var item=document.createElement('span');item.id='id15';$('#view2container').append(item);"); assertThat(getView1().size(), is(1)); assertThat(view1Objects.size(), is(1)); assertThat(getView2().size(), is(2)); assertThat(view2Objects.size(), is(2)); } private ExpandableView<String> getView1() { return ((MultipleViewTestPage) tester.getLastRenderedPage()).view1; } private ExpandableView<String> getView2() { return ((MultipleViewTestPage) tester.getLastRenderedPage()).view2; } private void checkScripts(String... scripts) { MockHttpServletResponse response = tester.getLastResponse(); for (String s : scripts) { assertThat(response.getDocument(), containsString(s)); } } private class MultipleViewTestPage extends WebPage { private final AddNewItemLink<String> view1Link, view2Link; private final ExpandableView<String> view1, view2; MultipleViewTestPage(final IModel<List<String>> view1Model, final IModel<List<String>> view2Model) { super(); WebMarkupContainer container1 = new WebMarkupContainer("view1container"); container1.setMarkupId(container1.getId()); container1.add(view1 = new ExpandableView<String>("view1", view1Model) { @Override protected void populateItem(Item<String> item) { item.add(new Label("name", item.getModel())); } }); add(container1); WebMarkupContainer container2 = new WebMarkupContainer("view2container"); container2.setMarkupId(container2.getId()); container2.add(view2 = new ExpandableView<String>("view2", view2Model) { @Override protected void populateItem(Item<String> item) { item.add(new Label("name", item.getModel())); } }); add(container2); add(view1Link = new AutoAddNewItemLink<String>("addView1", view1)); add(view2Link = new AutoAddNewItemLink<String>("addView2", view2)); } } }