/* (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.role;
import static org.junit.Assert.*;
import java.util.Iterator;
import org.apache.wicket.Page;
import org.apache.wicket.extensions.ajax.markup.html.tabs.AjaxTabbedPanel;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.util.tester.FormTester;
import org.geoserver.security.config.SecurityNamedServiceConfig;
import org.geoserver.security.impl.GeoServerRole;
import org.geoserver.security.web.AbstractSecurityPage;
import org.geoserver.security.web.AbstractSecurityWicketTestSupport;
import org.geoserver.security.web.SecurityNamedServiceEditPage;
import org.junit.Before;
import org.junit.Test;
public class NewRolePageTest extends AbstractSecurityWicketTestSupport {
NewRolePage page;
@Before
public void init() throws Exception {
doInitialize();
clearServices();
}
@Test
public void testFill() throws Exception{
//initializeForXML();
doTestFill();
}
protected void doInitialize() throws Exception {
initializeForXML();
}
protected void doTestFill() throws Exception {
insertValues();
AbstractSecurityPage returnPage = initializeForRoleServiceNamed(getRoleServiceName());
tester.startPage(page=(NewRolePage)
new NewRolePage(getRoleServiceName()).setReturnPage(returnPage));
tester.assertRenderedPage(NewRolePage.class);
FormTester form = tester.newFormTester("form");
form.setValue("name", "ROLE_TEST");
int index =-1;
for (String name : ((DropDownChoice<String>)page.get("form:parent")).getChoices()) {
index++;
if ("ROLE_AUTHENTICATED".equals(name))
break;
}
assertTrue (index >=0);
form.select("parent", index);
//tester.executeAjaxEvent("form:properties:add", "click");
//form = tester.newFormTester("form");
//print(tester.getLastRenderedPage(),true,true);
//form.setValue("properties:container:list:0:key", "bbox");
//form.setValue("properties:container:list:0:value", "10 10 20 20");
form.submit("save");
tester.assertRenderedPage(SecurityNamedServiceEditPage.class);
tester.assertErrorMessages(new String[0]);
GeoServerRole role = gaService.getRoleByName("ROLE_TEST");
assertNotNull(role);
//assertEquals(1,role.getProperties().size());
//assertEquals("10 10 20 20",role.getProperties().get("bbox"));
GeoServerRole parentRole = gaService.getParentRole(role);
assertNotNull(parentRole);
assertEquals("ROLE_AUTHENTICATED",parentRole.getAuthority());
}
@Test
public void testRoleNameConflict() throws Exception {
insertValues();
AbstractSecurityPage returnPage = initializeForRoleServiceNamed(getRoleServiceName());
tester.startPage(page=(NewRolePage)
new NewRolePage(getRoleServiceName()).setReturnPage(returnPage));
FormTester form = tester.newFormTester("form");
form.setValue("name", "ROLE_WFS");
form.submit("save");
assertTrue(testErrorMessagesWithRegExp(".*ROLE_WFS.*"));
tester.getMessages(FeedbackMessage.ERROR);
tester.assertRenderedPage(NewRolePage.class);
}
@Test
public void testInvalidWorkflow() throws Exception{
activateRORoleService();
AbstractSecurityPage returnPage = initializeForRoleServiceNamed(getRORoleServiceName());
boolean fail = true;
try {
tester.startPage(page=(NewRolePage)
new NewRolePage(getRORoleServiceName()).setReturnPage(returnPage));
} catch (RuntimeException ex) {
fail = false;
}
if (fail)
fail("No runtime exception for read only RoleService");
}
}