(no commit message)
[utils] / wicket / components / src / test / java / org / wamblee / wicket / page / 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.page;
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.markup.html.WebPage;
29 import org.apache.wicket.model.IModel;
30 import org.apache.wicket.protocol.http.WebResponse;
31 import org.apache.wicket.util.tester.WicketTester;
32 import org.junit.After;
33 import org.junit.Before;
34 import org.junit.Test;
35
36 public class WebApplicationBasePageTest {
37     private WicketTester wicket;
38
39     @Before
40     public void setUp() {
41         wicket = new WicketTester();
42     }
43
44     @After
45     public void tearDown() {
46         wicket.destroy();
47     }
48
49     private void checkBehaviorsInitialized(WebApplicationBasePage aPage)
50         throws Exception {
51         Field behaviorsField = WebApplicationBasePage.class
52             .getDeclaredField("behaviors");
53         behaviorsField.setAccessible(true);
54         CompositePageBehavior behaviors = (CompositePageBehavior) behaviorsField
55             .get(aPage);
56         assertNotNull(behaviors);
57     }
58
59     @Test
60     public void testRenderBasePage() throws Exception {
61         WebApplicationBasePage page = new WebApplicationBasePage();
62         wicket.startPage(page);
63         wicket.assertRenderedPage(WebApplicationBasePage.class);
64         checkBehaviorsInitialized(page);
65     }
66
67     @Test
68     public void testRenderBasePageWithModel() throws Exception {
69         WebApplicationBasePage page = new WebApplicationBasePage(
70             mock(IModel.class));
71         wicket.startPage(page);
72         wicket.assertRenderedPage(WebApplicationBasePage.class);
73         checkBehaviorsInitialized(page);
74     }
75
76     @Test
77     public void testRenderBasePageWithPageMap() throws Exception {
78         WebApplicationBasePage page = new WebApplicationBasePage(
79             mock(IPageMap.class));
80         wicket.startPage(page);
81         wicket.assertRenderedPage(WebApplicationBasePage.class);
82         checkBehaviorsInitialized(page);
83     }
84
85     @Test
86     public void testRenderBasePageWithPageMapAndModel() throws Exception {
87         WebApplicationBasePage page = new WebApplicationBasePage(
88             mock(IPageMap.class), mock(IModel.class));
89         wicket.startPage(page);
90         wicket.assertRenderedPage(WebApplicationBasePage.class);
91         checkBehaviorsInitialized(page);
92     }
93
94     @Test
95     public void testRenderBasePageWithPageParameters() throws Exception {
96         WebApplicationBasePage page = new WebApplicationBasePage(
97             new PageParameters());
98         wicket.startPage(page);
99         wicket.assertRenderedPage(WebApplicationBasePage.class);
100         checkBehaviorsInitialized(page);
101     }
102
103     @Test
104     public void testRenderBasePageWithPageMapAndPageParameters()
105         throws Exception {
106         WebApplicationBasePage page = new WebApplicationBasePage(
107             mock(IPageMap.class), new PageParameters());
108         wicket.startPage(page);
109         wicket.assertRenderedPage(WebApplicationBasePage.class);
110         checkBehaviorsInitialized(page);
111     }
112
113     public static final class TestPage extends WebApplicationBasePage {
114
115         private WebResponse response;
116
117         public TestPage(WebResponse aResponse) {
118             response = aResponse;
119         }
120
121         public void callAfterRender() {
122             onAfterRender();
123         }
124
125         public void callSetHeaders() {
126             setHeaders(response);
127         }
128
129         public void callBeforeRender() {
130             onBeforeRender();
131         }
132
133         public void callOnDetach() {
134             onDetach();
135         }
136     }
137
138     @Test
139     public void testAddBehavior() throws Exception {
140         final WebResponse response = mock(WebResponse.class);
141         TestPage page = new TestPage(response);
142         PageBehavior behavior = mock(PageBehavior.class);
143         page.addBehavior(behavior);
144
145         reset(behavior);
146         page.callBeforeRender();
147         verify(behavior).onBeforeRender(same(page));
148         verifyNoMoreInteractions(behavior);
149
150         reset(behavior);
151         page.callAfterRender();
152         verify(behavior).onAfterRender(same(page));
153         verifyNoMoreInteractions(behavior);
154
155         reset(behavior);
156         page.callSetHeaders();
157         verify(behavior).setHeaders(same(page), same(response));
158         verifyNoMoreInteractions(behavior);
159
160         reset(behavior);
161         page.callOnDetach();
162         verify(behavior).onDetach(same(page));
163         verifyNoMoreInteractions(behavior);
164     }
165
166     @Test
167     public void testSmokeExpirePageImmediatelyBehavior() throws Exception {
168         WebApplicationBasePage page = new WebApplicationBasePage(
169             mock(IPageMap.class), new PageParameters());
170         page.addBehavior(new ExpirePageImmediatelyBehavior());
171         wicket.startPage(page);
172         wicket.assertRenderedPage(WebApplicationBasePage.class);
173     }
174
175     @Test
176     public void testSmokeExpireBehavior() throws Exception {
177         WebApplicationBasePage page = new WebApplicationBasePage(
178             mock(IPageMap.class), new PageParameters());
179         page.addBehavior(new ExpireBehavior() {
180             @Override
181             protected boolean isExpired(WebPage aPage) {
182                 return true;
183             }
184         });
185         wicket.startPage(page);
186         wicket.assertRenderedPage(WebApplicationBasePage.class);
187     }
188
189     @Test
190     public void testSmokeBehaviorDisableCaching() throws Exception {
191         WebApplicationBasePage page = new WebApplicationBasePage(
192             mock(IPageMap.class), new PageParameters());
193         page.addBehavior(new DisableCachingBehavior());
194         wicket.startPage(page);
195         wicket.assertRenderedPage(WebApplicationBasePage.class);
196     }
197
198     @Test
199     public void testSmokeBehaviorFlushEntityManager() throws Exception {
200         WebApplicationBasePage page = new WebApplicationBasePage(
201             mock(IPageMap.class), new PageParameters());
202         EntityManager entityManager = mock(EntityManager.class);
203         when(entityManager.isOpen()).thenReturn(true);
204         PageBehavior behavior = new FlushEntityManagerBehavior(entityManager);
205         page.addBehavior(behavior);
206         wicket.startPage(page);
207         wicket.assertRenderedPage(WebApplicationBasePage.class);
208         verify(entityManager).flush();
209     }
210 }