1   /*
2    * Created on Jul 29, 2004
3    *
4    */
5   package org.marketchangers.prayer.portlet;
6   
7   import java.io.IOException;
8   import java.text.ParseException;
9   import java.text.SimpleDateFormat;
10  import java.util.Collections;
11  import java.util.List;
12  
13  import javax.portlet.ActionRequest;
14  import javax.portlet.ActionResponse;
15  import javax.portlet.Portlet;
16  import javax.portlet.PortletConfig;
17  import javax.portlet.PortletContext;
18  import javax.portlet.PortletException;
19  import javax.portlet.PortletPreferences;
20  import javax.portlet.PortletRequestDispatcher;
21  import javax.portlet.RenderRequest;
22  import javax.portlet.RenderResponse;
23  
24  import junit.framework.TestCase;
25  
26  import org.marketchangers.ServiceLocator;
27  import org.marketchangers.prayer.PrayerCategory;
28  import org.marketchangers.prayer.PrayerRequest;
29  import org.marketchangers.prayer.PrayerRequestManager;
30  
31  import com.mockobjects.dynamic.C;
32  import com.mockobjects.dynamic.Mock;
33  ;
34  
35  /***
36   * @author: <a href="mailto:jniu@wc-group.com">Jianshuo Niu</a>
37   * @author: <a href="mailto:ypak@wc-group.com">Yong Pak</a>
38   *
39   */
40  public class SubmitRequestPortletTest extends TestCase {
41  	private Portlet portlet;
42  
43  	private Mock actionRequest;
44  	private Mock actionResponse;
45  	private Mock config;
46  	private Mock context;
47  	private Mock dispatcher;
48  	private Mock prayerRequestManager;
49  	private Mock preferences;
50  	private Mock renderRequest;
51  	private Mock renderResponse;
52  	private Mock serviceLocator;
53  
54  	// --------------------------------------------- SetUp and TearDown Methods
55  	public void setUp() {
56  		portlet = new SubmitRequestPortlet();
57  
58  		actionRequest = new Mock(ActionRequest.class);
59  		actionResponse = new Mock(ActionResponse.class);
60  		config = new Mock(PortletConfig.class);
61  		context = new Mock(PortletContext.class);
62  		dispatcher = new Mock(PortletRequestDispatcher.class);
63  		prayerRequestManager = new Mock(PrayerRequestManager.class);
64  		preferences = new Mock(PortletPreferences.class);
65  		renderRequest = new Mock(RenderRequest.class);
66  		renderResponse = new Mock(RenderResponse.class);
67  		serviceLocator = new Mock(ServiceLocator.class);
68  	}
69  
70  	// TODO: DO TEAR DOWN
71  	public void dtearDown() {
72  		actionRequest.verify();
73  		actionResponse.verify();
74  		config.verify();
75  		context.verify();
76  		dispatcher.verify();
77  		prayerRequestManager.verify();
78  		preferences.verify();
79  		renderRequest.verify();
80  		renderResponse.verify();
81  		serviceLocator.verify();
82  	}
83  
84  	// ----------------------------------------------------------- Test Methods
85  	
86  	public void testNothing() {
87  		
88  	}
89  	
90  	// TODO: do test
91  	public void doNotTestRender() throws Exception {
92  		context.expectAndReturn(
93  			"getRequestDispatcher",
94  			"/submitrequest.jsp",
95  			(PortletRequestDispatcher)dispatcher.proxy());
96  
97  		dispatcher.expect(
98  			"include",
99  			C.args(
100 				C.eq((RenderRequest)renderRequest.proxy()),
101 				C.eq((RenderResponse)renderResponse.proxy())));
102 
103 		renderRequest.expectAndReturn("getRemoteUser","THELMA MAE");
104 		
105 		expectLooksUpPrayerRequestManager();
106 		List categoryList = Collections.EMPTY_LIST;
107 		
108 		prayerRequestManager.expectAndReturn("getCategoriesForRequestor","THELMA MAE",categoryList);
109 		renderRequest.expect("setAttribute",C.args(C.eq("categories"),C.eq(categoryList)));
110 
111 		portlet.init((PortletConfig)config.proxy());
112 
113 		portlet.render(
114 			(RenderRequest)renderRequest.proxy(),
115 			(RenderResponse)renderResponse.proxy());
116 	}
117 
118 	// TODO: do test
119 	public void doNotTestProcessActionWithExistingCategory()
120 		throws PortletException, IOException, ParseException {
121 
122 		setUpActionRequest(
123 			"03-03-2003",
124 			"04-04-2004",
125 			"TEST CATEGORY",
126 			"",
127 			"TEST BACKGROUND",
128 			"TEST CONTENT",
129 			"TEST SUBJECT");
130 
131 		actionRequest.expectAndReturn("getRemoteUser", "JOE BOB");
132 		actionResponse.matchAndReturn("setRenderParameter",C.args(C.eq("DateFormat"),C.eq("true")),"this is a void method");
133 		//actionResponse.expect("setRenderParameter",C.args(C.ANY_ARGS,C.ANY_ARGS));
134 		expectLooksUpPrayerRequestManager();
135 
136 		PrayerCategory prayerCategory = new PrayerCategory();
137 		prayerCategory.setName("TEST CATEGORY");
138 
139 		prayerRequestManager.expectAndReturn(
140 			"getPrayerCategory",
141 			"TEST CATEGORY",
142 			prayerCategory);
143 
144 		PrayerRequest request = new PrayerRequest();
145 		request.setStartDate(
146 			new SimpleDateFormat("MM-dd-yyyy").parse("03-03-2003"));
147 		request.setEndDate(
148 			new SimpleDateFormat("MM-dd-yyyy").parse("04-04-2004"));
149 		request.setCategory(prayerCategory);
150 		request.setContent("TEST CONTENT");
151 		request.setBackground("TEST BACKGROUND");
152 		request.setSubject("TEST SUBJECT");
153 		request.setRequestorUserId("JOE BOB");
154 		request.setStatus(PrayerRequest.OPEN);
155 		
156 		prayerRequestManager.expectAndReturn(
157 			"submitPrayerRequest",
158 			request,
159 			true);
160 			
161 		portlet.init((PortletConfig)config.proxy());
162 
163 		portlet.processAction(
164 			(ActionRequest)actionRequest.proxy(),
165 			(ActionResponse)actionResponse.proxy());
166 	}
167 
168 	// TODO: DO TEST
169 	public void doNotTestProcessActionWithNewCategory() throws Exception {
170 		setUpActionRequest(
171 			"03-03-2003",
172 			"04-04-2004",
173 			"add a new category...",
174 			"TEST NEW CATEGORY",
175 			"TEST BACKGROUND",
176 			"TEST CONTENT",
177 			"TEST SUBJECT");
178 
179 		actionRequest.expectAndReturn("getRemoteUser", "JOE BOB");
180 
181 		expectLooksUpPrayerRequestManager();
182 
183 		PrayerCategory prayerCategory = new PrayerCategory();
184 		prayerCategory.setName("TEST NEW CATEGORY");
185 
186 		prayerRequestManager.expectAndReturn(
187 			"createPrayerCategory",
188 			prayerCategory,
189 			true);
190 
191 		PrayerRequest request = new PrayerRequest();
192 		request.setStartDate(
193 			new SimpleDateFormat("MM-dd-yyyy").parse("03-03-2003"));
194 		request.setEndDate(
195 			new SimpleDateFormat("MM-dd-yyyy").parse("04-04-2004"));
196 		request.setCategory(prayerCategory);
197 		request.setContent("TEST CONTENT");
198 		request.setBackground("TEST BACKGROUND");
199 		request.setSubject("TEST SUBJECT");
200 		request.setRequestorUserId("JOE BOB");
201 		request.setStatus(PrayerRequest.OPEN);
202 
203 		prayerRequestManager.expectAndReturn(
204 			"submitPrayerRequest",
205 			request,
206 			true);
207 		actionResponse.matchAndReturn("setRenderParameter",C.args(C.eq("DateFormat"),C.eq("true")),"this is a void method");
208 		portlet.init((PortletConfig)config.proxy());
209 
210 		portlet.processAction(
211 			(ActionRequest)actionRequest.proxy(),
212 			(ActionResponse)actionResponse.proxy());
213 	}
214 
215 	// -------------------------------------------------------- Private Methods
216 	private void expectLooksUpPrayerRequestManager() {
217 		config.expectAndReturn(
218 			"getPortletContext",
219 			(PortletContext)context.proxy());
220 
221 		context.expectAndReturn(
222 			"getAttribute",
223 			ServiceLocator.KEY,
224 			(ServiceLocator)serviceLocator.proxy());
225 
226 		serviceLocator.expectAndReturn(
227 			"get",
228 			PrayerRequestManager.class,
229 			(PrayerRequestManager)prayerRequestManager.proxy());
230 	}
231 
232 	private void setUpActionRequest(
233 		String startDate,
234 		String endDate,
235 		String category,
236 		String newCategory,
237 		String background,
238 		String content,
239 		String subject) {
240 
241 		actionRequest.expectAndReturn("getParameter", "startdate", startDate);
242 		actionRequest.expectAndReturn("getParameter", "enddate", endDate);
243 		actionRequest.expectAndReturn("getParameter", "category", category);
244 		actionRequest.expectAndReturn(
245 			"getParameter",
246 			"newcategory",
247 			newCategory);
248 		actionRequest.expectAndReturn("getParameter", "background", background);
249 		actionRequest.expectAndReturn("getParameter", "content", content);
250 		actionRequest.expectAndReturn("getParameter", "subject", subject);
251 	}
252 
253 }