/*
* Copyright (c) 2015, Inversoft Inc., All Rights Reserved
*
* 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.primeframework.mvc.action.result;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import org.primeframework.mvc.PrimeBaseTest;
import org.primeframework.mvc.action.ActionInvocation;
import org.primeframework.mvc.action.ActionInvocationStore;
import org.primeframework.mvc.action.result.ReexecuteSavedRequestResult.ReexecuteSavedRequestImpl;
import org.primeframework.mvc.action.result.annotation.ReexecuteSavedRequest;
import org.primeframework.mvc.message.Message;
import org.primeframework.mvc.message.MessageStore;
import org.primeframework.mvc.message.scope.MessageScope;
import org.primeframework.mvc.parameter.el.ExpressionEvaluator;
import org.primeframework.mvc.security.DefaultCipherProvider;
import org.primeframework.mvc.security.saved.SavedHttpRequest;
import org.primeframework.mvc.servlet.HTTPMethod;
import org.testng.annotations.Test;
import static org.easymock.EasyMock.createStrictMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
/**
* This class tests the Saved Request result.
*
* @author Brian Pontarelli
*/
public class ReexecuteSavedRequestResultTest extends PrimeBaseTest {
@Test
public void noSavedRequest() throws IOException, ServletException, NoSuchAlgorithmException {
ExpressionEvaluator ee = createStrictMock(ExpressionEvaluator.class);
replay(ee);
HttpServletRequest request = createStrictMock(HttpServletRequest.class);
expect(request.getCookies()).andReturn(null);
expect(request.getContextPath()).andReturn("");
expect(request.getRequestURI()).andReturn("/");
replay(request);
HttpServletResponse response = createStrictMock(HttpServletResponse.class);
response.sendRedirect("/");
response.setStatus(301);
replay(response);
ActionInvocationStore store = createStrictMock(ActionInvocationStore.class);
expect(store.getCurrent()).andReturn(new ActionInvocation(null, null, "/foo", "", null));
replay(store);
List<Message> messages = new ArrayList<>();
MessageStore messageStore = createStrictMock(MessageStore.class);
expect(messageStore.get(MessageScope.REQUEST)).andReturn(messages);
messageStore.clear(MessageScope.REQUEST);
messageStore.addAll(MessageScope.FLASH, messages);
replay(messageStore);
ReexecuteSavedRequest redirect = new ReexecuteSavedRequestImpl("/", "success", true, false);
ReexecuteSavedRequestResult result = new ReexecuteSavedRequestResult(messageStore, ee, response, request, store, new DefaultCipherProvider(configuration), configuration, objectMapper);
result.execute(redirect);
verify(response, request, ee, store, messageStore);
}
@Test
public void savedRequest() throws IOException, ServletException, NoSuchAlgorithmException {
ExpressionEvaluator ee = createStrictMock(ExpressionEvaluator.class);
replay(ee);
SavedHttpRequest savedRequest = new SavedHttpRequest(HTTPMethod.GET, "/secure?test=value1&test2=value2", null);
HttpSession session = createStrictMock(HttpSession.class);
session.setAttribute(SavedHttpRequest.LOGGED_IN_SESSION_KEY, savedRequest);
replay(session);
HttpServletRequest request = createStrictMock(HttpServletRequest.class);
DefaultCipherProvider cipherProvider = new DefaultCipherProvider(configuration);
Cookie cookie = SavedRequestTools.toCookie(savedRequest, objectMapper, configuration, cipherProvider);
expect(request.getCookies()).andReturn(new Cookie[]{cookie});
expect(request.getSession(true)).andReturn(session);
expect(request.getContextPath()).andReturn("");
expect(request.getRequestURI()).andReturn("/");
replay(request);
HttpServletResponse response = createStrictMock(HttpServletResponse.class);
response.addCookie(cookie);
response.sendRedirect("/secure?test=value1&test2=value2");
response.setStatus(301);
replay(response);
ActionInvocationStore store = createStrictMock(ActionInvocationStore.class);
replay(store);
List<Message> messages = new ArrayList<>();
MessageStore messageStore = createStrictMock(MessageStore.class);
expect(messageStore.get(MessageScope.REQUEST)).andReturn(messages);
messageStore.clear(MessageScope.REQUEST);
messageStore.addAll(MessageScope.FLASH, messages);
replay(messageStore);
ReexecuteSavedRequest redirect = new ReexecuteSavedRequestImpl("/", "success", true, false);
ReexecuteSavedRequestResult result = new ReexecuteSavedRequestResult(messageStore, ee, response, request, store, cipherProvider, configuration, objectMapper);
result.execute(redirect);
verify(response, request, ee, store, messageStore, session);
}
}