/* (c) 2014 - 2015 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.role;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.lang.reflect.Method;
import java.util.List;
import java.util.SortedSet;
import org.apache.wicket.Component;
import org.apache.wicket.Page;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.geoserver.security.impl.GeoServerRole;
import org.geoserver.security.web.AbstractSecurityPage;
import org.geoserver.security.web.AbstractTabbedListPageTest;
import org.geoserver.web.wicket.GeoServerDataProvider.Property;
import org.junit.Test;
public class RoleListPageTest extends AbstractTabbedListPageTest<GeoServerRole> {
public static final String SECOND_COLUM_PATH="itemProperties:1:component:link";
protected String getServiceName() {
return getRoleServiceName();
}
protected AbstractSecurityPage listPage(String roleServiceName) {
AbstractSecurityPage result = initializeForRoleServiceNamed(roleServiceName);
tester.clickLink(getTabbedPanelPath()+":tabs-container:tabs:1:link", true);
return result;
}
protected Page newPage(AbstractSecurityPage page,Object...params) {
if (params.length==0)
return new NewRolePage(getSecurityManager().getActiveRoleService().getName()).setReturnPage(page);
else
return new NewRolePage((String) params[0]).setReturnPage(page);
}
protected Page editPage(AbstractSecurityPage page,Object...params) {
if (params.length==0) {
return new EditRolePage(
getSecurityManager().getActiveRoleService().getName(),
GeoServerRole.ADMIN_ROLE).setReturnPage(page);
}
if (params.length==1)
return new EditRolePage(
getSecurityManager().getActiveRoleService().getName(),
(GeoServerRole) params[0]).setReturnPage(page);
else
return new EditRolePage((String) params[0],
(GeoServerRole) params[1]).setReturnPage(page);
}
protected String getTabbedPanelPath() {
return "panel:panel";
};
protected String getItemsPath() {
return getTabbedPanelPath()+":panel:table:listContainer:items";
};
@Test
public void testEditParentRole() throws Exception {
tester.startPage(listPage(getRoleServiceName()));
GeoServerRole role = gaService.getRoleByName("ROLE_AUTHENTICATED");
assertNotNull(role);
List<Property<GeoServerRole>> props = new RoleListProvider(getRoleServiceName()).getProperties();
Property<GeoServerRole> parentProp = null;
for (Property<GeoServerRole> prop: props) {
if (RoleListProvider.ParentPropertyName.equals(prop.getName())){
parentProp=prop;
break;
}
}
Component c = getFromList(SECOND_COLUM_PATH, role,parentProp);
assertNotNull(c);
tester.clickLink(c.getPageRelativePath());
tester.assertRenderedPage(EditRolePage.class);
assertTrue(checkEditForm(role.getAuthority()));
}
@Override
protected String getSearchString() throws Exception{
GeoServerRole role =
gaService.getRoleByName(
GeoServerRole.ADMIN_ROLE.getAuthority());
assertNotNull(role);
return role.getAuthority();
}
@Override
protected Property<GeoServerRole> getEditProperty() {
return RoleListProvider.ROLENAME;
}
@Override
protected boolean checkEditForm(String objectString) {
return objectString.equals(
tester.getComponentFromLastRenderedPage("form:name").getDefaultModelObject());
}
@Test
public void testReadOnlyService() throws Exception{
listPage(getRoleServiceName());
tester.assertVisible(getRemoveLink().getPageRelativePath());
tester.assertVisible(getAddLink().getPageRelativePath());
activateRORoleService();
listPage(getRORoleServiceName());
tester.assertInvisible(getRemoveLink().getPageRelativePath());
tester.assertInvisible(getAddLink().getPageRelativePath());
}
@Override
protected void simulateDeleteSubmit() throws Exception {
SelectionRoleRemovalLink link = (SelectionRoleRemovalLink) getRemoveLink();
Method m = link.delegate.getClass().getDeclaredMethod("onSubmit", AjaxRequestTarget.class,Component.class);
m.invoke(link.delegate, null,null);
SortedSet<GeoServerRole> roles = gaService.getRoles();
assertEquals(3,roles.size());
assertFalse(roles.contains(createNewRoleForRemvovalTest()));
}
GeoServerRole createNewRoleForRemvovalTest() throws Exception {
return gaStore.createRoleObject("NEW_ROLE");
}
@Override
protected void doRemove(String pathForLink) throws Exception {
GeoServerRole newRole = createNewRoleForRemvovalTest();
gaStore.addRole(newRole);
gaStore.store();
assertEquals(5,gaService.getRoles().size());
super.doRemove(pathForLink);
}
}