/* (c) 2014 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.group;
import static org.junit.Assert.*;
import java.util.SortedSet;
import org.apache.wicket.util.tester.FormTester;
import org.geoserver.security.impl.GeoServerRole;
import org.geoserver.security.impl.GeoServerUserGroup;
import org.geoserver.security.web.AbstractSecurityPage;
import org.geoserver.security.web.AbstractSecurityWicketTestSupport;
import org.geoserver.security.web.SecurityNamedServiceEditPage;
import org.geoserver.security.web.role.NewRolePage;
import org.junit.Before;
import org.junit.Test;
public class EditGroupPageTest extends AbstractSecurityWicketTestSupport {
EditGroupPage page;
@Before
public void init() throws Exception {
doInitialize();
clearServices();
deactivateRORoleService();
deactivateROUGService();
}
protected void doInitialize() throws Exception {
initializeForXML();
}
@Test
public void testFill() throws Exception{
doTestFill();
}
protected void doTestFill() throws Exception {
insertValues();
AbstractSecurityPage returnPage = initializeForUGServiceNamed(getUserGroupServiceName());
tester.startPage(page=(EditGroupPage) new EditGroupPage(getUserGroupServiceName(),
ugService.getGroupByGroupname("group1")).setReturnPage(returnPage));
tester.assertRenderedPage(EditGroupPage.class);
tester.assertRenderedPage(EditGroupPage.class);
assertFalse(tester.getComponentFromLastRenderedPage("form:groupname").isEnabled());
assertTrue(tester.getComponentFromLastRenderedPage("form:enabled").isEnabled());
assertTrue(tester.getComponentFromLastRenderedPage("form:roles").isEnabled());
tester.assertVisible("form:save");
tester.assertModelValue("form:groupname", "group1");
tester.assertModelValue("form:enabled", Boolean.TRUE);
FormTester form = tester.newFormTester("form");
form.setValue("enabled", Boolean.FALSE);
// 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 new group
form=tester.newFormTester("form");
tester.assertRenderedPage(EditGroupPage.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(EditGroupPage.class);
// now save
form=tester.newFormTester("form");
form.submit("save");
tester.assertRenderedPage(SecurityNamedServiceEditPage.class);
tester.assertErrorMessages(new String[0]);
GeoServerUserGroup group = ugService.getGroupByGroupname("group1");
assertNotNull(group);
assertFalse(group.isEnabled());
SortedSet<GeoServerRole> roleList = gaService.getRolesForGroup("group1");
assertEquals(1,roleList.size());
assertEquals("ROLE_NEW",roleList.iterator().next().getAuthority());
}
@Test
public void testReadOnlyUserGroupService() throws Exception {
doTestReadOnlyUserGroupService();
}
protected void doTestReadOnlyUserGroupService() throws Exception {
insertValues();
activateROUGService();
AbstractSecurityPage returnPage = initializeForUGServiceNamed(getROUserGroupServiceName());
tester.startPage(page=(EditGroupPage) new EditGroupPage(getROUserGroupServiceName(),
ugService.getGroupByGroupname("group1")).setReturnPage(returnPage));
tester.assertRenderedPage(EditGroupPage.class);
assertFalse(tester.getComponentFromLastRenderedPage("form:groupname").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:enabled").isEnabled());
assertTrue(tester.getComponentFromLastRenderedPage("form:roles").isEnabled());
assertTrue(tester.getComponentFromLastRenderedPage("form:save").isEnabled());
FormTester form=tester.newFormTester("form");
form.setValue("roles:palette:recorder", gaService.getRoleByName("ROLE_WFS").getAuthority());
form.submit("save");
tester.assertRenderedPage(SecurityNamedServiceEditPage.class);
SortedSet<GeoServerRole> roleList = gaService.getRolesForGroup("group1");
assertEquals(1,roleList.size());
assertEquals("ROLE_WFS",roleList.iterator().next().getAuthority());
}
@Test
public void testReadOnlyRoleService() throws Exception {
doTestReadOnlyRoleService();
}
protected void doTestReadOnlyRoleService() throws Exception {
insertValues();
activateRORoleService();
AbstractSecurityPage returnPage = initializeForUGServiceNamed(getUserGroupServiceName());
tester.startPage(page=(EditGroupPage) new EditGroupPage(getUserGroupServiceName(),
ugService.getGroupByGroupname("group1")).setReturnPage(returnPage));
tester.assertRenderedPage(EditGroupPage.class);
assertFalse(tester.getComponentFromLastRenderedPage("form:groupname").isEnabled());
assertTrue(tester.getComponentFromLastRenderedPage("form:enabled").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:roles").isEnabled());
tester.assertVisible("form:save");
FormTester form = tester.newFormTester("form");
form.setValue("enabled", Boolean.FALSE);
form.submit("save");
tester.assertRenderedPage(SecurityNamedServiceEditPage.class);
GeoServerUserGroup group = ugService.getGroupByGroupname("group1");
assertNotNull(group);
assertFalse(group.isEnabled());
}
@Test
public void testAllServicesReadOnly() throws Exception {
activateROUGService();
activateRORoleService();
AbstractSecurityPage returnPage = initializeForUGServiceNamed(getROUserGroupServiceName());
tester.startPage(page=(EditGroupPage) new EditGroupPage(getROUserGroupServiceName(),
ugService.getGroupByGroupname("group1")).setReturnPage(returnPage));
tester.assertRenderedPage(EditGroupPage.class);
assertFalse(tester.getComponentFromLastRenderedPage("form:groupname").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:enabled").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:roles").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:save").isEnabled());
}
}