/* (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.wms.web.admin;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.Iterator;
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.request.mapper.parameter.PageParameters;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.StyleInfo;
import org.geoserver.data.test.SystemTestData;
import org.geoserver.security.AccessMode;
import org.geoserver.security.AdminRequest;
import org.geoserver.web.GeoServerWicketTestSupport;
import org.geoserver.wms.web.data.StyleEditPage;
import org.geoserver.wms.web.data.StyleNewPage;
import org.geoserver.wms.web.data.StylePage;
import org.junit.Test;
public class AdminPrivilegesTest extends GeoServerWicketTestSupport {
@Override
protected void onSetUp(SystemTestData testData) throws Exception {
super.onSetUp(testData);
addUser("cite", "cite", null, Arrays.asList("ROLE_CITE_ADMIN"));
addUser("sf", "sf", null, Arrays.asList("ROLE_SF_ADMIN"));
addLayerAccessRule("*", "*", AccessMode.READ, "*");
addLayerAccessRule("*", "*", AccessMode.WRITE, "*");
addLayerAccessRule("*", "*", AccessMode.ADMIN, "ROLE_ADMINISTRATOR");
addLayerAccessRule("cite", "*", AccessMode.ADMIN, "ROLE_CITE_ADMIN");
addLayerAccessRule("cite", "*", AccessMode.ADMIN, "ROLE_SF_ADMIN");
Catalog cat = getCatalog();
//add two workspace specific styles
StyleInfo s = cat.getFactory().createStyle();
s.setName("sf_style");
s.setWorkspace(cat.getWorkspaceByName("sf"));
s.setFilename("sf.sld");
cat.add(s);
s = cat.getFactory().createStyle();
s.setName("cite_style");
s.setWorkspace(cat.getWorkspaceByName("cite"));
s.setFilename("cite.sld");
cat.add(s);
}
void loginAsCite() {
login("cite", "cite", "ROLE_CITE_ADMIN");
}
void loginAsSf() {
login("sf", "sf", "ROLE_SF_ADMIN");
}
@Test
public void testStyleAllPageAsAdmin() throws Exception {
login();
tester.startPage(StylePage.class);
tester.assertRenderedPage(StylePage.class);
tester.debugComponentTrees();
Catalog cat = getCatalog();
DataView view =
(DataView) tester.getComponentFromLastRenderedPage("table:listContainer:items");
assertEquals(cat.getStyles().size(), view.getItemCount());
}
@Test
public void testStyleAllPage() throws Exception {
loginAsCite();
tester.startPage(StylePage.class);
tester.assertRenderedPage(StylePage.class);
Catalog cat = getCatalog();
DataView view =
(DataView) tester.getComponentFromLastRenderedPage("table:listContainer:items");
// logged in as CITE, will only see styles in this workspace
int expected = 1;
AdminRequest.start(new Object());
assertEquals(expected, view.getItemCount());
for (Iterator<Item> it = view.getItems(); it.hasNext();) {
String name = it.next().get("itemProperties:0:component:link:label")
.getDefaultModelObjectAsString();
assertFalse("sf_style".equals(name));
}
}
@Test
public void testStyleNewPageAsAdmin() throws Exception {
login();
tester.startPage(StyleNewPage.class);
tester.assertRenderedPage(StyleNewPage.class);
tester.assertModelValue("styleForm:context:panel:workspace", null);
DropDownChoice choice =
(DropDownChoice) tester.getComponentFromLastRenderedPage("styleForm:context:panel:workspace");
assertTrue(choice.isNullValid());
assertFalse(choice.isRequired());
}
@Test
public void testStyleNewPage() throws Exception {
loginAsCite();
tester.startPage(StyleNewPage.class);
tester.assertRenderedPage(StyleNewPage.class);
Catalog cat = getCatalog();
tester.assertModelValue("styleForm:context:panel:workspace", cat.getWorkspaceByName("cite"));
DropDownChoice choice =
(DropDownChoice) tester.getComponentFromLastRenderedPage("styleForm:context:panel:workspace");
assertFalse(choice.isNullValid());
assertTrue(choice.isRequired());
}
@Test
public void testStyleEditPageGlobal() throws Exception {
loginAsCite();
tester.startPage(StyleEditPage.class, new PageParameters().add(StyleEditPage.NAME, "point"));
tester.assertRenderedPage(StyleEditPage.class);
//assert all form components disabled except for cancel
assertFalse(tester.getComponentFromLastRenderedPage("styleForm:context:panel:name").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("styleForm:context:panel:workspace").isEnabled());
assertFalse(tester.getComponentFromLastRenderedPage("styleForm:context:panel:copy").isEnabled());
assertTrue(tester.getComponentFromLastRenderedPage("cancel").isEnabled());
}
}