org.apache.wicket.security.examples.springsecurity.AbstractSecureTestPage.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.wicket.security.examples.springsecurity.AbstractSecureTestPage.java

Source

/*
 * Copyright 2008 Stichting JoiningTracks, The Netherlands
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.wicket.security.examples.springsecurity;

import java.io.File;
import java.util.Locale;

import junit.framework.TestCase;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.security.WaspSession;
import org.apache.wicket.security.examples.springsecurity.security.MockLoginPage;
import org.apache.wicket.security.examples.springsecurity.security.SpringSecureLoginContext;
import org.apache.wicket.security.hive.HiveMind;
import org.apache.wicket.util.tester.FormTester;
import org.apache.wicket.util.tester.WicketTester;

/**
 * Abstract base page for testing wicket pages based on the ACEGI security setup. This
 * base creates the WicketTester as a mock, usable by the testpages that extend this page.
 * <p/>
 * Two convenience methods are available to login and logoff
 * 
 * @author Olger Warnier
 */
public abstract class AbstractSecureTestPage extends TestCase {
    private static final Log log = LogFactory.getLog(AbstractSecureTestPage.class);

    /**
     * The swarm application used for the test.
     */
    protected WebApplication application;

    /**
     * Handle to the mock environment.
     */
    protected WicketTester mock;

    /**
     * @see junit.framework.TestCase#setUp()
     */
    @Override
    protected void setUp() throws Exception {
        Locale.setDefault(Locale.UK);

        String webAppLocation;

        File currentDir = new File(".");
        log.debug("CurrentDir:" + currentDir.getCanonicalPath());
        if (currentDir.getCanonicalPath().endsWith("examples/spring-security")) {
            webAppLocation = "src/main/webapp";
        } else {
            webAppLocation = "examples/spring-security/src/main/webapp";
        }

        log.debug("start the testapplication with location: " + webAppLocation);
        application = new SpringSecureWicketTestApplication();
        mock = new WicketTester(application, webAppLocation);
    }

    /**
     * @see junit.framework.TestCase#tearDown()
     */
    @Override
    protected void tearDown() {
        mock.setupRequestAndResponse();
        mock.getWicketSession().invalidate();
        mock.processRequestCycle();
        mock.destroy();
        mock = null;
        application = null;
        HiveMind.unregisterHive("test");
    }

    /**
     * Convenience method to login to the application, mostly required as the whole is
     * protected by ACEGI and Swarm The test structure makes us of the ACEGI
     * TestingAuthentication provider, meaning that you can pass on any username (the
     * password is the same).
     * <p/>
     * The user 'medical' has an additional role 'ROLE_MEDICAL'. All other users have
     * 'ROLE_USER'
     * 
     * @param userName
     */
    protected void loginToApp(String userName) {
        mock.startPage(MockLoginPage.class);
        mock.assertRenderedPage(MockLoginPage.class);
        FormTester form = mock.newFormTester("form");
        form.setValue("username", userName);
        form.submit();
        mock.assertRenderedPage(HomePage.class);
        mock.processRequestCycle();

    }

    /**
     * Convenience method to logout of the application.
     */
    protected void logoutOfApp() {
        assertTrue(((WaspSession) mock.getWicketSession()).logoff(new SpringSecureLoginContext()));
        mock.startPage(HomePage.class);
        mock.assertRenderedPage(HomePage.class);
        mock.processRequestCycle();
    }
}