001    // Copyright 2005 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry.portlet;
016    
017    import static org.easymock.EasyMock.checkOrder;
018    import static org.easymock.EasyMock.expect;
019    
020    import org.apache.hivemind.Registry;
021    import org.apache.tapestry.BaseComponentTestCase;
022    import org.testng.annotations.Test;
023    
024    import javax.portlet.ActionRequest;
025    import javax.portlet.ActionResponse;
026    import javax.portlet.PortletConfig;
027    import javax.portlet.PortletContext;
028    import javax.portlet.RenderRequest;
029    import javax.portlet.RenderResponse;
030    
031    /**
032     * Tests for {@link org.apache.tapestry.portlet.ApplicationPortlet}.
033     * 
034     * @author Howard M. Lewis Ship
035     * @since 4.0
036     */
037    @Test(sequential = true)
038    public class TestApplicationPortlet extends BaseComponentTestCase
039    {
040        public static class ApplicationPortletFixture extends ApplicationPortlet
041        {
042            private final Registry _constructRegistry;
043    
044            public ApplicationPortletFixture(Registry registry)
045            {
046                _constructRegistry = registry;
047            }
048    
049            protected Registry constructRegistry(PortletConfig config)
050            {
051                return _constructRegistry;
052            }
053        }
054    
055        private PortletApplicationInitializer newInitializer()
056        {
057            return newMock(PortletApplicationInitializer.class);
058        }
059    
060        private ActionRequestServicer newActionRequestServicer()
061        {
062            return newMock(ActionRequestServicer.class);
063        }
064    
065        private RenderRequestServicer newRenderRequestServicer()
066        {
067            return newMock(RenderRequestServicer.class);
068        }
069    
070        private Registry newRegistry(PortletApplicationInitializer initializer,
071                ActionRequestServicer actionRequestServicer, RenderRequestServicer renderRequestServicer)
072        {
073            Registry registry = newMock(Registry.class);
074            checkOrder(registry, false);
075            
076            expect(registry.getService(
077                    "tapestry.portlet.PortletApplicationInitializer",
078                    PortletApplicationInitializer.class)).andReturn(initializer);
079            
080            expect(registry.getService("tapestry.portlet.ActionRequestServicer", ActionRequestServicer.class))
081            .andReturn(actionRequestServicer);
082            
083            expect(registry.getService("tapestry.portlet.RenderRequestServicer", RenderRequestServicer.class))
084            .andReturn(renderRequestServicer);
085            
086            return registry;
087        }
088    
089        private PortletConfig newConfig()
090        {
091            return newMock(PortletConfig.class);
092        }
093    
094        private ActionRequest newActionRequest()
095        {
096            return newMock(ActionRequest.class);
097        }
098    
099        private ActionResponse newActionResponse()
100        {
101            return newMock(ActionResponse.class);
102        }
103    
104        private RenderRequest newRenderRequest()
105        {
106            return newMock(RenderRequest.class);
107        }
108    
109        private RenderResponse newRenderResponse()
110        {
111            return newMock(RenderResponse.class);
112        }
113    
114        public void testParseOptionalDescriptors() throws Exception
115        {
116            PortletConfig config = newMock(PortletConfig.class);
117            PortletContext context = newMock(PortletContext.class);
118    
119            checkOrder(config, false);
120            checkOrder(context, false);
121            
122            expect(config.getPortletName()).andReturn("myportlet").anyTimes();
123            
124            // Called once in ApplicationPortlet code,
125            // then inside PortletWebContextInitializer
126    
127            expect(config.getPortletContext()).andReturn(context).anyTimes();
128            
129            expect(context.getResource("/WEB-INF/myportlet/hivemodule.xml"))
130            .andReturn(getClass().getResource("hivemodule-portlet.xml")).anyTimes();
131            
132            expect(context.getResource("/WEB-INF/hivemodule.xml"))
133            .andReturn(getClass().getResource("hivemodule.xml")).anyTimes();
134            
135            expect(context.getResource("/WEB-INF/myportlet/myportlet.application"))
136            .andReturn(null);
137    
138            expect(context.getResource("/WEB-INF/myportlet.application")).andReturn(null);
139    
140            replay();
141    
142            ApplicationPortlet ap = new ApplicationPortlet();
143    
144            ap.init(config);
145            
146            assertNotNull(ap._registry);
147            assertNotNull(ap._actionRequestServicer);
148            assertNotNull(ap._renderRequestServicer);
149    
150            assertEquals("parsed", ap._registry.expandSymbols("${module-portlet}", null));
151            assertEquals("parsed", ap._registry.expandSymbols("${module-plain}", null));
152            
153            verify();
154        }
155    
156        public void testInitAndDestroy() throws Exception
157        {
158            PortletApplicationInitializer initializer = newInitializer();
159            ActionRequestServicer actionRequestServicer = newActionRequestServicer();
160            RenderRequestServicer renderRequestServicer = newRenderRequestServicer();
161    
162            Registry registry = newRegistry(initializer, actionRequestServicer, renderRequestServicer);
163            PortletConfig config = newConfig();
164    
165            initializer.initialize(config);
166    
167            replay();
168    
169            ApplicationPortletFixture portlet = new ApplicationPortletFixture(registry);
170    
171            portlet.init(config);
172    
173            verify();
174    
175            registry.shutdown();
176    
177            replay();
178    
179            portlet.destroy();
180    
181            verify();
182        }
183    
184        public void testProcessAction() throws Exception
185        {
186            PortletApplicationInitializer initializer = newInitializer();
187            ActionRequestServicer actionRequestServicer = newActionRequestServicer();
188            RenderRequestServicer renderRequestServicer = newRenderRequestServicer();
189            
190            Registry registry = newRegistry(initializer, actionRequestServicer, renderRequestServicer);
191            
192            PortletConfig config = newConfig();
193            
194            initializer.initialize(config);
195    
196            replay();
197    
198            ApplicationPortletFixture portlet = new ApplicationPortletFixture(registry);
199    
200            portlet.init(config);
201    
202            verify();
203    
204            ActionRequest request = newActionRequest();
205            ActionResponse response = newActionResponse();
206    
207            registry.setupThread();
208            
209            actionRequestServicer.service(request, response);
210    
211            registry.cleanupThread();
212    
213            replay();
214    
215            portlet.processAction(request, response);
216    
217            verify();
218        }
219    
220        public void testProcessRender() throws Exception
221        {
222            PortletApplicationInitializer initializer = newInitializer();
223            ActionRequestServicer actionRequestServicer = newActionRequestServicer();
224            RenderRequestServicer renderRequestServicer = newRenderRequestServicer();
225    
226            Registry registry = newRegistry(initializer, actionRequestServicer, renderRequestServicer);
227            
228            PortletConfig config = newConfig();
229    
230            initializer.initialize(config);
231    
232            replay();
233    
234            ApplicationPortletFixture portlet = new ApplicationPortletFixture(registry);
235    
236            portlet.init(config);
237    
238            verify();
239    
240            RenderRequest request = newRenderRequest();
241            RenderResponse response = newRenderResponse();
242    
243            registry.setupThread();
244            
245            renderRequestServicer.service(request, response);
246    
247            registry.cleanupThread();
248    
249            replay();
250    
251            portlet.render(request, response);
252    
253            verify();
254        }
255    }