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.kim.test; 017 018 import org.kuali.rice.core.api.lifecycle.BaseLifecycle; 019 import org.kuali.rice.core.api.lifecycle.Lifecycle; 020 import org.kuali.rice.core.framework.resourceloader.SpringResourceLoader; 021 import org.kuali.rice.kim.api.services.KimApiServiceLocator; 022 import org.kuali.rice.kim.api.type.KimType; 023 import org.kuali.rice.kim.impl.permission.PermissionTemplateBo; 024 import org.kuali.rice.krad.service.KRADServiceLocator; 025 import org.kuali.rice.test.BaselineTestCase; 026 import org.kuali.rice.test.BaselineTestCase.BaselineMode; 027 import org.kuali.rice.test.BaselineTestCase.Mode; 028 import org.kuali.rice.test.SQLDataLoader; 029 import org.kuali.rice.test.lifecycles.KEWXmlDataLoaderLifecycle; 030 031 import javax.xml.namespace.QName; 032 import java.util.ArrayList; 033 import java.util.HashMap; 034 import java.util.List; 035 import java.util.Map; 036 037 import static org.junit.Assert.fail; 038 039 /** 040 * This is test base that should be used for all KIM unit tests. All non-web unit tests for KIM should extend this base 041 * class. 042 * 043 * @author Kuali Rice Team (rice.collab@kuali.org) 044 */ 045 @BaselineMode(Mode.ROLLBACK_CLEAR_DB) 046 public abstract class KIMTestCase extends BaselineTestCase { 047 048 private static final String KIM_MODULE_NAME = "kim"; 049 050 public KIMTestCase() { 051 super(KIM_MODULE_NAME); 052 } 053 054 @Override 055 protected List<Lifecycle> getSuiteLifecycles() { 056 List<Lifecycle> suiteLifecycles = super.getSuiteLifecycles(); 057 suiteLifecycles.add(new KEWXmlDataLoaderLifecycle("classpath:org/kuali/rice/kim/test/DefaultSuiteTestData.xml")); 058 return suiteLifecycles; 059 } 060 061 @Override 062 protected void loadSuiteTestData() throws Exception { 063 super.loadSuiteTestData(); 064 new SQLDataLoader("classpath:org/kuali/rice/kim/test/DefaultSuiteTestData.sql", "/").runSql(); 065 new SQLDataLoader("classpath:org/kuali/rice/kim/test/CircularRolesTestData.sql", "/").runSql(); 066 new SQLDataLoader("classpath:org/kuali/rice/kim/test/CircularGroupsTestData.sql", "/").runSql(); 067 new SQLDataLoader("classpath:org/kuali/rice/kim/test/DefaultSuiteLDAPTestData.sql", "/").runSql(); 068 } 069 070 @Override 071 protected Lifecycle getLoadApplicationLifecycle() { 072 SpringResourceLoader springResourceLoader = new SpringResourceLoader(new QName("KIMTestHarnessApplicationResourceLoader"), "classpath:KIMTestHarnessSpringBeans.xml", null); 073 springResourceLoader.setParentSpringResourceLoader(getTestHarnessSpringResourceLoader()); 074 return springResourceLoader; 075 } 076 077 /** 078 * Override the standard per-test lifecycles to prepend ClearDatabaseLifecycle and ClearCacheLifecycle 079 * @see org.kuali.rice.test.RiceTestCase#getPerTestLifecycles() 080 */ 081 @Override 082 protected List<Lifecycle> getPerTestLifecycles() { 083 List<Lifecycle> lifecycles = super.getPerTestLifecycles(); 084 lifecycles.add(new ClearCacheLifecycle()); 085 return lifecycles; 086 } 087 088 public class ClearCacheLifecycle extends BaseLifecycle { 089 @Override 090 public void stop() throws Exception { 091 //KimApiServiceLocator.getIdentityManagementService().flushAllCaches(); 092 //KimApiServiceLocator.getRoleService().flushRoleCaches(); 093 super.stop(); 094 } 095 096 } 097 098 protected List<String> getPerTestTablesNotToClear() { 099 List<String> tablesNotToClear = new ArrayList<String>(); 100 tablesNotToClear.add("KRIM_.*"); 101 tablesNotToClear.add("KRNS_.*"); 102 tablesNotToClear.add("KRCR_.*"); 103 tablesNotToClear.add("KREW_.*"); 104 return tablesNotToClear; 105 } 106 107 108 /** 109 * @see org.kuali.rice.test.RiceTestCase#getModuleName() 110 */ 111 @Override 112 protected String getModuleName() { 113 return KIM_MODULE_NAME; 114 } 115 116 protected KimType getDefaultKimType() { 117 KimType type = KimApiServiceLocator.getKimTypeInfoService().getKimType("1"); 118 if (type == null) { 119 fail("Failed to locate the default Kim Type."); 120 } 121 return type; 122 } 123 124 protected PermissionTemplateBo getDefaultPermissionTemplate() { 125 Map<String, Object> fieldValues = new HashMap<String, Object>(); 126 fieldValues.put("namespaceCode", "KUALI"); 127 fieldValues.put("name", "Default"); 128 PermissionTemplateBo template = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(PermissionTemplateBo.class, fieldValues); 129 if (template == null) { 130 fail("Failed to locate the default Permission Template."); 131 } 132 return template; 133 } 134 135 protected String getNewRoleId() { 136 return getIdFromSequence("KRIM_ROLE_ID_S"); 137 } 138 139 protected String getNewRoleMemberId() { 140 return getIdFromSequence("KRIM_ROLE_MBR_ID_S"); 141 } 142 143 protected String getNewRolePermissionId() { 144 return getIdFromSequence("KRIM_ROLE_ID_S"); 145 } 146 147 protected String getIdFromSequence(String sequenceName) { 148 Long sequenceId = KRADServiceLocator.getSequenceAccessorService().getNextAvailableSequenceNumber(sequenceName); 149 return "" + sequenceId; 150 } 151 }