001 /** 002 * Copyright 2005-2011 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.lookup; 017 018 import static org.junit.Assert.assertEquals; 019 import static org.junit.Assert.assertTrue; 020 021 import java.util.HashMap; 022 import java.util.List; 023 import java.util.Map; 024 025 import org.junit.Test; 026 import org.kuali.rice.kns.lookup.KualiLookupableImpl; 027 import org.kuali.rice.kns.lookup.LookupableHelperService; 028 import org.kuali.rice.kns.web.ui.Field; 029 import org.kuali.rice.kns.web.ui.Row; 030 import org.kuali.rice.krad.service.KRADServiceLocatorInternal; 031 import org.kuali.rice.krad.service.KRADServiceLocatorWeb; 032 import org.kuali.rice.krad.test.document.bo.Account; 033 import org.kuali.rice.krad.util.KRADConstants; 034 import org.kuali.rice.test.BaselineTestCase; 035 import org.kuali.rice.test.data.PerTestUnitTestData; 036 import org.kuali.rice.test.data.UnitTestData; 037 import org.kuali.rice.test.data.UnitTestFile; 038 import org.kuali.rice.test.data.UnitTestSql; 039 import org.kuali.test.KRADTestCase; 040 import org.kuali.test.KRADTestConstants.TestConstants; 041 042 /** 043 * KualiLookupableTest tests {@link KualiLookupableImpl} methods 044 * 045 * 046 */ 047 @PerTestUnitTestData( 048 value = @UnitTestData( 049 order = {UnitTestData.Type.SQL_STATEMENTS, UnitTestData.Type.SQL_FILES}, 050 sqlStatements = { 051 @UnitTestSql("delete from trv_acct where acct_fo_id between 101 and 301") 052 ,@UnitTestSql("delete from trv_acct_fo where acct_fo_id between 101 and 301") 053 }, 054 sqlFiles = { 055 @UnitTestFile(filename = "classpath:testAccountManagers.sql", delimiter = ";") 056 , @UnitTestFile(filename = "classpath:testAccounts.sql", delimiter = ";") 057 } 058 ), 059 tearDown = @UnitTestData( 060 sqlStatements = { 061 @UnitTestSql("delete from trv_acct where acct_fo_id between 101 and 301") 062 ,@UnitTestSql("delete from trv_acct_fo where acct_fo_id between 101 and 301") 063 } 064 ) 065 ) 066 @BaselineTestCase.BaselineMode(BaselineTestCase.Mode.NONE) 067 public class KualiLookupableTest extends KRADTestCase { 068 private KualiLookupableImpl lookupableImpl; 069 070 @Override 071 public void setUp() throws Exception { 072 super.setUp(); 073 lookupableImpl = new KualiLookupableImpl(); 074 lookupableImpl.setLookupableHelperService((LookupableHelperService) KRADServiceLocatorInternal.getService("lookupableHelperService")); 075 lookupableImpl.setBusinessObjectClass(Account.class); 076 } 077 078 /** 079 * Tests generation of lookup form rows 080 * 081 * @throws Exception 082 */ 083 @Test public void testGetRows() throws Exception { 084 // rows should have been populated by business object class initialization 085 List<? extends Row> rows = lookupableImpl.getRows(); 086 assertEquals(4, rows.size()); 087 088 Field f = rows.get(0).getField(0); 089 assertEquals("number", f.getPropertyName()); 090 assertEquals("Account Number", f.getFieldLabel()); 091 assertEquals("text", f.getFieldType()); 092 093 f = rows.get(1).getField(0); 094 assertEquals("name", f.getPropertyName()); 095 assertEquals("Account Name", f.getFieldLabel()); 096 assertEquals("text", f.getFieldType()); 097 098 f = rows.get(2).getField(0); 099 assertEquals("extension.accountTypeCode", f.getPropertyName()); 100 assertEquals("Account Type Code", f.getFieldLabel()); 101 assertEquals("dropdown", f.getFieldType()); 102 103 f = rows.get(3).getField(0); 104 assertEquals("amId", f.getPropertyName()); 105 assertEquals("Account Manager Id", f.getFieldLabel()); 106 assertEquals("text", f.getFieldType()); 107 } 108 109 /** 110 * Test that the return url for a business object is getting set correctly based on the defined return fields 111 * 112 * @throws Exception 113 */ 114 @Test public void testReturnUrl() throws Exception { 115 Map<String, String> lookupProps = new HashMap<String, String>(); 116 lookupProps.put("number", "b101"); 117 lookupProps.put("name", "b101"); 118 119 Account account = (Account) KRADServiceLocatorWeb.getLookupService().findObjectBySearch(Account.class, lookupProps); 120 // ObjectCode objCode = getObjectCodeService().getCountry(TestConstants.Data1.UNIVERSITY_FISCAL_YEAR, TestConstants.Data1.CHART_OF_ACCOUNTS_CODE, TestConstants.Data1.OBJECT_CODE); 121 122 Map fieldConversions = new HashMap(); 123 lookupableImpl.setDocFormKey("8888888"); 124 lookupableImpl.setBackLocation(TestConstants.BASE_PATH + "ib.do"); 125 126 String returnUrl = lookupableImpl.getReturnUrl(account, fieldConversions, "kualiLookupable", null).constructCompleteHtmlTag(); 127 128 // check url has our doc form key 129 checkURLContains("Lookup return url does not contain docFormKey", KRADConstants.DOC_FORM_KEY + "=8888888", returnUrl); 130 131 // check url goes back to our back location 132 checkURLContains("Lookup return url does not go back to back location", TestConstants.BASE_PATH + "ib.do", returnUrl); 133 134 assertEquals(returnUrl, "<a title=\"return valueAccount Number=b101 \" href=\"http://localhost:8080/ib.do?refreshCaller=kualiLookupable&number=b101&methodToCall=refresh&docFormKey=8888888\" >return value</a>"); 135 136 // check that field conversions are working correctly for keys 137 fieldConversions.put("number", "myAccount[0].chartCode"); 138 139 returnUrl = lookupableImpl.getReturnUrl(account, fieldConversions, "kualiLookupable", null).constructCompleteHtmlTag(); 140 141 // check keys have been mapped properly 142 checkURLContains("Lookup return url does not map key", "myAccount[0].chartCode=b101", returnUrl); 143 } 144 145 146 /** 147 * Checks the url string contains a substring 148 * 149 * @param message - an informational message to show if the test fails 150 * @param containString - the string to check for in the url 151 * @param url - a url to look for a string in 152 */ 153 private void checkURLContains(String message, String containString, String url) { 154 assertTrue(message, url.indexOf(containString) > 0); 155 } 156 }