View Javadoc

1   /*
2    * $Id: PortletResultTest.java 651946 2008-04-27 13:41:38Z apetrelli $
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  package org.apache.struts2.portlet.result;
23  
24  import java.util.HashMap;
25  import java.util.Map;
26  
27  import javax.portlet.ActionRequest;
28  import javax.portlet.ActionResponse;
29  import javax.portlet.PortletConfig;
30  import javax.portlet.PortletContext;
31  import javax.portlet.PortletMode;
32  import javax.portlet.PortletRequestDispatcher;
33  import javax.portlet.RenderRequest;
34  import javax.portlet.RenderResponse;
35  
36  import junit.textui.TestRunner;
37  
38  import org.apache.struts2.StrutsConstants;
39  import org.apache.struts2.StrutsStatics;
40  import org.apache.struts2.portlet.PortletActionConstants;
41  import org.jmock.Mock;
42  import org.jmock.cglib.MockObjectTestCase;
43  import org.jmock.core.Constraint;
44  
45  import com.opensymphony.xwork2.ActionContext;
46  import com.opensymphony.xwork2.ActionInvocation;
47  
48  /***
49   * PortletResultTest. Insert description.
50   *
51   */
52  public class PortletResultTest extends MockObjectTestCase implements PortletActionConstants {
53  
54      Mock mockInvocation = null;
55      Mock mockConfig = null;
56      Mock mockCtx = null;
57  
58      public void setUp() throws Exception {
59          super.setUp();
60          mockInvocation = mock(ActionInvocation.class);
61          mockCtx = mock(PortletContext.class);
62  
63          Map paramMap = new HashMap();
64          Map sessionMap = new HashMap();
65  
66          Map context = new HashMap();
67          context.put(ActionContext.SESSION, sessionMap);
68          context.put(ActionContext.PARAMETERS, paramMap);
69          context.put(StrutsStatics.STRUTS_PORTLET_CONTEXT, mockCtx.proxy());
70  
71          ActionContext.setContext(new ActionContext(context));
72  
73          mockInvocation.stubs().method("getInvocationContext").will(returnValue(ActionContext.getContext()));
74  
75      }
76  
77      public void testDoExecute_render() {
78          Mock mockRequest = mock(RenderRequest.class);
79          Mock mockResponse = mock(RenderResponse.class);
80          Mock mockRd = mock(PortletRequestDispatcher.class);
81  
82          RenderRequest req = (RenderRequest)mockRequest.proxy();
83          RenderResponse res = (RenderResponse)mockResponse.proxy();
84          PortletRequestDispatcher rd = (PortletRequestDispatcher)mockRd.proxy();
85          PortletContext ctx = (PortletContext)mockCtx.proxy();
86          ActionInvocation inv = (ActionInvocation)mockInvocation.proxy();
87  
88          Constraint[] params = new Constraint[]{same(req), same(res)};
89          mockRd.expects(once()).method("include").with(params);
90          mockCtx.expects(once()).method("getRequestDispatcher").with(eq("/WEB-INF/pages/testPage.jsp")).will(returnValue(rd));
91          mockResponse.expects(once()).method("setContentType").with(eq("text/html"));
92  
93          mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
94  
95          ActionContext ctxMap = ActionContext.getContext();
96          ctxMap.put(PortletActionConstants.RESPONSE, res);
97          ctxMap.put(PortletActionConstants.REQUEST, req);
98          ctxMap.put(StrutsStatics.SERVLET_CONTEXT, ctx);
99          ctxMap.put(PortletActionConstants.PHASE, PortletActionConstants.RENDER_PHASE);
100 
101         PortletResult result = new PortletResult();
102         try {
103             result.doExecute("/WEB-INF/pages/testPage.jsp", inv);
104         }
105         catch(Exception e) {
106             e.printStackTrace();
107             fail("Error occured!");
108         }
109 
110     }
111 
112     public void testDoExecute_event_locationIsAction() {
113 
114         Mock mockRequest = mock(ActionRequest.class);
115         Mock mockResponse = mock(ActionResponse.class);
116 
117         Constraint[] params = new Constraint[]{eq(PortletActionConstants.ACTION_PARAM), eq("testView")};
118         mockResponse.expects(once()).method("setRenderParameter").with(params);
119         params = new Constraint[]{eq(PortletActionConstants.MODE_PARAM), eq(PortletMode.VIEW.toString())};
120         mockResponse.expects(once()).method("setRenderParameter").with(params);
121         mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
122         ActionContext ctx = ActionContext.getContext();
123 
124         ctx.put(PortletActionConstants.REQUEST, mockRequest.proxy());
125         ctx.put(PortletActionConstants.RESPONSE, mockResponse.proxy());
126         ctx.put(PortletActionConstants.PHASE, PortletActionConstants.EVENT_PHASE);
127 
128         PortletResult result = new PortletResult();
129         try {
130             result.doExecute("testView.action", (ActionInvocation)mockInvocation.proxy());
131         }
132         catch(Exception e) {
133             e.printStackTrace();
134             fail("Error occured!");
135         }
136 
137     }
138 
139     public void testDoExecute_event_locationIsJsp() {
140         Mock mockRequest = mock(ActionRequest.class);
141         Mock mockResponse = mock(ActionResponse.class);
142 
143         Constraint[] params = new Constraint[]{eq(PortletActionConstants.ACTION_PARAM), eq("renderDirect")};
144         mockResponse.expects(once()).method("setRenderParameter").with(params);
145         params = new Constraint[]{eq(PortletActionConstants.MODE_PARAM), eq(PortletMode.VIEW.toString())};
146         mockResponse.expects(once()).method("setRenderParameter").with(params);
147         mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
148 
149         ActionContext ctx = ActionContext.getContext();
150 
151         Map session = new HashMap();
152         
153         ctx.put(PortletActionConstants.REQUEST, mockRequest.proxy());
154         ctx.put(PortletActionConstants.RESPONSE, mockResponse.proxy());
155         ctx.put(PortletActionConstants.PHASE, PortletActionConstants.EVENT_PHASE);
156         ctx.put(ActionContext.SESSION, session);
157 
158         PortletResult result = new PortletResult();
159         try {
160             result.doExecute("/WEB-INF/pages/testJsp.jsp", (ActionInvocation)mockInvocation.proxy());
161         }
162         catch(Exception e) {
163             e.printStackTrace();
164             fail("Error occured!");
165         }
166         assertEquals("/WEB-INF/pages/testJsp.jsp", session.get(RENDER_DIRECT_LOCATION));
167     }
168 
169     public void testDoExecute_event_locationHasQueryParams() {
170         Mock mockRequest = mock(ActionRequest.class);
171         Mock mockResponse = mock(ActionResponse.class);
172 
173         Constraint[] params = new Constraint[]{eq(PortletActionConstants.ACTION_PARAM), eq("testView")};
174         mockResponse.expects(once()).method("setRenderParameter").with(params);
175         params = new Constraint[]{eq("testParam1"), eq("testValue1")};
176         mockResponse.expects(once()).method("setRenderParameter").with(params);
177         params = new Constraint[]{eq("testParam2"), eq("testValue2")};
178         mockResponse.expects(once()).method("setRenderParameter").with(params);
179         params = new Constraint[]{eq(PortletActionConstants.MODE_PARAM), eq(PortletMode.VIEW.toString())};
180         mockResponse.expects(once()).method("setRenderParameter").with(params);
181         mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
182 
183         ActionContext ctx = ActionContext.getContext();
184 
185         ctx.put(PortletActionConstants.REQUEST, mockRequest.proxy());
186         ctx.put(PortletActionConstants.RESPONSE, mockResponse.proxy());
187         ctx.put(PortletActionConstants.PHASE, PortletActionConstants.EVENT_PHASE);
188 
189         PortletResult result = new PortletResult();
190         try {
191             result.doExecute("testView.action?testParam1=testValue1&testParam2=testValue2", (ActionInvocation)mockInvocation.proxy());
192         }
193         catch(Exception e) {
194             e.printStackTrace();
195             fail("Error occured!");
196         }
197     }
198 
199     public void testTitleAndContentType() throws Exception {
200         Mock mockRequest = mock(RenderRequest.class);
201         Mock mockResponse = mock(RenderResponse.class);
202         Mock mockRd = mock(PortletRequestDispatcher.class);
203 
204         RenderRequest req = (RenderRequest)mockRequest.proxy();
205         RenderResponse res = (RenderResponse)mockResponse.proxy();
206         PortletRequestDispatcher rd = (PortletRequestDispatcher)mockRd.proxy();
207         PortletContext ctx = (PortletContext)mockCtx.proxy();
208 
209         Constraint[] params = new Constraint[]{same(req), same(res)};
210         mockRd.expects(once()).method("include").with(params);
211         mockCtx.expects(once()).method("getRequestDispatcher").with(eq("/WEB-INF/pages/testPage.jsp")).will(returnValue(rd));
212 
213         mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
214 
215         ActionContext ctxMap = ActionContext.getContext();
216         ctxMap.put(PortletActionConstants.RESPONSE, res);
217         ctxMap.put(PortletActionConstants.REQUEST, req);
218         ctxMap.put(StrutsStatics.SERVLET_CONTEXT, ctx);
219         ctxMap.put(PortletActionConstants.PHASE, PortletActionConstants.RENDER_PHASE);
220 
221         mockResponse.expects(atLeastOnce()).method("setTitle").with(eq("testTitle"));
222         mockResponse.expects(atLeastOnce()).method("setContentType").with(eq("testContentType"));
223 
224         PortletResult result = new PortletResult();
225         result.setTitle("testTitle");
226         result.setContentType("testContentType");
227         result.doExecute("/WEB-INF/pages/testPage.jsp", (ActionInvocation)mockInvocation.proxy());
228     }
229 
230     public void tearDown() throws Exception {
231         super.tearDown();
232         ActionContext.setContext(null);
233     }
234 
235     public static void main(String[] args) {
236         TestRunner.run(PortletResultTest.class);
237     }
238 
239 }