001/** 002 * Copyright 2005-2014 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 */ 016package org.kuali.rice.krad.util; 017 018import org.junit.AfterClass; 019import org.junit.Before; 020import org.junit.BeforeClass; 021import org.junit.Test; 022import org.junit.runner.RunWith; 023import org.kuali.rice.core.api.CoreConstants; 024import org.kuali.rice.core.api.config.property.ConfigContext; 025import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader; 026import org.kuali.rice.core.api.resourceloader.ResourceLoader; 027import org.kuali.rice.core.framework.config.property.SimpleConfig; 028import org.kuali.rice.krad.data.metadata.MetadataRepository; 029import org.kuali.rice.krad.service.DataDictionaryService; 030import org.springframework.beans.factory.annotation.Autowired; 031import org.springframework.test.context.ContextConfiguration; 032import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 033 034import javax.xml.namespace.QName; 035 036import static org.junit.Assert.assertTrue; 037import static org.mockito.Mockito.mock; 038import static org.mockito.Mockito.when; 039 040/** 041 * Tests LegacyDetectionAdvice 042 */ 043@RunWith(SpringJUnit4ClassRunner.class) 044@ContextConfiguration 045public class LegacyDetectionAdviceTest { 046 @LegacyDataFramework 047 public static class LegacyService { 048 public boolean performDeprecatedAction() { return true; } 049 } 050 public static class NonLegacyService { 051 public boolean performAction() { return true; } 052 } 053 054 @Autowired 055 LegacyService legacyService; 056 @Autowired 057 NonLegacyService nonLegacyService; 058 059 @BeforeClass 060 public static void initGrl() throws Exception { 061 062 ConfigContext.init(new SimpleConfig()); 063 ConfigContext.getCurrentContextConfig().putProperty(CoreConstants.Config.APPLICATION_ID, LegacyUtilsTest.class.getName()); 064 065 // have to mock these because LegacyDetectionAdvice is calling LegacyUtils 066 MetadataRepository metadataRepository = mock(MetadataRepository.class); 067 DataDictionaryService dataDictionaryService = mock(DataDictionaryService.class); 068 ResourceLoader resourceLoader = mock(ResourceLoader.class); 069 when(resourceLoader.getName()).thenReturn(QName.valueOf(LegacyUtilsTest.class.getName())); 070 when(resourceLoader.getService(QName.valueOf("kd-metadataRepository"))).thenReturn(metadataRepository); 071 when(resourceLoader.getService(QName.valueOf("dataDictionaryService"))).thenReturn(dataDictionaryService); 072 GlobalResourceLoader.addResourceLoader(resourceLoader); 073 GlobalResourceLoader.start(); 074 } 075 076 @AfterClass 077 public static void stopGrl() throws Exception { 078 GlobalResourceLoader.stop(); 079 } 080 081 @Before 082 public void resetConfiguration() { 083 084 ConfigContext.getCurrentContextConfig().removeProperty(KRADConstants.Config.ENABLE_LEGACY_DATA_FRAMEWORK); 085 } 086 087 @Test 088 public void testNonLegacyServiceAlwaysAllowed() { 089 assertTrue(nonLegacyService.performAction()); 090 ConfigContext.getCurrentContextConfig().putProperty(KRADConstants.Config.ENABLE_LEGACY_DATA_FRAMEWORK, "true"); 091 assertTrue(nonLegacyService.performAction()); 092 } 093 094 @Test(expected=IllegalStateException.class) 095 public void testLegacyServiceInvocationAllowedWhenEnabled() { 096 assertTrue(nonLegacyService.performAction()); 097 legacyService.performDeprecatedAction(); 098 } 099 100 @Test // no exception is thrown 101 public void testLegacyServiceInvocationDisallowedWhenDisabled() { 102 ConfigContext.getCurrentContextConfig().putProperty(KRADConstants.Config.ENABLE_LEGACY_DATA_FRAMEWORK, "true"); 103 assertTrue(nonLegacyService.performAction()); 104 assertTrue(legacyService.performDeprecatedAction()); 105 } 106}