8d97be9b4b21a11b6403c01cfc4a9ddbf85df542
[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
141     @Test
142     public void testAddBehavior() throws Exception {
143         final WebResponse response = mock(WebResponse.class);
144         TestPage page = new TestPage(response);
145         PageBehavior behavior = mock(PageBehavior.class);
146         page.addBehavior(behavior);
147
148         reset(behavior);
149         page.callBeforeRender();
150         verify(behavior).onBeforeRender(same(page));
151         verifyNoMoreInteractions(behavior);
152
153         reset(behavior);
154         page.callAfterRender();
155         verify(behavior).onAfterRender(same(page));
156         verifyNoMoreInteractions(behavior);
157
158         reset(behavior);
159         page.callSetHeaders();
160         verify(behavior).setHeaders(same(page), same(response));
161         verifyNoMoreInteractions(behavior);
162     }
163
164     @Test
165     public void testSmokeBehaviorViewOnlyOnce() throws Exception {
166         WebApplicationBasePage page = new WebApplicationBasePage(
167             mock(IPageMap.class), new PageParameters());
168         page.addBehavior(new ExpirePageImmediatelyBehavior());
169         wicket.startPage(page);
170         wicket.assertRenderedPage(WebApplicationBasePage.class);
171     }
172
173     @Test
174     public void testSmokeBehaviorDisableCaching() throws Exception {
175         WebApplicationBasePage page = new WebApplicationBasePage(
176             mock(IPageMap.class), new PageParameters());
177         page.addBehavior(new DisableCachingBehavior());
178         wicket.startPage(page);
179         wicket.assertRenderedPage(WebApplicationBasePage.class);
180     }
181
182     @Test
183     public void testSmokeBehaviorFlushEntityManager() throws Exception {
184         WebApplicationBasePage page = new WebApplicationBasePage(
185             mock(IPageMap.class), new PageParameters());
186         EntityManager entityManager = mock(EntityManager.class);
187         when(entityManager.isOpen()).thenReturn(true);
188         PageBehavior behavior = new FlushEntityManagerBehavior(entityManager);
189         page.addBehavior(behavior);
190         wicket.startPage(page);
191         wicket.assertRenderedPage(WebApplicationBasePage.class);
192         verify(entityManager).flush();
193     }
194 }