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.kew.rule;
017    
018    import org.junit.Test;
019    import org.kuali.rice.core.api.util.ClassLoaderUtils;
020    import org.kuali.rice.kew.rule.bo.RuleTemplateBo;
021    import org.kuali.rice.kew.rule.bo.RuleTemplateAttributeBo;
022    import org.kuali.rice.kew.service.KEWServiceLocator;
023    import org.kuali.rice.kew.test.KEWTestCase;
024    
025    import java.util.List;
026    
027    import static org.junit.Assert.*;
028    
029    /**
030     * Tests the RuleTemplateAttribute class.
031     * 
032     * @author Kuali Rice Team (rice.collab@kuali.org)
033     */
034    public class RuleTemplateAttributeTest extends KEWTestCase {
035    
036        protected void loadTestData() throws Exception {
037            loadXmlFile("RuleTemplateAttributeTestConfig.xml");
038        }
039    
040        @Test
041        public void testGetWorkflowAttribute() throws Exception {
042            RuleTemplateBo template = KEWServiceLocator.getRuleTemplateService().findByRuleTemplateName("TemplateWithRuleValidationAttribute");
043            List<RuleTemplateAttributeBo> ruleTemplateAttributes = (List<RuleTemplateAttributeBo>) template.getRuleTemplateAttributes();
044            int index = 0;
045            for (RuleTemplateAttributeBo ruleTemplateAttribute : ruleTemplateAttributes) {
046                boolean runtimeThrown = false;
047                WorkflowRuleAttribute attribute = null;
048                try {
049                    attribute = ruleTemplateAttribute.getWorkflowAttribute();
050                } catch (RuntimeException e) {
051                    runtimeThrown = true;
052                }
053                if (index == 0) {
054                    // should be the TestRuleAttribute
055                    assertFalse("RuntimeException should not have been thrown.", runtimeThrown);
056                    assertNotNull("Attribute should exist.", attribute);
057                    attribute = (WorkflowRuleAttribute) ClassLoaderUtils.unwrapFromProxy(attribute);
058                    assertEquals("Should be TestRuleAttribute", TestRuleAttribute.class, attribute.getClass());
059                } else if (index == 1) {
060                    // should be the TestRuleDelegationAttribute so should be null
061                    assertTrue("RuntimeException should have been thrown.", runtimeThrown);
062                    assertNull("This should be the rule delegation attribute, not a WorkflowAttribute.", attribute);
063                }
064                index++;
065            }
066        }
067    
068        @Test
069        public void testIsWorkflowAttribute() throws Exception {
070            RuleTemplateBo template = KEWServiceLocator.getRuleTemplateService().findByRuleTemplateName("TemplateWithRuleValidationAttribute");
071            List<RuleTemplateAttributeBo> ruleTemplateAttributes = (List<RuleTemplateAttributeBo>) template.getRuleTemplateAttributes();
072            int index = 0;
073            for (RuleTemplateAttributeBo ruleTemplateAttribute : ruleTemplateAttributes) {
074                boolean isWorkflowAttribute = ruleTemplateAttribute.isWorkflowAttribute();
075                Object attribute = ruleTemplateAttribute.getAttribute();
076                attribute = ClassLoaderUtils.unwrapFromProxy(attribute);
077                if (index == 0) {
078                    // should be the TestRuleAttribute
079                    assertNotNull(attribute);
080                    assertEquals("Should be TestRuleAttribute", TestRuleAttribute.class, attribute.getClass());
081                    assertTrue("TestRuleAttribute is a workflow attribute.", isWorkflowAttribute);
082                } else if (index == 1) {
083                    // should be the TestRuleValidationAttribute so should be null
084                    assertEquals("Should be TestRuleValidationAttribute", TestRuleValidationAttribute.class, attribute.getClass());
085                    assertFalse("TestRuleValidationAttribute is not a workflow attribute", isWorkflowAttribute);
086                }
087                index++;
088            }
089        }
090    
091    }