1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.seasar.cubby.plugins;
18
19 import static org.easymock.EasyMock.createMock;
20 import static org.easymock.EasyMock.expect;
21 import static org.easymock.EasyMock.replay;
22 import static org.easymock.EasyMock.verify;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertSame;
25 import static org.junit.Assert.assertTrue;
26
27 import java.lang.reflect.Method;
28 import java.util.LinkedHashMap;
29 import java.util.Map;
30
31 import javax.servlet.http.HttpServletRequest;
32 import javax.servlet.http.HttpServletResponse;
33
34 import org.junit.After;
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.seasar.cubby.CubbyConstants;
38 import org.seasar.cubby.action.ActionContext;
39 import org.seasar.cubby.action.ActionErrors;
40 import org.seasar.cubby.action.ActionResult;
41 import org.seasar.cubby.action.Forward;
42 import org.seasar.cubby.action.Validation;
43 import org.seasar.cubby.plugin.ActionInvocation;
44 import org.seasar.cubby.plugin.PluginRegistry;
45 import org.seasar.cubby.spi.BeanDescProvider;
46 import org.seasar.cubby.spi.beans.impl.DefaultBeanDescProvider;
47 import org.seasar.cubby.validator.DefaultValidationRules;
48 import org.seasar.cubby.validator.ValidationException;
49 import org.seasar.cubby.validator.ValidationRules;
50
51 public class ValidationPluginTest {
52
53 private final PluginRegistry pluginRegistry = PluginRegistry.getInstance();
54
55 @Before
56 public void setupProvider() {
57 final BinderPlugin binderPlugin = new BinderPlugin();
58 binderPlugin.bind(BeanDescProvider.class).toInstance(
59 new DefaultBeanDescProvider());
60 pluginRegistry.register(binderPlugin);
61 }
62
63 @After
64 public void teardownProvider() {
65 pluginRegistry.clear();
66 }
67
68 public ValidationRules rules = new DefaultValidationRules() {
69 };
70
71 @Validation(rules = "rules", errorPage = "index.jsp")
72 public ActionResult dummyActionMethod() {
73 return null;
74 }
75
76 @Test
77 public void invokeActionWithNoError() throws Exception {
78 Map<String, Object[]> params = new LinkedHashMap<String, Object[]>();
79 Method actionMethod = this.getClass().getMethod("dummyActionMethod");
80
81 HttpServletRequest request = createMock(HttpServletRequest.class);
82 expect(request.getAttribute(CubbyConstants.ATTR_PARAMS)).andReturn(
83 params);
84 HttpServletResponse response = createMock(HttpServletResponse.class);
85 ActionErrors actionErrors = createMock(ActionErrors.class);
86 expect(actionErrors.isEmpty()).andStubReturn(true);
87 ActionContext actionContext = createMock(ActionContext.class);
88 expect(actionContext.getFormBean()).andStubReturn(null);
89 expect(actionContext.getActionMethod()).andStubReturn(actionMethod);
90 expect(actionContext.getAction()).andStubReturn(this);
91 expect(actionContext.getActionErrors()).andStubReturn(actionErrors);
92 replay(request, response, actionContext, actionErrors);
93
94 final ValidationPlugin plugin = new ValidationPlugin();
95 final ActionResult actionResult = new Forward("foo");
96 final TestAction testAction = new TestAction() {
97
98 public ActionResult invoke() {
99 return actionResult;
100 }
101 };
102 final ActionInvocation invocation = new MActionInvocation(request,
103 response, actionContext, testAction);
104 ActionResult actual = plugin.invokeAction(invocation);
105
106 assertSame(actionResult, actual);
107
108 verify(request, response, actionContext, actionErrors);
109 }
110
111 @Test
112 public void invokeActionWithValidationException() throws Exception {
113 Map<String, Object[]> params = new LinkedHashMap<String, Object[]>();
114 Method actionMethod = this.getClass().getMethod("dummyActionMethod");
115
116 HttpServletRequest request = createMock(HttpServletRequest.class);
117 expect(request.getAttribute(CubbyConstants.ATTR_PARAMS)).andReturn(
118 params);
119 request.setAttribute(CubbyConstants.ATTR_VALIDATION_FAIL, Boolean.TRUE);
120 HttpServletResponse response = createMock(HttpServletResponse.class);
121 ActionErrors actionErrors = createMock(ActionErrors.class);
122 expect(actionErrors.isEmpty()).andStubReturn(true);
123 ActionContext actionContext = createMock(ActionContext.class);
124 expect(actionContext.getFormBean()).andStubReturn(null);
125 expect(actionContext.getActionMethod()).andStubReturn(actionMethod);
126 expect(actionContext.getAction()).andStubReturn(this);
127 expect(actionContext.getActionErrors()).andStubReturn(actionErrors);
128 replay(request, response, actionContext, actionErrors);
129
130 final ValidationPlugin plugin = new ValidationPlugin();
131 final TestAction testAction = new TestAction() {
132
133 public ActionResult invoke() {
134 throw new ValidationException();
135 }
136 };
137 final ActionInvocation invocation = new MActionInvocation(request,
138 response, actionContext, testAction);
139 ActionResult actual = plugin.invokeAction(invocation);
140
141 assertTrue(actual instanceof Forward);
142 Forward forward = (Forward) actual;
143 assertEquals("index.jsp", forward.getPath("UTF-8"));
144
145 verify(request, response, actionContext, actionErrors);
146 }
147
148 class MActionInvocation implements ActionInvocation {
149
150
151 private final HttpServletRequest request;
152
153
154 private final HttpServletResponse response;
155
156
157 private final ActionContext actionContext;
158
159
160
161
162
163 private final TestAction testAction;
164
165
166
167
168
169
170
171
172
173
174
175 public MActionInvocation(final HttpServletRequest request,
176 final HttpServletResponse response,
177 final ActionContext actionContext, final TestAction testAction) {
178 this.request = request;
179 this.response = response;
180 this.actionContext = actionContext;
181 this.testAction = testAction;
182
183
184
185 }
186
187
188
189
190 public ActionResult proceed() throws Exception {
191 return testAction.invoke();
192 }
193
194
195
196
197 public HttpServletRequest getRequest() {
198 return request;
199 }
200
201
202
203
204 public HttpServletResponse getResponse() {
205 return response;
206 }
207
208
209
210
211 public ActionContext getActionContext() {
212 return actionContext;
213 }
214
215 }
216
217 interface TestAction {
218 ActionResult invoke();
219 }
220 }