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 java.util.HashMap;
021    import java.util.Map;
022    
023    import org.apache.tapestry.BaseComponentTestCase;
024    import org.apache.tapestry.IRequestCycle;
025    import org.apache.tapestry.engine.ILink;
026    import org.apache.tapestry.services.LinkFactory;
027    import org.apache.tapestry.services.ResponseRenderer;
028    import org.testng.annotations.Test;
029    
030    /**
031     * Tests for {@link org.apache.tapestry.portlet.PortletHomeService}.
032     * 
033     * @author Howard M. Lewis Ship
034     * @since 4.0
035     */
036    @Test
037    public class TestPortletHomeService extends BaseComponentTestCase
038    {
039        private ResponseRenderer newResponseRenderer()
040        {
041            return newMock(ResponseRenderer.class);
042        }
043    
044        private PortletRequestGlobals newRequestGlobals(boolean isRender)
045        {
046            PortletRequestGlobals globals = newMock(PortletRequestGlobals.class);
047            checkOrder(globals, false);
048            
049            expect(globals.isRenderRequest()).andReturn(isRender);
050            
051            return globals;
052        }
053    
054        private PortletRenderer newPortletRenderer()
055        {
056            return newMock(PortletRenderer.class);
057        }
058    
059        private PortletPageResolver newResolver(IRequestCycle cycle, String pageName)
060        {
061            PortletPageResolver resolver = newMock(PortletPageResolver.class);
062    
063            expect(resolver.getPageNameForRequest(cycle)).andReturn(pageName);
064            
065            return resolver;
066        }
067    
068        public void testIsRenderRequest() throws Exception
069        {
070            IRequestCycle cycle = newCycle();
071            PortletRequestGlobals globals = newRequestGlobals(true);
072            PortletRenderer renderer = newPortletRenderer();
073            PortletPageResolver resolver = newResolver(cycle, "ZePage");
074    
075            renderer.renderPage(cycle, "ZePage");
076    
077            replay();
078    
079            PortletHomeService phs = new PortletHomeService();
080            phs.setPageResolver(resolver);
081            phs.setPortletRenderer(renderer);
082            phs.setRequestGlobals(globals);
083    
084            phs.service(cycle);
085    
086            verify();
087        }
088    
089        public void testIsActionRequest() throws Exception
090        {
091            IRequestCycle cycle = newCycle();
092            PortletRequestGlobals globals = newRequestGlobals(false);
093            
094            ResponseRenderer renderer = newResponseRenderer();
095            
096            PortletPageResolver resolver = newResolver(cycle, "ZePage");
097            
098            cycle.activate("ZePage");
099            renderer.renderResponse(cycle);
100    
101            replay();
102    
103            PortletHomeService phs = new PortletHomeService();
104            phs.setResponseRenderer(renderer);
105            phs.setRequestGlobals(globals);
106            phs.setPageResolver(resolver);
107    
108            phs.service(cycle);
109    
110            verify();
111        }
112    
113        public void testGetLink()
114        {
115            Map parameters = new HashMap();
116            
117            LinkFactory factory = newMock(LinkFactory.class);
118            ILink link = newMock(ILink.class);
119    
120            PortletHomeService phs = new PortletHomeService();
121            phs.setLinkFactory(factory);
122            
123            expect(factory.constructLink(phs, false, parameters, true)).andReturn(link);
124    
125            replay();
126    
127            assertSame(link, phs.getLink(false, null));
128    
129            verify();
130        }
131    
132        public void testGetLinkWithParameter()
133        {
134            try
135            {
136                new PortletHomeService().getLink(false, "PARAMETER");
137                unreachable();
138            }
139            catch (IllegalArgumentException ex)
140            {
141                assertEquals("The home service does not require a parameter object.", ex.getMessage());
142            }
143        }
144    }