/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.security.web.service; import static org.junit.Assert.*; import java.util.List; import org.apache.wicket.extensions.markup.html.form.palette.component.Recorder; import org.apache.wicket.util.tester.FormTester; import org.geoserver.security.impl.ServiceAccessRule; import org.geoserver.security.impl.ServiceAccessRuleDAO; import org.geoserver.security.web.AbstractSecurityWicketTestSupport; import org.geoserver.security.web.role.NewRolePage; import org.junit.Test; public class NewServiceAccessRulePageTest extends AbstractSecurityWicketTestSupport { NewServiceAccessRulePage page; @Test public void testFill() throws Exception { initializeForXML(); //insertValues(); tester.startPage(page=new NewServiceAccessRulePage()); tester.assertRenderedPage(NewServiceAccessRulePage.class); FormTester form = tester.newFormTester("form"); int index = indexOf(page.serviceChoice.getChoices(),"wms"); form.select("service", index); tester.executeAjaxEvent("form:service", "change"); form = tester.newFormTester("form"); index = indexOf(page.methodChoice.getChoices(),"GetStyles"); form.select("method", index); tester.assertComponent("form:roles:palette:recorder", Recorder.class); // add a role on the fly form.submit("roles:addRole"); tester.assertRenderedPage(NewRolePage.class); form=tester.newFormTester("form"); form.setValue("name", "ROLE_NEW"); form.submit("save"); // assign the new role to the method form=tester.newFormTester("form"); tester.assertRenderedPage(NewServiceAccessRulePage.class); form.setValue("roles:palette:recorder", gaService.getRoleByName("ROLE_NEW").getAuthority()); // reopen new role dialog again to ensure that the current state is not lost form.submit("roles:addRole"); tester.assertRenderedPage(NewRolePage.class); tester.clickLink("form:cancel"); tester.assertRenderedPage(NewServiceAccessRulePage.class); // now save form=tester.newFormTester("form"); form.submit("save"); tester.assertErrorMessages(new String[0]); tester.assertRenderedPage(ServiceAccessRulePage.class); ServiceAccessRule foundRule=null; for (ServiceAccessRule rule : ServiceAccessRuleDAO.get().getRules()) { if ("wms".equals(rule.getService())&& "GetStyles".equals(rule.getMethod())) { foundRule = rule; break; } } assertNotNull(foundRule); assertEquals(1,foundRule.getRoles().size()); assertEquals("ROLE_NEW",foundRule.getRoles().iterator().next()); } @Test public void testDuplicateRule() throws Exception { initializeForXML(); initializeServiceRules(); tester.startPage(page=new NewServiceAccessRulePage()); FormTester form = tester.newFormTester("form"); int index = indexOf(page.serviceChoice.getChoices(),"wms"); form.select("service", index); tester.executeAjaxEvent("form:service", "change"); form = tester.newFormTester("form"); index = indexOf(page.methodChoice.getChoices(),"GetMap"); form.select("method", index); form.setValue("roles:palette:recorder", "ROLE_WMS"); form.submit("save"); assertTrue(testErrorMessagesWithRegExp(".*wms\\.GetMap.*")); tester.assertRenderedPage(NewServiceAccessRulePage.class); } @Test public void testEmptyRoles() throws Exception { initializeForXML(); initializeServiceRules(); tester.startPage(page=new NewServiceAccessRulePage()); FormTester form = tester.newFormTester("form"); int index = indexOf(page.serviceChoice.getChoices(),"wms"); form.select("service", index); tester.executeAjaxEvent("form:service", "change"); form = tester.newFormTester("form"); index = indexOf(page.methodChoice.getChoices(),"GetStyles"); form.select("method", index); form.submit("save"); assertTrue(testErrorMessagesWithRegExp(".*has no role.*")); tester.assertRenderedPage(NewServiceAccessRulePage.class); } @Test public void testReadOnlyRoleService() throws Exception{ initializeForXML(); activateRORoleService(); tester.startPage(page=new NewServiceAccessRulePage()); tester.assertInvisible("form:roles:addRole"); } protected int indexOf(List<? extends String> strings, String searchValue) { int index =0; for (String s : strings) { if (s.equals(searchValue)) return index; index++; } assertTrue(index!=-1); return -1; } }