1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 }