0dfa090b5d3cfb462f22ccb790c91f645785640b
[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 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
37 public class WebApplicationBasePageTest {
38     private WicketTester wicket; 
39     
40     @Before
41     public void setUp() { 
42         wicket = new WicketTester(); 
43     }
44     
45     @After
46     public void tearDown() { 
47         wicket.destroy();
48     }
49     
50     private void checkBehaviorsInitialized(WebApplicationBasePage aPage) throws Exception { 
51         Field behaviorsField = WebApplicationBasePage.class.getDeclaredField("behaviors");
52         behaviorsField.setAccessible(true);
53         CompositePageBehavior behaviors = (CompositePageBehavior)behaviorsField.get(aPage);
54         assertNotNull(behaviors);
55     }
56     
57     @Test
58     public void testRenderBasePage() throws Exception { 
59         WebApplicationBasePage page = new WebApplicationBasePage();
60         wicket.startPage(page);
61         wicket.assertRenderedPage(WebApplicationBasePage.class);
62         checkBehaviorsInitialized(page);
63     }
64     
65     @Test
66     public void testRenderBasePageWithModel() throws Exception { 
67         WebApplicationBasePage page = new WebApplicationBasePage(mock(IModel.class));
68         wicket.startPage(page);
69         wicket.assertRenderedPage(WebApplicationBasePage.class);
70         checkBehaviorsInitialized(page);
71     }
72     
73     @Test
74     public void testRenderBasePageWithPageMap() throws Exception {
75         WebApplicationBasePage page = new WebApplicationBasePage(mock(IPageMap.class));
76         wicket.startPage(page);
77         wicket.assertRenderedPage(WebApplicationBasePage.class);
78         checkBehaviorsInitialized(page);
79     }
80     
81     @Test
82     public void testRenderBasePageWithPageMapAndModel() throws Exception {
83         WebApplicationBasePage page = new WebApplicationBasePage(mock(IPageMap.class), mock(IModel.class));
84         wicket.startPage(page);
85         wicket.assertRenderedPage(WebApplicationBasePage.class);
86         checkBehaviorsInitialized(page);
87     }
88     
89     @Test
90     public void testRenderBasePageWithPageParameters() throws Exception {
91         WebApplicationBasePage page = new WebApplicationBasePage(new PageParameters());
92         wicket.startPage(page);
93         wicket.assertRenderedPage(WebApplicationBasePage.class);
94         checkBehaviorsInitialized(page);
95     }
96     
97     @Test
98     public void testRenderBasePageWithPageMapAndPageParameters() throws Exception {
99         WebApplicationBasePage page = new WebApplicationBasePage(mock(IPageMap.class), new PageParameters());
100         wicket.startPage(page);
101         wicket.assertRenderedPage(WebApplicationBasePage.class);
102         checkBehaviorsInitialized(page);
103     }
104     
105     public static final class TestPage extends WebApplicationBasePage {
106         
107         private WebResponse response; 
108         
109         public TestPage(WebResponse aResponse) { 
110             response = aResponse; 
111         }
112         public void callAfterRender() { 
113             onAfterRender(); 
114         }
115         public void callSetHeaders() { 
116             setHeaders(response);
117         }
118         public void callBeforeRender() { 
119             onBeforeRender(); 
120         }
121     }
122     
123     @Test
124     public void testAddBehavior() throws Exception {
125         final WebResponse response = mock(WebResponse.class);
126         TestPage page = new TestPage(response); 
127         PageBehavior behavior = mock(PageBehavior.class); 
128         page.addBehavior(behavior); 
129
130         reset(behavior);
131         page.callBeforeRender(); 
132         verify(behavior).onBeforeRender(same(page));
133         verifyNoMoreInteractions(behavior); 
134      
135         reset(behavior);
136         page.callAfterRender(); 
137         verify(behavior).onAfterRender(same(page));
138         verifyNoMoreInteractions(behavior); 
139     
140         reset(behavior);
141         page.callSetHeaders(); 
142         verify(behavior).setHeaders(same(page), same(response));
143         verifyNoMoreInteractions(behavior);  
144     }
145     
146     @Test
147     public void testSmokeBehaviorViewOnlyOnce() throws Exception { 
148         WebApplicationBasePage page = new WebApplicationBasePage(mock(IPageMap.class), new PageParameters());
149         page.addBehavior(new ExpirePageImmediatelyBehavior());
150         wicket.startPage(page);
151         wicket.assertRenderedPage(WebApplicationBasePage.class);
152     }
153     
154     @Test
155     public void testSmokeBehaviorDisableCaching() throws Exception { 
156         WebApplicationBasePage page = new WebApplicationBasePage(mock(IPageMap.class), new PageParameters());
157         page.addBehavior(new DisableCachingBehavior());
158         wicket.startPage(page);
159         wicket.assertRenderedPage(WebApplicationBasePage.class);
160     }
161     
162     @Test
163     public void testSmokeBehaviorFlushEntityManager() throws Exception { 
164         WebApplicationBasePage page = new WebApplicationBasePage(mock(IPageMap.class), new PageParameters());
165         EntityManager entityManager = mock(EntityManager.class);
166         when(entityManager.isOpen()).thenReturn(true);
167         PageBehavior behavior = new FlushEntityManagerBehavior(entityManager); 
168         page.addBehavior(behavior);
169         wicket.startPage(page);
170         wicket.assertRenderedPage(WebApplicationBasePage.class);
171         verify(entityManager).flush();
172     }
173 }