001 /** 002 * Copyright 2005-2013 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.krad.uif.view; 017 018 import static org.junit.Assert.assertEquals; 019 import static org.junit.Assert.assertSame; 020 021 import java.util.ArrayList; 022 import java.util.Collections; 023 import java.util.List; 024 import java.util.concurrent.Callable; 025 026 import org.junit.After; 027 import org.junit.AfterClass; 028 import org.junit.Before; 029 import org.junit.BeforeClass; 030 import org.junit.Test; 031 import org.kuali.rice.krad.sampleapp_2_4_M2.labs.KradLabsForm; 032 import org.kuali.rice.krad.sampleapp_2_4_M2.labs.kitchensink.UifComponentsTestForm; 033 import org.kuali.rice.krad.sampleapp_2_4_M2.labs.transaction.TransactionForm; 034 import org.kuali.rice.krad.service.KRADServiceLocatorWeb; 035 import org.kuali.rice.krad.uif.UifConstants; 036 import org.kuali.rice.krad.uif.UifParameters; 037 import org.kuali.rice.krad.uif.component.Component; 038 import org.kuali.rice.krad.uif.container.Group; 039 import org.kuali.rice.krad.uif.lifecycle.ViewLifecycle; 040 import org.kuali.rice.krad.uif.service.ViewService; 041 import org.kuali.rice.krad.uif.util.ComponentFactory; 042 import org.kuali.rice.krad.uif.util.ObjectPropertyUtils; 043 import org.kuali.rice.krad.uif.util.ProcessLogger; 044 import org.kuali.rice.krad.uif.util.ProcessLoggingUnitTest; 045 import org.kuali.rice.krad.uif.util.UifUnitTestUtils; 046 import org.kuali.rice.krad.uif.util.ViewCleaner; 047 import org.kuali.rice.krad.web.bind.UifServletRequestDataBinder; 048 import org.kuali.rice.krad.web.controller.UifControllerHelper; 049 import org.kuali.rice.krad.web.controller.helper.DataTablesPagingHelper; 050 import org.kuali.rice.krad.web.form.UifFormBase; 051 import org.kuali.rice.krad.web.login.DummyLoginForm; 052 import org.springframework.mock.web.MockHttpServletRequest; 053 import org.springframework.mock.web.MockHttpServletResponse; 054 055 /** 056 * Unit tests for proving correct operation of the ViewHelperService. 057 * 058 * @author Kuali Rice Team (rice.collab@kuali.org) 059 */ 060 public class ViewHelperServiceTest extends ProcessLoggingUnitTest { 061 062 @BeforeClass 063 public static void setUpClass() throws Throwable { 064 UifUnitTestUtils.establishMockConfig("KRAD-ViewHelperServiceTest"); 065 } 066 067 @Before 068 public void setUp() throws Throwable { 069 UifUnitTestUtils.establishMockUserSession("admin"); 070 } 071 072 @After 073 public void tearDown() throws Throwable { 074 UifUnitTestUtils.tearDownMockUserSession(); 075 } 076 077 @AfterClass 078 public static void tearDownClass() throws Throwable { 079 UifUnitTestUtils.tearDownMockConfig(); 080 } 081 082 @Test 083 public void testSanity() throws Throwable { 084 MockHttpServletRequest request = new MockHttpServletRequest(); 085 MockHttpServletResponse response = new MockHttpServletResponse(); 086 DummyLoginForm loginForm = new DummyLoginForm(); 087 request.setParameter(UifParameters.VIEW_ID, "DummyLoginView"); 088 new UifServletRequestDataBinder(loginForm).bind(request); 089 UifControllerHelper.prepareViewForRendering(request, response, loginForm); 090 View dummyLogin = loginForm.getView(); 091 assertEquals(UifConstants.ViewStatus.RENDERED, dummyLogin.getViewStatus()); 092 assertEquals("LoginPage", dummyLogin.getCurrentPage().getId()); 093 assertEquals("Rice-UserName", 094 ObjectPropertyUtils.getPropertyValue(dummyLogin, "currentPage.items[0].items[1].items[1].items[1].items[3].id")); 095 096 ViewCleaner.cleanView(dummyLogin); 097 } 098 099 @Test 100 public void testKitchenSinkView() throws Throwable { 101 ViewService viewService = KRADServiceLocatorWeb.getViewService(); 102 View uifCompView = viewService.getViewById("UifCompView"); 103 UifComponentsTestForm uifcompform = new UifComponentsTestForm(); 104 // TODO: 105 // ViewLifecycle.buildView(uifCompView, uifcompform, Collections.<String, String> emptyMap()); 106 } 107 108 @Test 109 public void testTransactionView() throws Throwable { 110 MockHttpServletRequest request = new MockHttpServletRequest(); 111 MockHttpServletResponse response = new MockHttpServletResponse(); 112 TransactionForm tform = new TransactionForm(); 113 request.setParameter(UifParameters.VIEW_ID, "TransactionView"); 114 new UifServletRequestDataBinder(tform).bind(request); 115 UifControllerHelper.prepareViewForRendering(request, response, tform); 116 View transactionView = tform.getView(); 117 assertEquals(UifConstants.ViewStatus.RENDERED, transactionView.getViewStatus()); 118 ViewCleaner.cleanView(transactionView); 119 } 120 121 @Test 122 public void testTransactionViewOnly() throws Throwable { 123 ViewService viewService = KRADServiceLocatorWeb.getViewService(); 124 viewService.getViewById("TransactionView"); 125 } 126 127 @Test 128 public void testTransactionInitPhase() throws Throwable { 129 ViewService viewService = KRADServiceLocatorWeb.getViewService(); 130 final View transactionView = viewService.getViewById("TransactionView"); 131 final UifFormBase tform = new UifFormBase(); 132 ViewLifecycle.encapsulateLifecycle(transactionView, tform, null, null, new Runnable() { 133 @Override 134 public void run() { 135 ViewLifecycle viewLifecycle = ViewLifecycle.getActiveLifecycle(); 136 assertSame(transactionView, viewLifecycle.getOriginalView()); 137 138 View view = ViewLifecycle.getView(); 139 // assertNotSame(transactionView, view); 140 assertEquals("TransactionView", view.getId()); 141 142 ProcessLogger.trace("begin-init"); 143 viewLifecycle.populateViewFromRequestParameters(Collections.<String, String> emptyMap()); 144 145 ProcessLogger.trace("populate-request"); 146 tform.setViewRequestParameters(view.getViewRequestParameters()); 147 148 ProcessLogger.trace("set-request"); 149 viewLifecycle.performInitialization(); 150 151 ProcessLogger.trace("perform-init"); 152 view.index(); 153 154 ProcessLogger.trace("end-init"); 155 }}); 156 } 157 158 @Test 159 public void testPerformanceMediumAll() throws Throwable { 160 MockHttpServletRequest request = new MockHttpServletRequest(); 161 MockHttpServletResponse response = new MockHttpServletResponse(); 162 KradLabsForm pform = new KradLabsForm(); 163 request.setParameter(UifParameters.VIEW_ID, "Lab-PerformanceMedium"); 164 new UifServletRequestDataBinder(pform).bind(request); 165 UifControllerHelper.prepareViewForRendering(request, response, pform); 166 View performanceView = pform.getView(); 167 assertEquals(UifConstants.ViewStatus.RENDERED, performanceView.getViewStatus()); 168 ViewCleaner.cleanView(performanceView); 169 pform.setPostedView(performanceView); 170 pform.setView(null); 171 172 // TODO: set table ID to non-dynamic 173 // String tableId = "u108"; 174 // 175 // request = new MockHttpServletRequest(); 176 // request.setParameter("methodToCall", "tableJsonRetrieval"); 177 // request.setParameter("tableId", tableId); 178 // request.setParameter("ajaxReturnType", "update-none"); 179 // request.setParameter("ajaxRequest", "true"); 180 // request.setParameter("sEcho", "1"); 181 // request.setParameter("iColumns", "11"); 182 // request.setParameter("sColumns", ""); 183 // request.setParameter("iDisplayStart", "0"); 184 // request.setParameter("iDisplayLength", "10"); 185 // request.setParameter("mDataProp_0", "function"); 186 // request.setParameter("mDataProp_1", "function"); 187 // request.setParameter("mDataProp_2", "function"); 188 // request.setParameter("mDataProp_3", "function"); 189 // request.setParameter("mDataProp_4", "function"); 190 // request.setParameter("mDataProp_5", "function"); 191 // request.setParameter("mDataProp_6", "function"); 192 // request.setParameter("mDataProp_7", "function"); 193 // request.setParameter("mDataProp_8", "function"); 194 // request.setParameter("mDataProp_9", "function"); 195 // request.setParameter("mDataProp_10", "function"); 196 // request.setParameter("sSearch", ""); 197 // request.setParameter("bRegex", "false"); 198 // request.setParameter("sSearch_0", ""); 199 // request.setParameter("bRegex_0", "false"); 200 // request.setParameter("bSearchable_0", "true"); 201 // request.setParameter("sSearch_1", ""); 202 // request.setParameter("bRegex_1", "false"); 203 // request.setParameter("bSearchable_1", "true"); 204 // request.setParameter("sSearch_2", ""); 205 // request.setParameter("bRegex_2", "false"); 206 // request.setParameter("bSearchable_2", "true"); 207 // request.setParameter("sSearch_3", ""); 208 // request.setParameter("bRegex_3", "false"); 209 // request.setParameter("bSearchable_3", "true"); 210 // request.setParameter("sSearch_4", ""); 211 // request.setParameter("bRegex_4", "false"); 212 // request.setParameter("bSearchable_4", "true"); 213 // request.setParameter("sSearch_5", ""); 214 // request.setParameter("bRegex_5", "false"); 215 // request.setParameter("bSearchable_5", "true"); 216 // request.setParameter("sSearch_6", ""); 217 // request.setParameter("bRegex_6", "false"); 218 // request.setParameter("bSearchable_6", "true"); 219 // request.setParameter("sSearch_7", ""); 220 // request.setParameter("bRegex_7", "false"); 221 // request.setParameter("bSearchable_7", "true"); 222 // request.setParameter("sSearch_8", ""); 223 // request.setParameter("bRegex_8", "false"); 224 // request.setParameter("bSearchable_8", "true"); 225 // request.setParameter("sSearch_9", ""); 226 // request.setParameter("bRegex_9", "false"); 227 // request.setParameter("bSearchable_9", "true"); 228 // request.setParameter("sSearch_10", ""); 229 // request.setParameter("bRegex_10", "false"); 230 // request.setParameter("bSearchable_10", "true"); 231 // request.setParameter("iSortCol_0", "0"); 232 // request.setParameter("sSortDir_0", "asc"); 233 // request.setParameter("iSortingCols", "1"); 234 // request.setParameter("bSortable_0", "false"); 235 // request.setParameter("bSortable_1", "false"); 236 // request.setParameter("bSortable_2", "true"); 237 // request.setParameter("bSortable_3", "true"); 238 // request.setParameter("bSortable_4", "true"); 239 // request.setParameter("bSortable_5", "true"); 240 // request.setParameter("bSortable_6", "true"); 241 // request.setParameter("bSortable_7", "true"); 242 // request.setParameter("bSortable_8", "false"); 243 // request.setParameter("bSortable_9", "true"); 244 // request.setParameter("bSortable_10", "false"); 245 // 246 // DataTablesPagingHelper.DataTablesInputs dataTablesInputs = 247 // new DataTablesPagingHelper.DataTablesInputs(request); 248 // DataTablesPagingHelper pagingHelper = new DataTablesPagingHelper(); 249 // pagingHelper.processPagingRequest(tableId, pform, request, response, dataTablesInputs); 250 } 251 252 253 @SuppressWarnings("unchecked") 254 @Test 255 public void testMutability() throws Throwable { 256 ViewService viewService = KRADServiceLocatorWeb.getViewService(); 257 final View loginView = viewService.getViewById("DummyLoginView"); 258 Group group = ViewLifecycle.encapsulateInitialization(new Callable<Group>(){ 259 @Override 260 public Group call() throws Exception { 261 Group group = ComponentFactory.getGroupWithDisclosureGridLayout(); 262 group.setId("foo"); 263 group.setHeaderText("bar"); 264 group.setItems(new ArrayList<Component>()); 265 ((List<Group>) loginView.getItems()).add(group); 266 return group; 267 }}); 268 assertSame(group, loginView.getItems().get(loginView.getItems().size()-1)); 269 } 270 271 }