View Javadoc

1   /*
2    * $Id: PortletResultTest.java 670193 2008-06-21 13:01:53Z hermanns $
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  import com.opensymphony.xwork2.ActionProxy;
48  import com.opensymphony.xwork2.mock.MockActionProxy;
49  import com.opensymphony.xwork2.mock.MockActionInvocation;
50  
51  /***
52   * PortletResultTest. Insert description.
53   *
54   */
55  public class PortletResultTest extends MockObjectTestCase implements PortletActionConstants {
56  
57      Mock mockInvocation = null;
58      Mock mockConfig = null;
59      Mock mockCtx = null;
60  
61      public void setUp() throws Exception {
62          super.setUp();
63          mockInvocation = mock(ActionInvocation.class);
64          mockCtx = mock(PortletContext.class);
65  
66          Map paramMap = new HashMap();
67          Map sessionMap = new HashMap();
68  
69          Map context = new HashMap();
70          context.put(ActionContext.SESSION, sessionMap);
71          context.put(ActionContext.PARAMETERS, paramMap);
72          context.put(StrutsStatics.STRUTS_PORTLET_CONTEXT, mockCtx.proxy());
73  
74          ActionContext.setContext(new ActionContext(context));
75  
76          mockInvocation.stubs().method("getInvocationContext").will(returnValue(ActionContext.getContext()));
77  
78      }
79  
80      public void testDoExecute_render() {
81          Mock mockRequest = mock(RenderRequest.class);
82          Mock mockResponse = mock(RenderResponse.class);
83          Mock mockRd = mock(PortletRequestDispatcher.class);
84  
85          RenderRequest req = (RenderRequest)mockRequest.proxy();
86          RenderResponse res = (RenderResponse)mockResponse.proxy();
87          PortletRequestDispatcher rd = (PortletRequestDispatcher)mockRd.proxy();
88          PortletContext ctx = (PortletContext)mockCtx.proxy();
89          ActionInvocation inv = (ActionInvocation)mockInvocation.proxy();
90  
91          Constraint[] params = new Constraint[]{same(req), same(res)};
92          mockRd.expects(once()).method("include").with(params);
93          mockCtx.expects(once()).method("getRequestDispatcher").with(eq("/WEB-INF/pages/testPage.jsp")).will(returnValue(rd));
94          mockResponse.expects(once()).method("setContentType").with(eq("text/html"));
95  
96          mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
97  
98          ActionContext ctxMap = ActionContext.getContext();
99          ctxMap.put(PortletActionConstants.RESPONSE, res);
100         ctxMap.put(PortletActionConstants.REQUEST, req);
101         ctxMap.put(StrutsStatics.SERVLET_CONTEXT, ctx);
102         ctxMap.put(PortletActionConstants.PHASE, PortletActionConstants.RENDER_PHASE);
103 
104         PortletResult result = new PortletResult();
105         try {
106             result.doExecute("/WEB-INF/pages/testPage.jsp", inv);
107         }
108         catch(Exception e) {
109             e.printStackTrace();
110             fail("Error occured!");
111         }
112 
113     }
114 
115     public void testDoExecute_event_locationIsAction() {
116 
117         Mock mockRequest = mock(ActionRequest.class);
118         Mock mockResponse = mock(ActionResponse.class);
119 
120         Constraint[] params = new Constraint[]{eq(PortletActionConstants.ACTION_PARAM), eq("testView")};
121         mockResponse.expects(once()).method("setRenderParameter").with(params);
122         params = new Constraint[]{eq(PortletActionConstants.MODE_PARAM), eq(PortletMode.VIEW.toString())};
123         mockResponse.expects(once()).method("setRenderParameter").with(params);
124         mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
125         ActionContext ctx = ActionContext.getContext();
126 
127         ctx.put(PortletActionConstants.REQUEST, mockRequest.proxy());
128         ctx.put(PortletActionConstants.RESPONSE, mockResponse.proxy());
129         ctx.put(PortletActionConstants.PHASE, PortletActionConstants.EVENT_PHASE);
130 
131         PortletResult result = new PortletResult();
132         try {
133             result.doExecute("testView.action", (ActionInvocation)mockInvocation.proxy());
134         }
135         catch(Exception e) {
136             e.printStackTrace();
137             fail("Error occured!");
138         }
139 
140     }
141 
142     public void testDoExecute_event_locationIsJsp() {
143         Mock mockRequest = mock(ActionRequest.class);
144         Mock mockResponse = mock(ActionResponse.class);
145         Mock mockProxy = mock(ActionProxy.class);
146 
147         Constraint[] params = new Constraint[]{eq(PortletActionConstants.ACTION_PARAM), eq("renderDirect")};
148         mockResponse.expects(once()).method("setRenderParameter").with(params);
149         params = new Constraint[]{eq(PortletActionConstants.MODE_PARAM), eq(PortletMode.VIEW.toString())};
150         mockResponse.expects(once()).method("setRenderParameter").with(params);
151         mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
152         mockProxy.stubs().method("getNamespace").will(returnValue(""));
153 
154         mockInvocation.stubs().method("getProxy").will(returnValue(mockProxy.proxy()));
155 
156         ActionContext ctx = ActionContext.getContext();
157 
158         Map session = new HashMap();
159         
160         ctx.put(PortletActionConstants.REQUEST, mockRequest.proxy());
161         ctx.put(PortletActionConstants.RESPONSE, mockResponse.proxy());
162         ctx.put(PortletActionConstants.PHASE, PortletActionConstants.EVENT_PHASE);
163         ctx.put(ActionContext.SESSION, session);
164 
165         PortletResult result = new PortletResult();
166         try {
167             result.doExecute("/WEB-INF/pages/testJsp.jsp", (ActionInvocation)mockInvocation.proxy());
168         }
169         catch(Exception e) {
170             e.printStackTrace();
171             fail("Error occured!");
172         }
173         assertEquals("/WEB-INF/pages/testJsp.jsp", session.get(RENDER_DIRECT_LOCATION));
174     }
175 
176     public void testDoExecute_event_locationHasQueryParams() {
177         Mock mockRequest = mock(ActionRequest.class);
178         Mock mockResponse = mock(ActionResponse.class);
179 
180         Constraint[] params = new Constraint[]{eq(PortletActionConstants.ACTION_PARAM), eq("testView")};
181         mockResponse.expects(once()).method("setRenderParameter").with(params);
182         params = new Constraint[]{eq("testParam1"), eq("testValue1")};
183         mockResponse.expects(once()).method("setRenderParameter").with(params);
184         params = new Constraint[]{eq("testParam2"), eq("testValue2")};
185         mockResponse.expects(once()).method("setRenderParameter").with(params);
186         params = new Constraint[]{eq(PortletActionConstants.MODE_PARAM), eq(PortletMode.VIEW.toString())};
187         mockResponse.expects(once()).method("setRenderParameter").with(params);
188         mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
189 
190         ActionContext ctx = ActionContext.getContext();
191 
192         ctx.put(PortletActionConstants.REQUEST, mockRequest.proxy());
193         ctx.put(PortletActionConstants.RESPONSE, mockResponse.proxy());
194         ctx.put(PortletActionConstants.PHASE, PortletActionConstants.EVENT_PHASE);
195 
196         PortletResult result = new PortletResult();
197         try {
198             result.doExecute("testView.action?testParam1=testValue1&testParam2=testValue2", (ActionInvocation)mockInvocation.proxy());
199         }
200         catch(Exception e) {
201             e.printStackTrace();
202             fail("Error occured!");
203         }
204     }
205 
206     public void testTitleAndContentType() throws Exception {
207         Mock mockRequest = mock(RenderRequest.class);
208         Mock mockResponse = mock(RenderResponse.class);
209         Mock mockRd = mock(PortletRequestDispatcher.class);
210 
211         RenderRequest req = (RenderRequest)mockRequest.proxy();
212         RenderResponse res = (RenderResponse)mockResponse.proxy();
213         PortletRequestDispatcher rd = (PortletRequestDispatcher)mockRd.proxy();
214         PortletContext ctx = (PortletContext)mockCtx.proxy();
215 
216         Constraint[] params = new Constraint[]{same(req), same(res)};
217         mockRd.expects(once()).method("include").with(params);
218         mockCtx.expects(once()).method("getRequestDispatcher").with(eq("/WEB-INF/pages/testPage.jsp")).will(returnValue(rd));
219 
220         mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
221 
222         ActionContext ctxMap = ActionContext.getContext();
223         ctxMap.put(PortletActionConstants.RESPONSE, res);
224         ctxMap.put(PortletActionConstants.REQUEST, req);
225         ctxMap.put(StrutsStatics.SERVLET_CONTEXT, ctx);
226         ctxMap.put(PortletActionConstants.PHASE, PortletActionConstants.RENDER_PHASE);
227 
228         mockResponse.expects(atLeastOnce()).method("setTitle").with(eq("testTitle"));
229         mockResponse.expects(atLeastOnce()).method("setContentType").with(eq("testContentType"));
230 
231         PortletResult result = new PortletResult();
232         result.setTitle("testTitle");
233         result.setContentType("testContentType");
234         result.doExecute("/WEB-INF/pages/testPage.jsp", (ActionInvocation)mockInvocation.proxy());
235     }
236 
237     public void tearDown() throws Exception {
238         super.tearDown();
239         ActionContext.setContext(null);
240     }
241 
242     public static void main(String[] args) {
243         TestRunner.run(PortletResultTest.class);
244     }
245 
246 }