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