/* (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.data;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.lang.reflect.Method;
import java.util.Collections;
import org.apache.wicket.Component;
import org.apache.wicket.Page;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.form.RadioChoice;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.tester.FormTester;
import org.geoserver.data.test.MockData;
import org.geoserver.security.AccessMode;
import org.geoserver.security.impl.DataAccessRule;
import org.geoserver.security.impl.DataAccessRuleDAO;
import org.geoserver.security.web.AbstractListPageTest;
import org.geoserver.web.wicket.GeoServerDataProvider.Property;
import org.junit.Test;
public class DataSecurityPageTest extends AbstractListPageTest<DataAccessRule> {
protected Page listPage(PageParameters params) {
return new DataSecurityPage();
}
protected Page newPage(Object...params) {
return new NewDataAccessRulePage();
}
protected Page editPage(Object...params) {
if (params.length==0)
return new EditDataAccessRulePage( new DataAccessRule("it.geosolutions", "layer.dots",
AccessMode.READ, Collections.singleton("ROLE_ABC")));
else
return new EditDataAccessRulePage( (DataAccessRule) params[0]);
}
@Override
protected Property<DataAccessRule> getEditProperty() {
return DataAccessRuleProvider.RULEKEY;
}
@Override
protected boolean checkEditForm(String objectString) {
String[] array=objectString.split("\\.");
return array[0].equals(
tester.getComponentFromLastRenderedPage("form:root").getDefaultModelObject()) &&
array[1].equals(
tester.getComponentFromLastRenderedPage("form:layerContainer:layerAndLabel:layer").getDefaultModelObject());
}
@Override
protected String getSearchString() throws Exception{
for (DataAccessRule rule : DataAccessRuleDAO.get().getRules()) {
if (MockData.CITE_PREFIX.equals(rule.getRoot()) &&
MockData.BRIDGES.getLocalPart().equals(rule.getLayer()))
return rule.getKey();
}
return null;
}
@Override
protected void simulateDeleteSubmit() throws Exception {
DataAccessRuleDAO.get().reload();
assertTrue (DataAccessRuleDAO.get().getRules().size()>0);
SelectionDataRuleRemovalLink link = (SelectionDataRuleRemovalLink) getRemoveLink();
Method m = link.delegate.getClass().getDeclaredMethod("onSubmit", AjaxRequestTarget.class,Component.class);
m.invoke(link.delegate, null,null);
DataAccessRuleDAO.get().reload();
// if there are no rules, DataAccessRuleDAO.loadRules adds two basic rules
assertEquals(2,DataAccessRuleDAO.get().getRules().size());
}
@Test
public void testDefaultCatalogMode() throws Exception {
tester.startPage(DataSecurityPage.class);
tester.assertRenderedPage(DataSecurityPage.class);
assertEquals("HIDE", tester.getComponentFromLastRenderedPage("catalogModeForm:catalogMode")
.getDefaultModelObject().toString());
}
@Test
public void testEditCatalogMode() throws Exception {
tester.startPage(DataSecurityPage.class);
tester.assertRenderedPage(DataSecurityPage.class);
// simple test
assertFalse(("CHALLENGE".equals(tester.getComponentFromLastRenderedPage(
"catalogModeForm:catalogMode").getDefaultModelObject())));
// edit catalogMode value
final FormTester form = tester.newFormTester("catalogModeForm");
form.select("catalogMode", 1);
form.getForm().visitChildren(RadioChoice.class, (component, visit) -> {
if (component.getId().equals("catalogMode")) {
((RadioChoice) component).onSelectionChanged();
}
});
assertEquals("MIXED", tester.getComponentFromLastRenderedPage(
"catalogModeForm:catalogMode").getDefaultModelObject().toString());
}
}