/* (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.user;
import static org.junit.Assert.*;
import java.util.SortedSet;
import org.apache.wicket.extensions.markup.html.form.palette.component.Recorder;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.security.impl.GeoServerRole;
import org.geoserver.security.impl.GeoServerUser;
import org.geoserver.security.impl.GeoServerUserGroup;
import org.geoserver.security.password.GeoServerPasswordEncoder;
import org.geoserver.security.web.AbstractSecurityPage;
import org.junit.Before;
import org.junit.Test;
public class EditUserPageTest extends AbstractUserPageTest {
GeoServerUser current;
@Before
public void init() throws Exception {
doInitialize();
clearServices();
deactivateRORoleService();
deactivateROUGService();
}
@Test
public void testFill() throws Exception{
doTestFill();
}
protected void doTestFill() throws Exception {
insertValues();
addAdditonalData();
current = ugService.getUserByUsername("user1");
initializeTester();
tester.assertRenderedPage(EditUserPage.class);
assertFalse(tester.getComponentFromLastRenderedPage("form:username").isEnabled());
tester.assertModelValue("form:username", "user1");
GeoServerPasswordEncoder encoder = (GeoServerPasswordEncoder)
GeoServerExtensions.bean(ugService.getPasswordEncoderName());
String enc = (String) tester.getComponentFromLastRenderedPage("form:password").getDefaultModelObject();
assertTrue(encoder.isPasswordValid(enc,"11111", null));
enc = (String) tester.getComponentFromLastRenderedPage("form:confirmPassword").getDefaultModelObject();
assertTrue(encoder.isPasswordValid(enc,"11111", null));
tester.assertModelValue("form:enabled", Boolean.TRUE);
newFormTester();
form.setValue("enabled", false);
//addUserProperty("coord", "10 10");
assertTrue(page.userGroupPalette.isEnabled());
tester.assertComponent("form:roles:palette:recorder", Recorder.class);
tester.debugComponentTrees();
addNewRole("ROLE_NEW");
tester.assertRenderedPage(EditUserPage.class);
assignRole("ROLE_NEW");
// reopen new role dialog again to ensure that the current state is not lost
openCloseRolePanel(EditUserPage.class);
assertCalculatedRoles(new String[] { "ROLE_AUTHENTICATED","ROLE_NEW","ROLE_WFS","ROLE_WMS" });
addNewGroup("testgroup");
assignGroup("testgroup");
openCloseGroupPanel(EditUserPage.class);
assertCalculatedRoles(new String[] { "ROLE_NEW" });
//print(tester.getLastRenderedPage(),true,true);
form.submit("save");
tester.assertErrorMessages(new String[0]);
//tester.assertRenderedPage(UserGroupTabbedPage.class);
GeoServerUser user = ugService.getUserByUsername("user1");
assertNotNull(user);
assertFalse(user.isEnabled());
//assertEquals(1,user.getProperties().size());
//assertEquals("10 10",user.getProperties().get("coord"));
SortedSet<GeoServerUserGroup> groupList = ugService.getGroupsForUser(user);
assertEquals(1,groupList.size());
assertTrue(groupList.contains(ugService.getGroupByGroupname("testgroup")));
SortedSet<GeoServerRole> roleList = gaService.getRolesForUser("user1");
assertEquals(1,roleList.size());
assertTrue(roleList.contains(gaService.getRoleByName("ROLE_NEW")));
}
@Test
public void testReadOnlyUserGroupService() throws Exception {
initializeForXML();
doTestReadOnlyUserGroupService();
}
protected void doTestReadOnlyUserGroupService() throws Exception {
insertValues();
activateROUGService();
AbstractSecurityPage returnPage = initializeForUGServiceNamed(getROUserGroupServiceName());
current = ugService.getUserByUsername("user1");
tester.startPage(page=(AbstractUserPage)
new EditUserPage(getROUserGroupServiceName(),current).setReturnPage(returnPage));
tester.assertRenderedPage(EditUserPage.class);
assertFalse(tester.getComponentFromLastRenderedPage("form:username").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:password").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:confirmPassword").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:enabled").isEnabled());
assertTrue(tester.getComponentFromLastRenderedPage("form:roles").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:groups").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:properties").isEnabled());
tester.assertVisible("form:save");
newFormTester();
assignRole(GeoServerRole.ADMIN_ROLE.getAuthority());
form.submit("save");
SortedSet<GeoServerRole> roleList = gaService.getRolesForUser("user1");
assertEquals(1,roleList.size());
assertTrue(roleList.contains(gaService.getRoleByName(GeoServerRole.ADMIN_ROLE.getAuthority())));
}
@Test
public void testReadOnlyRoleService() throws Exception {
doTestReadOnlyRoleService();
}
protected void doTestReadOnlyRoleService() throws Exception {
insertValues();
activateRORoleService();
current = ugService.getUserByUsername("user1");
initializeTester();
tester.assertRenderedPage(EditUserPage.class);
assertFalse(tester.getComponentFromLastRenderedPage("form:username").isEnabled());
assertTrue(tester.getComponentFromLastRenderedPage("form:password").isEnabled());
assertTrue(tester.getComponentFromLastRenderedPage("form:confirmPassword").isEnabled());
assertTrue(tester.getComponentFromLastRenderedPage("form:enabled").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:roles").isEnabled());
assertTrue(tester.getComponentFromLastRenderedPage("form:groups").isEnabled());
assertTrue(tester.getComponentFromLastRenderedPage("form:properties").isEnabled());
tester.assertVisible("form:save");
newFormTester();
form.setValue("enabled", Boolean.FALSE);
form.submit("save");
GeoServerUser user = ugService.getUserByUsername("user1");
assertNotNull(user);
assertFalse(user.isEnabled());
}
@Test
public void testAllServicesReadOnly() throws Exception {
insertValues();
activateROUGService();
activateRORoleService();
AbstractSecurityPage returnPage = initializeForUGServiceNamed(getROUserGroupServiceName());
current = ugService.getUserByUsername("user1");
tester.startPage(page=(AbstractUserPage)
new EditUserPage(getROUserGroupServiceName(),current).setReturnPage(returnPage));
tester.assertRenderedPage(EditUserPage.class);
assertFalse(tester.getComponentFromLastRenderedPage("form:username").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:password").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:confirmPassword").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:enabled").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:roles").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:groups").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:properties").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("form:properties").isEnabled());
//tester.assertInvisible("form:save");
}
@Override
protected void initializeTester() {
AbstractSecurityPage returnPage = initializeForUGServiceNamed(getUserGroupServiceName());
tester.startPage(page=(AbstractUserPage)
new EditUserPage(getUserGroupServiceName(),current).setReturnPage(returnPage));
}
@Test
public void testPasswordsDontMatch() throws Exception {
insertValues();
current = ugService.getUserByUsername("user1");
super.doTestPasswordsDontMatch(EditUserPage.class);
}
}