1   package org.marketchangers.prayer.portlet;
2   
3   import java.io.IOException;
4   import java.util.Hashtable;
5   import java.util.Map;
6   
7   import javax.portlet.ActionRequest;
8   import javax.portlet.ActionResponse;
9   import javax.portlet.Portlet;
10  import javax.portlet.PortletConfig;
11  import javax.portlet.PortletContext;
12  import javax.portlet.PortletException;
13  import javax.portlet.PortletPreferences;
14  import javax.portlet.PortletRequestDispatcher;
15  import javax.portlet.RenderRequest;
16  import javax.portlet.RenderResponse;
17  
18  import junit.framework.TestCase;
19  
20  import org.marketchangers.PortalUserManager;
21  import org.marketchangers.ServiceLocator;
22  
23  import com.mockobjects.dynamic.C;
24  import com.mockobjects.dynamic.Mock;
25  
26  /***
27   * @author <a href="mailto:mtodd@wc-group.com">Matthew Todd</a>
28   */
29  public class RoleSelectionPortletTest extends TestCase {
30  	private Portlet portlet;
31  
32  	private Mock actionRequest;
33  	private Mock actionResponse;
34  	private Mock config;
35  	private Mock context;
36  	private Mock dispatcher;
37  	private Mock preferences;
38  	private Mock renderRequest;
39  	private Mock renderResponse;
40  	private Mock serviceLocator;
41  	private Mock userManager;
42  
43  	// --------------------------------------------- SetUp and TearDown Methods
44  	public void setUp() {
45  		portlet = new RoleSelectionPortlet();
46  
47  		actionRequest = new Mock(ActionRequest.class);
48  		actionResponse = new Mock(ActionResponse.class);
49  		config = new Mock(PortletConfig.class);
50  		context = new Mock(PortletContext.class);
51  		dispatcher = new Mock(PortletRequestDispatcher.class);
52  		preferences = new Mock(PortletPreferences.class);
53  		renderRequest = new Mock(RenderRequest.class);
54  		renderResponse = new Mock(RenderResponse.class);
55  		serviceLocator = new Mock(ServiceLocator.class);
56  		userManager = new Mock(PortalUserManager.class);
57  	}
58  
59  	public void tearDown() {
60  		actionRequest.verify();
61  		actionResponse.verify();
62  		config.verify();
63  		context.verify();
64  		dispatcher.verify();
65  		preferences.verify();
66  		renderRequest.verify();
67  		renderResponse.verify();
68  		serviceLocator.verify();
69  		userManager.verify();
70  	}
71  
72  	// ----------------------------------------------------------- Test Methods
73  	public void testDisplaysRolesFromPreferences()
74  		throws PortletException, IOException {
75  
76  		renderRequest.expectAndReturn(
77  			"getPreferences",
78  			(PortletPreferences) preferences.proxy());
79  
80  		preferences.expectAndReturn(
81  			"getValues",
82  			C.args(C.eq("roles"), C.IS_NULL),
83  			new String[] { "foo", "bar" });
84  
85  		renderRequest.expectAndReturn("getRemoteUser", "JOE BOB");
86  
87  		serviceLocator.expectAndReturn(
88  			"get",
89  			PortalUserManager.class,
90  			(PortalUserManager) userManager.proxy());
91  
92  		userManager.expectAndReturn(
93  			"isUserInRole",
94  			C.args(C.eq("JOE BOB"), C.eq("foo")),
95  			true);
96  
97  		userManager.expectAndReturn(
98  			"isUserInRole",
99  			C.args(C.eq("JOE BOB"), C.eq("bar")),
100 			false);
101 
102 		Map roles = new Hashtable();
103 		roles.put("foo", "Remove");
104 		roles.put("bar", "Add");
105 
106 		renderRequest.expect(
107 			"setAttribute",
108 			C.args(C.eq("roleActions"), C.eq(roles)));
109 
110 		config.expectAndReturn(
111 			"getPortletContext",
112 			(PortletContext) context.proxy());
113 
114 		context.expectAndReturn(
115 			"getAttribute",
116 			ServiceLocator.KEY,
117 			(ServiceLocator) serviceLocator.proxy());
118 
119 		context.expectAndReturn(
120 			"getRequestDispatcher",
121 			"/roleSelection.jsp",
122 			(PortletRequestDispatcher) dispatcher.proxy());
123 
124 		dispatcher.expect(
125 			"include",
126 			C.args(
127 				C.eq((RenderRequest) renderRequest.proxy()),
128 				C.eq((RenderResponse) renderResponse.proxy())));
129 
130 		portlet.init((PortletConfig) config.proxy());
131 
132 		portlet.render(
133 			(RenderRequest) renderRequest.proxy(),
134 			(RenderResponse) renderResponse.proxy());
135 	}
136 
137 	public void testAddsRequestRoles() throws PortletException, IOException {
138 
139 		actionRequest.expectAndReturn(
140 			"getPreferences",
141 			(PortletPreferences) preferences.proxy());
142 
143 		preferences.expectAndReturn(
144 			"getValues",
145 			C.args(C.eq("roles"), C.IS_NULL),
146 			new String[] { "foo", "bar", "baz" });
147 
148 		actionRequest.expectAndReturn("getParameter", "foo", "Add");
149 		actionRequest.expectAndReturn("getParameter", "bar", "Remove");
150 		actionRequest.expectAndReturn("getParameter", "baz", null);
151 
152 		config.expectAndReturn(
153 			"getPortletContext",
154 			(PortletContext) context.proxy());
155 
156 		context.expectAndReturn(
157 			"getAttribute",
158 			ServiceLocator.KEY,
159 			(ServiceLocator) serviceLocator.proxy());
160 
161 		serviceLocator.expectAndReturn(
162 			"get",
163 			PortalUserManager.class,
164 			(PortalUserManager) userManager.proxy());
165 
166 		actionRequest.expectAndReturn("getRemoteUser", "JOE BOB");
167 
168 		userManager.expectAndReturn(
169 			"addRole",
170 			C.args(C.eq("JOE BOB"), C.eq("foo")),
171 			true);
172 
173 		userManager.expectAndReturn(
174 			"removeRole",
175 			C.args(C.eq("JOE BOB"), C.eq("bar")),
176 			true);
177 
178 		portlet.init((PortletConfig) config.proxy());
179 
180 		portlet.processAction(
181 			(ActionRequest) actionRequest.proxy(),
182 			(ActionResponse) actionResponse.proxy());
183 	}
184 }