2 * Copyright 2005-2010 the original author or authors.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package org.wamblee.wicket.page;
18 import static junit.framework.Assert.*;
19 import static org.mockito.Matchers.*;
20 import static org.mockito.Mockito.*;
22 import java.lang.reflect.Field;
24 import javax.persistence.EntityManager;
25 import javax.transaction.Status;
26 import javax.transaction.UserTransaction;
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;
43 public class WebApplicationBasePageTest {
44 private WicketTester wicket;
48 wicket = new WicketTester();
52 public void tearDown() {
56 private void checkBehaviorsInitialized(WebApplicationBasePage aPage)
58 Field behaviorsField = WebApplicationBasePage.class
59 .getDeclaredField("behaviors");
60 behaviorsField.setAccessible(true);
61 CompositePageBehavior behaviors = (CompositePageBehavior) behaviorsField
63 assertNotNull(behaviors);
67 public void testRenderBasePage() throws Exception {
68 WebApplicationBasePage page = new WebApplicationBasePage();
69 wicket.startPage(page);
70 wicket.assertRenderedPage(WebApplicationBasePage.class);
71 checkBehaviorsInitialized(page);
75 public void testRenderBasePageWithModel() throws Exception {
76 WebApplicationBasePage page = new WebApplicationBasePage(
78 wicket.startPage(page);
79 wicket.assertRenderedPage(WebApplicationBasePage.class);
80 checkBehaviorsInitialized(page);
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);
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);
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);
111 public void testRenderBasePageWithPageMapAndPageParameters()
113 WebApplicationBasePage page = new WebApplicationBasePage(
114 mock(IPageMap.class), new PageParameters());
115 wicket.startPage(page);
116 wicket.assertRenderedPage(WebApplicationBasePage.class);
117 checkBehaviorsInitialized(page);
120 public static final class TestPage extends WebApplicationBasePage {
122 private WebResponse response;
124 public TestPage(WebResponse aResponse) {
125 response = aResponse;
128 public void callAfterRender() {
132 public void callSetHeaders() {
133 setHeaders(response);
136 public void callBeforeRender() {
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);
149 page.callBeforeRender();
150 verify(behavior).onBeforeRender(same(page));
151 verifyNoMoreInteractions(behavior);
154 page.callAfterRender();
155 verify(behavior).onAfterRender(same(page));
156 verifyNoMoreInteractions(behavior);
159 page.callSetHeaders();
160 verify(behavior).setHeaders(same(page), same(response));
161 verifyNoMoreInteractions(behavior);
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);
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);
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();