001    // Copyright 2006 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.expect;
018    
019    import org.apache.tapestry.BaseComponentTestCase;
020    import org.apache.tapestry.IRequestCycle;
021    import org.apache.tapestry.services.ServiceConstants;
022    import org.testng.annotations.Test;
023    
024    import javax.portlet.PortletMode;
025    import javax.portlet.PortletRequest;
026    import javax.portlet.WindowState;
027    
028    /**
029     * Test for {@link org.apache.tapestry.portlet.RenderService}.
030     * 
031     * @author Howard M. Lewis Ship
032     * @since 4.0
033     */
034    @Test
035    public class TestRenderService extends BaseComponentTestCase
036    {
037        public void testGetLinkUnsupported()
038        {
039            RenderService rs = new RenderService();
040    
041            try
042            {
043                rs.getLink(false, null);
044                unreachable();
045            }
046            catch (UnsupportedOperationException ex)
047            {
048                // Hm. Not actually the best message!
049                assertEquals("Method getLink() is not supported for portlet requests.", ex.getMessage());
050            }
051        }
052    
053        public void testNormal() throws Exception
054        {
055            IRequestCycle cycle = newCycle();
056            PortletRequest request = newMock(PortletRequest.class);
057    
058            PortletRenderer renderer = newMock(PortletRenderer.class);
059            
060            trainGetParameter(cycle, PortletConstants.PORTLET_MODE, "view");
061            trainGetParameter(cycle, PortletConstants.WINDOW_STATE, "normal");
062    
063            trainGetPortletMode(request, PortletMode.VIEW);
064            trainGetWindowState(request, WindowState.NORMAL);
065    
066            trainGetParameter(cycle, ServiceConstants.PAGE, "Fred");
067    
068            renderer.renderPage(cycle, "Fred");
069    
070            replay();
071    
072            RenderService rs = new RenderService();
073            rs.setPortletRenderer(renderer);
074            rs.setRequest(request);
075    
076            rs.service(cycle);
077    
078            verify();
079        }
080    
081        public void testPortletModeChanged() throws Exception
082        {
083            IRequestCycle cycle = newCycle();
084            PortletRequest request = newMock(PortletRequest.class);
085    
086            PortletRenderer renderer = newMock(PortletRenderer.class);
087            
088            trainGetParameter(cycle, PortletConstants.PORTLET_MODE, "view");
089            trainGetParameter(cycle, PortletConstants.WINDOW_STATE, "normal");
090    
091            trainGetPortletMode(request, PortletMode.EDIT);
092            
093            PortletPageResolver resolver = newResolver(cycle, "Barney");
094            
095            renderer.renderPage(cycle, "Barney");
096            
097            replay();
098    
099            RenderService rs = new RenderService();
100            rs.setPortletRenderer(renderer);
101            rs.setRequest(request);
102            rs.setPageResolver(resolver);
103    
104            rs.service(cycle);
105    
106            verify();
107        }
108    
109        public void testWindowStateChanged() throws Exception
110        {
111            IRequestCycle cycle = newCycle();
112            PortletRequest request = newMock(PortletRequest.class);
113    
114            PortletRenderer renderer = newMock(PortletRenderer.class);
115            
116            trainGetParameter(cycle, PortletConstants.PORTLET_MODE, "view");
117            trainGetParameter(cycle, PortletConstants.WINDOW_STATE, "normal");
118    
119            trainGetPortletMode(request, PortletMode.VIEW);
120            trainGetWindowState(request, WindowState.MAXIMIZED);
121            
122            PortletPageResolver resolver = newResolver(cycle, "Wilma");
123            
124            renderer.renderPage(cycle, "Wilma");
125            
126            replay();
127    
128            RenderService rs = new RenderService();
129            rs.setPortletRenderer(renderer);
130            rs.setRequest(request);
131            rs.setPageResolver(resolver);
132    
133            rs.service(cycle);
134    
135            verify();
136        }
137    
138        private PortletPageResolver newResolver(IRequestCycle cycle, String pageName)
139        {
140            PortletPageResolver resolver = newMock(PortletPageResolver.class);
141            
142            expect(resolver.getPageNameForRequest(cycle)).andReturn(pageName);
143            
144            return resolver;
145        }
146    
147        private void trainGetWindowState(PortletRequest request, WindowState state)
148        {
149            expect(request.getWindowState()).andReturn(state);
150        }
151    
152        private void trainGetPortletMode(PortletRequest request, PortletMode mode)
153        {
154            expect(request.getPortletMode()).andReturn(mode);
155        }
156    }