Package ninja

Source Code of ninja.NinjaRouterTest$WhenRouterAnswer

/**
* Copyright (C) 2012-2014 the original author or authors.
*
* 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 ninja;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import ninja.servlet.NinjaBootstrap;
import ninja.utils.NinjaMode;
import ninja.utils.NinjaModeHelper;
import ninja.utils.NinjaPropertiesImpl;

import org.junit.After;

/**
* NinjaRouterTest had a lot of sideffects. Mainly because Ninja is started in
* prod mode, what also means that - well - stuff is loaded in prod mode.
* Which means real services are started, real logging is started and so on.
*
* Therefore it is a bad idea using NinjaRouterTest.
*
* @author ra
* @deprecated
*/
@Deprecated
public class NinjaRouterTest {

    /** The router - initiated from a real server. Routes are verified with this router */
    public Router router;
   
    NinjaBootstrap ninjaBootup;
   
    /**
     * Start the server and load the routes.
     */
    public void startServer(NinjaMode ninjaMode) {
       
        if (ninjaMode == null) {
           
            NinjaPropertiesImpl ninjaProperties = new NinjaPropertiesImpl(
                    NinjaModeHelper.determineModeFromSystemPropertiesOrProdIfNotSet());
           
            ninjaBootup = new NinjaBootstrap(
                    ninjaProperties);
        } else {
            // in this case servletContext can be null
            NinjaPropertiesImpl ninjaProperties = new NinjaPropertiesImpl(ninjaMode);
           
            ninjaBootup = new NinjaBootstrap(ninjaProperties);
        }

        ninjaBootup.boot();

        router = ninjaBootup.getInjector().getInstance(Router.class);

    }
   
    @After
    public void stopServer() {
       
        if (ninjaBootup != null) {
            ninjaBootup.shutdown();
        }
       
    }
   
   
    /**
     * Start the server and load the routes.
     *
     * No special mode is set. By default the mode "dev" is then used by the server.
     */
    public void startServer() {
        startServer(null);
    }

    /**
     * Start a server in prod mode and load routes.
     */
    public void startServerInProdMode() {

        startServer(NinjaMode.prod);

    }

    /**
     * Start a server in dev mode and load routes.
     */
    public void startServerInDevMode() {

        startServer(NinjaMode.dev);

    }

    /**
     * Start a server in test mode and load routes.
     */
    public void startServerInTestMode() {
       
        startServer(NinjaMode.test);

    }

    public class WhenRouterAnswer {

        private String httpMethod;
        private String url;

        public WhenRouterAnswer(String httpMethod, String url) {
            this.httpMethod = httpMethod;
            this.url = url;

        }

        /**
         * Verifies that a routes is handled by that class and controller method.
         *
         * @param controllerClass The controller class.
         * @param controllerMethod The controller method.
         */
        public void isHandledBy(Class controllerClass, String controllerMethod) {

            assertTrue(isHttpMethodAndUrlMatchedByControllerClassAndControllerMethod(router,
                    httpMethod, url, controllerClass, controllerMethod));

        }
       
        /**
         * Verifies that a routes is handled by that class and controller method.
         *
         * @param controllerClass The controller class.
         * @param controllerMethod The controller method.
         */
        public void isNotHandledBy(Class controllerClass, String controllerMethod) {

            assertFalse(isHttpMethodAndUrlMatchedByControllerClassAndControllerMethod(router,
                    httpMethod, url, controllerClass, controllerMethod));

        }

        /**
         * Verifies that a route is NOT handled.
         *
         * For instance you would call this route to make sure _test routes are not handled
         * in production mode.
         */
        public void isNotHandledByRoutesInRouter() {
            assertTrue(router.getRouteFor(httpMethod, url) == null);

        }

    }

    /**
     * The worker method used internally. Checks if that route is active.
     *
     * @param router The router to ask.
     * @param httpMethod The method to use (GET, POST...)
     * @param url The url to use ("/_test" or "/profile/myId" ...)
     * @param controllerClass The controller class supposed to handle the url.
     * @param controllerMethodName The controller method supposed to handle the url
     * @return true if handled by given configuration / false if not.
     */
    private static boolean isHttpMethodAndUrlMatchedByControllerClassAndControllerMethod(
            Router router, String httpMethod, String url, Class controllerClass,
            String controllerMethodName) {

        if (!router.getRouteFor(httpMethod, url).getControllerClass().equals(controllerClass)) {

            return false;

        }

        if (!router.getRouteFor(httpMethod, url).getControllerMethod().getName().equals(
                controllerMethodName)) {

            return false;

        }

        return true;

    }

    /**
     *
     * A simple DSL that allows to test routes.
     *
     * Simplifies the task to test if routes in certain modes are active only
     * in their correct modes.
     *
     * For instance you don't want to have /_test routes be available in
     * prod mode.
     *
     * @param httpMethod "GET", "POST", "DELETE", "PUT" and so on...
     * @param url the url to test. For instance "/_test". Does not contain a server prefix.
     * @return An answer for chaning. "isHandledBy(...)
     */
    public WhenRouterAnswer aRequestLike(String httpMethod, String url) {

        return new WhenRouterAnswer(httpMethod, url);

    }



}
TOP

Related Classes of ninja.NinjaRouterTest$WhenRouterAnswer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.