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}