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
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 }