/* (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.user;
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.GeoServerUser;
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 UserListPageTest extends AbstractTabbedListPageTest<GeoServerUser> {
protected boolean withRoles=false;
protected AbstractSecurityPage listPage(String serviceName ) {
AbstractSecurityPage result = initializeForUGServiceNamed(serviceName);
tester.clickLink(getTabbedPanelPath()+":tabs-container:tabs:1:link", true);
return result;
}
protected Page newPage(AbstractSecurityPage page,Object...params) {
if (params.length==0)
return new NewUserPage(getUserGroupServiceName()).setReturnPage(page);
else
return new NewUserPage((String) params[0]).setReturnPage(page);
}
protected Page editPage(AbstractSecurityPage page,Object...params) {
if (params.length==0) {
return new EditUserPage(
getUserGroupServiceName(),
new GeoServerUser("dummyuser")).setReturnPage(page);
}
if (params.length==1)
return new EditUserPage(
getUserGroupServiceName(),
(GeoServerUser) params[0]).setReturnPage(page);
else
return new EditUserPage( (String) params[0],
(GeoServerUser) params[1]).setReturnPage(page);
}
@Override
protected String getSearchString() throws Exception{
GeoServerUser u = ugService.getUserByUsername("user1");
assertNotNull(u);
return u.getUsername();
}
@Override
protected Property<GeoServerUser> getEditProperty() {
return UserListProvider.USERNAME;
}
@Override
protected boolean checkEditForm(String objectString) {
return objectString.equals(
tester.getComponentFromLastRenderedPage("form:username").getDefaultModelObject());
}
@Test
public void testReadOnlyService() throws Exception {
doInitialize();
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 {
SelectionUserRemovalLink link =
(SelectionUserRemovalLink) (withRoles ? getRemoveLinkWithRoles() : getRemoveLink());
Method m = link.delegate.getClass().getDeclaredMethod("onSubmit", AjaxRequestTarget.class,Component.class);
m.invoke(link.delegate, null,null);
SortedSet<GeoServerUser> users = ugService.getUsers();
assertTrue(users.size()==0);
if (withRoles)
assertTrue(gaService.getRolesForUser("user1").size()==0);
else
assertTrue(gaService.getRolesForUser("user1").size()==2);
}
@Test
public void testRemoveWithRoles() throws Exception {
withRoles=true;
//initializeForXML();
//insertValues();
addAdditonalData();
doRemove(getTabbedPanelPath()+":panel:header:removeSelectedWithRoles");
}
@Override
protected String getTabbedPanelPath() {
//return "UserGroupTabbedPage";
return "panel:panel";
}
@Override
protected String getServiceName() {
return getUserGroupServiceName();
}
}