org.geoserver.security.web.data.DataSecurityPageTest.java Source code

Java tutorial

Introduction

Here is the source code for org.geoserver.security.web.data.DataSecurityPageTest.java

Source

/* (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.data;

import static org.junit.Assert.*;

import java.lang.reflect.Method;
import java.util.Collections;

import org.apache.wicket.Component;
import org.apache.wicket.Component.IVisitor;
import org.apache.wicket.Page;
import org.apache.wicket.PageParameters;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.form.RadioChoice;
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:workspace").getDefaultModelObject())
                && array[1].equals(tester.getComponentFromLastRenderedPage("form:layer").getDefaultModelObject());
    }

    @Override
    protected String getSearchString() throws Exception {
        for (DataAccessRule rule : DataAccessRuleDAO.get().getRules()) {
            if (MockData.CITE_PREFIX.equals(rule.getWorkspace())
                    && 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, new IVisitor() {
            public Object component(final Component component) {
                if (component.getId().equals("catalogMode")) {
                    ((RadioChoice) component).onSelectionChanged();
                }
                return CONTINUE_TRAVERSAL;
            }
        });

        assertEquals("MIXED", tester.getComponentFromLastRenderedPage("catalogModeForm:catalogMode")
                .getDefaultModelObject().toString());

    }
}