package org.geoserver.web.security.data; import java.util.List; import java.util.Locale; import org.apache.wicket.extensions.markup.html.form.palette.component.Recorder; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.util.tester.FormTester; import org.geoserver.data.test.MockData; import org.geoserver.security.AccessMode; import org.geoserver.security.impl.DataAccessRule; import org.geoserver.security.impl.DataAccessRuleDAO; import org.geoserver.web.GeoServerWicketTestSupport; public class NewRulePageTest extends GeoServerWicketTestSupport { private DataAccessRuleDAO dao; private NewDataAccessRulePage page; @Override protected void setUpInternal() throws Exception { dao = DataAccessRuleDAO.get(); login(); page = new NewDataAccessRulePage(); tester.startPage(page); } public void testRenders() { tester.assertRenderedPage(NewDataAccessRulePage.class); } public void testFill() { Locale.setDefault(Locale.ENGLISH); // make sure the recorder is where we think it is, it contains the palette selection tester.assertComponent("ruleForm:roles:roles:recorder", Recorder.class); FormTester form = tester.newFormTester("ruleForm"); form.select("workspace", page.getWorkspaceNames().indexOf(MockData.CITE_PREFIX)); form.select("accessMode", 1); form.setValue("roles:roles:recorder", "*"); tester.assertRenderedPage(NewDataAccessRulePage.class); form.submit("save"); tester.assertErrorMessages(new String[0]); tester.assertRenderedPage(DataAccessRulePage.class); dao.reload(); assertEquals(1, dao.getRules().size()); DataAccessRule rule = dao.getRules().get(0); assertEquals("cite", rule.getWorkspace()); assertEquals("*", rule.getLayer()); assertEquals(AccessMode.WRITE, rule.getAccessMode()); // // palette and form submit in tester, just does not work... :-( // assertEquals(0, rule.getRoles()); // assertEquals("*", rule.getRoles().iterator().next()); } public void testAjaxUpdate() { FormTester form = tester.newFormTester("ruleForm"); form.select("workspace", page.getWorkspaceNames().indexOf(MockData.CITE_PREFIX)); List<String> layers = page.getLayerNames(MockData.CITE_PREFIX); tester.executeAjaxEvent("ruleForm:workspace", "onchange"); assertEquals(layers, ((DropDownChoice) tester.getComponentFromLastRenderedPage("ruleForm:layer")).getChoices()); } }