/* (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.lang.reflect.Method;
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.GeoServerUserGroup;
import org.geoserver.security.web.AbstractSecurityPage;
import org.geoserver.security.web.AbstractTabbedListPageTest;
import org.geoserver.web.wicket.GeoServerDataProvider.Property;
import org.junit.Before;
import org.junit.Test;
public class GroupListPageTest extends AbstractTabbedListPageTest<GeoServerUserGroup> {
protected boolean withRoles=false;
protected AbstractSecurityPage listPage(String serviceName ) {
AbstractSecurityPage result = initializeForUGServiceNamed(serviceName);
tester.clickLink(getTabbedPanelPath()+":tabs-container:tabs:2:link", true);
return result;
}
protected Page newPage(AbstractSecurityPage page,Object...params) {
if (params.length==0)
return new NewGroupPage(getUserGroupServiceName()).setReturnPage(page);
else
return new NewGroupPage((String) params[0]).setReturnPage(page);
}
protected Page editPage(AbstractSecurityPage page,Object...params) {
if (params.length==0) {
return new EditGroupPage(
getUserGroupServiceName(),
new GeoServerUserGroup("dummygroup")).setReturnPage(page);
}
if (params.length==1)
return new EditGroupPage(
getUserGroupServiceName(),
(GeoServerUserGroup) params[0]).setReturnPage(page);
else
return new EditGroupPage( (String) params[0],
(GeoServerUserGroup) params[1]).setReturnPage(page);
}
@Override
protected String getSearchString() throws Exception{
GeoServerUserGroup g = ugService.getGroupByGroupname("admins");
assertNotNull(g);
return g.getGroupname();
}
@Override
protected Property<GeoServerUserGroup> getEditProperty() {
return GroupListProvider.GROUPNAME;
}
@Override
protected boolean checkEditForm(String objectString) {
return objectString.equals(
tester.getComponentFromLastRenderedPage("form:groupname").getDefaultModelObject());
}
@Before
public void init() throws Exception {
}
@Test
public void testReadOnlyService() throws Exception {
//initializeForXML();
tester.startPage(listPage(getUserGroupServiceName()));
tester.assertVisible(getRemoveLink().getPageRelativePath());
tester.assertVisible(getRemoveLinkWithRoles().getPageRelativePath());
tester.assertVisible(getAddLink().getPageRelativePath());
activateRORoleService();
tester.startPage(listPage(getUserGroupServiceName()));
tester.assertVisible(getRemoveLink().getPageRelativePath());
tester.assertInvisible(getRemoveLinkWithRoles().getPageRelativePath());
tester.assertVisible(getAddLink().getPageRelativePath());
activateROUGService();
tester.startPage(listPage(getROUserGroupServiceName()));
tester.assertInvisible(getRemoveLink().getPageRelativePath());
tester.assertInvisible(getAddLink().getPageRelativePath());
tester.assertInvisible(getRemoveLinkWithRoles().getPageRelativePath());
}
@Override
protected void simulateDeleteSubmit() throws Exception {
SelectionGroupRemovalLink link =
(SelectionGroupRemovalLink) (withRoles ? getRemoveLinkWithRoles() : getRemoveLink());
Method m = link.delegate.getClass().getDeclaredMethod("onSubmit", AjaxRequestTarget.class,Component.class);
m.invoke(link.delegate, null,null);
SortedSet<GeoServerUserGroup> groups = ugService.getUserGroups();
assertTrue(groups.size()==0);
if (withRoles)
assertTrue(gaService.getRolesForGroup("group1").size()==0);
else
assertTrue(gaService.getRolesForGroup("group1").size()==2);
}
@Test
public void testRemoveWithRoles() throws Exception {
withRoles=true;
//initializeForXML();
//insertValues();
addAdditonalData();
doRemove(getTabbedPanelPath()+":panel:header:removeSelectedWithRoles");
}
@Override
protected String getTabbedPanelPath() {
return "panel:panel";
}
@Override
protected String getServiceName() {
return getUserGroupServiceName();
}
}