(no commit message)
[utils] / wicket / components / src / test / java / org / wamblee / wicket / behavior / WebApplicationBasePageTest.java
1 /*
2  * Copyright 2005-2010 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.wamblee.wicket.behavior;
17
18 import static junit.framework.Assert.*;
19 import static org.mockito.Matchers.*;
20 import static org.mockito.Mockito.*;
21
22 import java.lang.reflect.Field;
23
24 import javax.persistence.EntityManager;
25
26 import org.apache.wicket.IPageMap;
27 import org.apache.wicket.PageParameters;
28 import org.apache.wicket.model.IModel;
29 import org.apache.wicket.protocol.http.WebResponse;
30 import org.apache.wicket.util.tester.WicketTester;
31 import org.junit.After;
32 import org.junit.Before;
33 import org.junit.Test;
34
35 public class WebApplicationBasePageTest {
36     private WicketTester wicket; 
37     
38     @Before
39     public void setUp() { 
40         wicket = new WicketTester(); 
41     }
42     
43     @After
44     public void tearDown() { 
45         wicket.destroy();
46     }
47     
48     private void checkBehaviorsInitialized(WebApplicationBasePage aPage) throws Exception { 
49         Field behaviorsField = WebApplicationBasePage.class.getDeclaredField("behaviors");
50         behaviorsField.setAccessible(true);
51         CompositePageBehavior behaviors = (CompositePageBehavior)behaviorsField.get(aPage);
52         assertNotNull(behaviors);
53     }
54     
55     @Test
56     public void testRenderBasePage() throws Exception { 
57         WebApplicationBasePage page = new WebApplicationBasePage();
58         wicket.startPage(page);
59         wicket.assertRenderedPage(WebApplicationBasePage.class);
60         checkBehaviorsInitialized(page);
61     }
62     
63     @Test
64     public void testRenderBasePageWithModel() throws Exception { 
65         WebApplicationBasePage page = new WebApplicationBasePage(mock(IModel.class));
66         wicket.startPage(page);
67         wicket.assertRenderedPage(WebApplicationBasePage.class);
68         checkBehaviorsInitialized(page);
69     }
70     
71     @Test
72     public void testRenderBasePageWithPageMap() throws Exception {
73         WebApplicationBasePage page = new WebApplicationBasePage(mock(IPageMap.class));
74         wicket.startPage(page);
75         wicket.assertRenderedPage(WebApplicationBasePage.class);
76         checkBehaviorsInitialized(page);
77     }
78     
79     @Test
80     public void testRenderBasePageWithPageMapAndModel() throws Exception {
81         WebApplicationBasePage page = new WebApplicationBasePage(mock(IPageMap.class), mock(IModel.class));
82         wicket.startPage(page);
83         wicket.assertRenderedPage(WebApplicationBasePage.class);
84         checkBehaviorsInitialized(page);
85     }
86     
87     @Test
88     public void testRenderBasePageWithPageParameters() throws Exception {
89         WebApplicationBasePage page = new WebApplicationBasePage(new PageParameters());
90         wicket.startPage(page);
91         wicket.assertRenderedPage(WebApplicationBasePage.class);
92         checkBehaviorsInitialized(page);
93     }
94     
95     @Test
96     public void testRenderBasePageWithPageMapAndPageParameters() throws Exception {
97         WebApplicationBasePage page = new WebApplicationBasePage(mock(IPageMap.class), new PageParameters());
98         wicket.startPage(page);
99         wicket.assertRenderedPage(WebApplicationBasePage.class);
100         checkBehaviorsInitialized(page);
101     }
102     
103     public static final class TestPage extends WebApplicationBasePage {
104         
105         private WebResponse response; 
106         
107         public TestPage(WebResponse aResponse) { 
108             response = aResponse; 
109         }
110         public void callAfterRender() { 
111             onAfterRender(); 
112         }
113         public void callSetHeaders() { 
114             setHeaders(response);
115         }
116         public void callBeforeRender() { 
117             onBeforeRender(); 
118         }
119     }
120     
121     @Test
122     public void testAddBehavior() throws Exception {
123         final WebResponse response = mock(WebResponse.class);
124         TestPage page = new TestPage(response); 
125         PageBehavior behavior = mock(PageBehavior.class); 
126         page.addBehavior(behavior); 
127
128         reset(behavior);
129         page.callBeforeRender(); 
130         verify(behavior).onBeforeRender(same(page));
131         verifyNoMoreInteractions(behavior); 
132      
133         reset(behavior);
134         page.callAfterRender(); 
135         verify(behavior).onAfterRender(same(page));
136         verifyNoMoreInteractions(behavior); 
137     
138         reset(behavior);
139         page.callSetHeaders(); 
140         verify(behavior).setHeaders(same(page), same(response));
141         verifyNoMoreInteractions(behavior);  
142     }
143     
144     @Test
145     public void testSmokeBehaviorViewOnlyOnce() throws Exception { 
146         WebApplicationBasePage page = new WebApplicationBasePage(mock(IPageMap.class), new PageParameters());
147         page.addBehavior(new ExpirePageImmediatelyBehavior());
148         wicket.startPage(page);
149         wicket.assertRenderedPage(WebApplicationBasePage.class);
150     }
151     
152     @Test
153     public void testSmokeBehaviorDisableCaching() throws Exception { 
154         WebApplicationBasePage page = new WebApplicationBasePage(mock(IPageMap.class), new PageParameters());
155         page.addBehavior(new DisableCachingBehavior());
156         wicket.startPage(page);
157         wicket.assertRenderedPage(WebApplicationBasePage.class);
158     }
159     
160     @Test
161     public void testSmokeBehaviorFlushEntityManager() throws Exception { 
162         WebApplicationBasePage page = new WebApplicationBasePage(mock(IPageMap.class), new PageParameters());
163         EntityManager entityManager = mock(EntityManager.class);
164         PageBehavior behavior = new FlushEntityManagerBehavior(entityManager); 
165         page.addBehavior(behavior);
166         wicket.startPage(page);
167         wicket.assertRenderedPage(WebApplicationBasePage.class);
168         verify(entityManager).flush();
169     }
170 }