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.xml; 017 018 import static org.junit.Assert.assertEquals; 019 import static org.junit.Assert.assertFalse; 020 import static org.junit.Assert.assertNotNull; 021 import static org.junit.Assert.assertNull; 022 import static org.junit.Assert.assertTrue; 023 import static org.junit.Assert.fail; 024 025 import java.util.Date; 026 import java.util.Iterator; 027 import java.util.List; 028 029 import org.junit.Test; 030 import org.kuali.rice.kew.rule.RuleBaseValues; 031 import org.kuali.rice.kew.rule.RuleTemplateOptionBo; 032 import org.kuali.rice.kew.rule.bo.RuleTemplateBo; 033 import org.kuali.rice.kew.rule.bo.RuleTemplateAttributeBo; 034 import org.kuali.rice.kew.service.KEWServiceLocator; 035 import org.kuali.rice.kew.test.KEWTestCase; 036 import org.kuali.rice.kew.api.KewApiConstants; 037 038 039 /** 040 * This is a Test class to test the rule template xml parser 041 * 042 * @author Kuali Rice Team (rice.collab@kuali.org) 043 * 044 */ 045 public class RuleTemplateXmlParserTest extends KEWTestCase { 046 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(RuleTemplateXmlParserTest.class); 047 048 private static final String RULE_ATTRIBUTE_ONE = "TemplateTestRuleAttribute1"; 049 private static final String RULE_ATTRIBUTE_TWO = "TemplateTestRuleAttribute2"; 050 private static final String RULE_ATTRIBUTE_THREE = "TemplateTestRuleAttribute3"; 051 private static final String RULE_ATTRIBUTE_FOUR = "TemplateTestRuleAttribute4"; 052 private static final String RULE_ATTRIBUTE_FIVE = "TemplateTestRuleAttribute5"; 053 054 private enum TemplateParserGeneralFixture { 055 VALID_TEMPLATE_MIN_XML("ValidRuleTemplate", "RuleTemplate_Valid", new String[]{RULE_ATTRIBUTE_ONE}, new String[0], new String[]{RULE_ATTRIBUTE_ONE}, new String[0]), 056 VALID_TEMPLATE_FULL_XML("ValidRuleTemplate_Full", "RuleTemplate_Valid_Full", new String[]{RULE_ATTRIBUTE_ONE}, new String[0], new String[]{RULE_ATTRIBUTE_ONE}, new String[0]), 057 // below has allowOverwrite=true 058 VALID_TEMPLATE_OVERWRITE("ValidRuleTemplateOverwrite", "RuleTemplate_Valid", new String[]{RULE_ATTRIBUTE_ONE}, new String[]{RULE_ATTRIBUTE_FOUR}, new String[]{RULE_ATTRIBUTE_FOUR}, new String[]{RULE_ATTRIBUTE_ONE}), 059 VALID_TEMPLATE_FULL_OVERWRITE("ValidRuleTemplateFullOverwrite", "RuleTemplate_Valid_Full", new String[]{RULE_ATTRIBUTE_ONE}, new String[]{RULE_ATTRIBUTE_FOUR}, new String[]{RULE_ATTRIBUTE_FOUR}, new String[]{RULE_ATTRIBUTE_ONE}), 060 INVALID_TEMPLATE_OVERWRITE("InvalidRuleTemplateOverwrite", "RuleTemplate_Valid", new String[]{RULE_ATTRIBUTE_ONE}, new String[0], new String[]{RULE_ATTRIBUTE_ONE}, new String[0]), 061 VALID_TEMPLATE_WITH_FULL_DEFAULTS("ValidRuleTemplateWithFullDefaults", "RuleTemplate_Valid_Defaults", new String[]{RULE_ATTRIBUTE_TWO}, new String[0], new String[]{RULE_ATTRIBUTE_TWO}, new String[0]), 062 VALID_TEMPLATE_WITH_LIMITED_DEFAULTS("ValidRuleTemplateWithSomeDefaults", "RuleTemplate_Valid_Some_Defaults", new String[]{RULE_ATTRIBUTE_THREE}, new String[0], new String[0], new String[]{RULE_ATTRIBUTE_THREE}), 063 VALID_TEMPLATE_WITH_LIMITED_DEFAULTS_OVERWRITE("ValidRuleTemplateWithSomeDefaultsOverwrite", "RuleTemplate_Valid_Some_Defaults", new String[]{RULE_ATTRIBUTE_THREE}, new String[0], new String[0], new String[]{RULE_ATTRIBUTE_THREE}), 064 VALID_TEMPLATE_WITH_DESCRIPTION_DEFAULT("ValidRuleTemplateWithDefaultsDescriptionOnly", "RuleTemplate_Valid_Description_Default", new String[]{RULE_ATTRIBUTE_TWO}, new String[0], new String[]{RULE_ATTRIBUTE_TWO}, new String[0]), 065 VALID_TEMPLATE_WITH_LIMITED_DEFAULTS_REMOVED("ValidRuleTemplateWithSomeRemovedDefaultsOverwrite", "RuleTemplate_Valid_Some_Defaults", new String[]{RULE_ATTRIBUTE_THREE}, new String[0], new String[0], new String[]{RULE_ATTRIBUTE_THREE}) 066 ; 067 068 public String fileNameParameter; 069 public String ruleTemplateName; 070 public String[] activeAttributeNames; 071 public String[] inactiveAttributeNames; 072 public String[] requiredAttributeNames; 073 public String[] nonRequiredAttributeNames; 074 075 private TemplateParserGeneralFixture(String fileNameParameter, String ruleTemplateName, String[] activeAttributeNames, String[] inactiveAttributeNames, String[] requiredAttributeNames, String[] nonRequiredAttributeNames) { 076 this.fileNameParameter = fileNameParameter; 077 this.ruleTemplateName = ruleTemplateName; 078 this.activeAttributeNames = activeAttributeNames; 079 this.inactiveAttributeNames = inactiveAttributeNames; 080 this.requiredAttributeNames = requiredAttributeNames; 081 this.nonRequiredAttributeNames = nonRequiredAttributeNames; 082 } 083 } 084 085 protected void loadTestData() throws Exception { 086 loadXmlFile("RuleTemplateConfig.xml"); 087 } 088 089 private void testTemplate(String docName, Class expectedException) throws Exception { 090 RuleTemplateXmlParser parser = new RuleTemplateXmlParser(); 091 String filename = "RT_" + docName + ".xml"; 092 try { 093 parser.parseRuleTemplates(getClass().getResourceAsStream(filename)); 094 if (expectedException != null) { 095 fail(filename + " successfully loaded. Expected exception of class '" + expectedException + "'"); 096 } 097 } catch (Exception e) { 098 if (expectedException == null || !(expectedException.isAssignableFrom(e.getClass()))) { 099 throw e; 100 } else { 101 log.error(filename + " exception: " + e); 102 } 103 } 104 } 105 106 private void testListOfTemplateAttributes(List ruleTemplateAttributes, String[] activeRuleTemplateAttributeNames, String[] requiredRuleTemplateAttributeNames) { 107 for (Iterator iterator = ruleTemplateAttributes.iterator(); iterator.hasNext();) { 108 RuleTemplateAttributeBo templateAttribute = (RuleTemplateAttributeBo) iterator.next(); 109 String ruleAttributeName = templateAttribute.getRuleAttribute().getName(); 110 111 LOG.info("Attribute name '" + ruleAttributeName +"' active indicator is " + templateAttribute.isActive()); 112 if (activeRuleTemplateAttributeNames == null) { 113 assertEquals("Active indicator should be false for all attributes but is not for attribute '" + ruleAttributeName + "'",Boolean.FALSE, templateAttribute.getActive()); 114 } else { 115 runTestsOnTemplateAttributeField(ruleAttributeName, templateAttribute.isActive(), activeRuleTemplateAttributeNames, "active"); 116 } 117 118 LOG.info("Attribute name '" + ruleAttributeName +"' required indicator is " + templateAttribute.isRequired()); 119 if (requiredRuleTemplateAttributeNames == null) { 120 assertEquals("Required indicator should be false for all attributes but is not for attribute '" + ruleAttributeName + "'",Boolean.FALSE, templateAttribute.getRequired()); 121 } else { 122 runTestsOnTemplateAttributeField(ruleAttributeName, templateAttribute.isRequired(), requiredRuleTemplateAttributeNames, "required"); 123 } 124 } 125 } 126 127 private void testAllAttributesActive(List activeRuleTemplateAttributes, String[] activeRuleTemplateAttributeNames) { 128 for (Iterator iterator = activeRuleTemplateAttributes.iterator(); iterator.hasNext();) { 129 RuleTemplateAttributeBo activeTemplateAttribute = (RuleTemplateAttributeBo) iterator.next(); 130 String ruleAttributeName = activeTemplateAttribute.getRuleAttribute().getName(); 131 assertEquals("Template Attribute with name '" + ruleAttributeName + "' has invalid active value", Boolean.TRUE, activeTemplateAttribute.getActive()); 132 boolean foundAttribute = false; 133 for (int i = 0; i < activeRuleTemplateAttributeNames.length; i++) { 134 String shouldBeActiveAttributeName = activeRuleTemplateAttributeNames[i]; 135 if (shouldBeActiveAttributeName.equals(ruleAttributeName)) { 136 foundAttribute = true; 137 break; 138 } 139 } 140 if (!foundAttribute) { 141 fail("Template Attribute with name '" + ruleAttributeName + "' should have been in active template name list but was not found"); 142 } 143 } 144 } 145 146 private void runTestsOnTemplateAttributeField(String ruleAttributeName, boolean valueToConfirm, String[] attributeNamesShouldBeTrue, String errorMessageIdentifier) { 147 boolean foundAttribute = false; 148 for (String attributeNameThatShouldPass : attributeNamesShouldBeTrue) { 149 if (ruleAttributeName.equals(attributeNameThatShouldPass)) { 150 foundAttribute = true; 151 if (!valueToConfirm) { 152 fail("Attribute with name '" + ruleAttributeName + "' should have been " + errorMessageIdentifier + " but is not"); 153 } 154 } 155 } 156 if ( (!foundAttribute) && (valueToConfirm) ) { 157 fail("Attribute with name '" + ruleAttributeName + "' should not be " + errorMessageIdentifier + " but is"); 158 } 159 } 160 161 /** 162 * Loads valid template definitions 163 */ 164 @Test public void testLoadValidTemplate() throws Exception { 165 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_FULL_XML.fileNameParameter, null); 166 167 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_MIN_XML.fileNameParameter, null); 168 RuleTemplateBo template = KEWServiceLocator.getRuleTemplateService().findByRuleTemplateName(TemplateParserGeneralFixture.VALID_TEMPLATE_MIN_XML.ruleTemplateName); 169 testListOfTemplateAttributes(template.getRuleTemplateAttributes(), TemplateParserGeneralFixture.VALID_TEMPLATE_MIN_XML.activeAttributeNames, TemplateParserGeneralFixture.VALID_TEMPLATE_MIN_XML.requiredAttributeNames); 170 testAllAttributesActive(template.getActiveRuleTemplateAttributes(), TemplateParserGeneralFixture.VALID_TEMPLATE_MIN_XML.activeAttributeNames); 171 172 assertNoDefaultsSpecified(template); 173 } 174 175 /** 176 * Loads a "minimal" template definition and then updates/overwrites it 177 */ 178 @Test public void testLoadValidTemplateWithOverwrite() throws Exception { 179 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_MIN_XML.fileNameParameter, null); 180 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_OVERWRITE.fileNameParameter, null); // allowOverwrite=true 181 182 RuleTemplateBo template = KEWServiceLocator.getRuleTemplateService().findByRuleTemplateName(TemplateParserGeneralFixture.VALID_TEMPLATE_OVERWRITE.ruleTemplateName); 183 testListOfTemplateAttributes(template.getRuleTemplateAttributes(), TemplateParserGeneralFixture.VALID_TEMPLATE_OVERWRITE.activeAttributeNames, TemplateParserGeneralFixture.VALID_TEMPLATE_OVERWRITE.requiredAttributeNames); 184 testAllAttributesActive(template.getActiveRuleTemplateAttributes(), TemplateParserGeneralFixture.VALID_TEMPLATE_OVERWRITE.activeAttributeNames); 185 186 assertNoDefaultsSpecified(template); 187 } 188 189 /** 190 * Loads a "full" template definition and then updates/overwrites it 191 */ 192 @Test public void testLoadValidTemplateFullWithOverwrite() throws Exception { 193 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_FULL_XML.fileNameParameter, null); 194 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_FULL_OVERWRITE.fileNameParameter, null); // allowOverwrite=true 195 196 RuleTemplateBo template = KEWServiceLocator.getRuleTemplateService().findByRuleTemplateName(TemplateParserGeneralFixture.VALID_TEMPLATE_FULL_OVERWRITE.ruleTemplateName); 197 testListOfTemplateAttributes(template.getRuleTemplateAttributes(), TemplateParserGeneralFixture.VALID_TEMPLATE_FULL_OVERWRITE.activeAttributeNames, TemplateParserGeneralFixture.VALID_TEMPLATE_FULL_OVERWRITE.requiredAttributeNames); 198 testAllAttributesActive(template.getActiveRuleTemplateAttributes(), TemplateParserGeneralFixture.VALID_TEMPLATE_FULL_OVERWRITE.activeAttributeNames); 199 200 assertNoDefaultsSpecified(template); 201 } 202 203 /** 204 * Tests attempting to overwrite a template without the allowOverwrite flag set to true 205 */ 206 @Test public void testLoadInvalidTemplateWithOverwrite() throws Exception { 207 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_MIN_XML.fileNameParameter, null); 208 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_MIN_XML.fileNameParameter, RuntimeException.class); // no allowOverwrite specified 209 testTemplate(TemplateParserGeneralFixture.INVALID_TEMPLATE_OVERWRITE.fileNameParameter, RuntimeException.class); // allowOverwrite=false 210 } 211 212 /** 213 * Tests loading a template with a full ruleDefaults section 214 */ 215 @Test public void testLoadValidTemplateWithFullDefaults() throws Exception { 216 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_WITH_FULL_DEFAULTS.fileNameParameter, null); 217 218 RuleTemplateBo template = KEWServiceLocator.getRuleTemplateService().findByRuleTemplateName(TemplateParserGeneralFixture.VALID_TEMPLATE_WITH_FULL_DEFAULTS.ruleTemplateName); 219 220 // test the rule template options 221 List<RuleTemplateOptionBo> options = template.getRuleTemplateOptions(); 222 assertEquals(5, options.size()); 223 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_ACKNOWLEDGE_REQ, "false"); 224 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_APPROVE_REQ, "true"); 225 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_COMPLETE_REQ, "false"); 226 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_FYI_REQ, "false"); 227 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_DEFAULT_CD, "A"); 228 229 // test those set in the default/template rule 230 RuleBaseValues ruleDefaults = KEWServiceLocator.getRuleService().findDefaultRuleByRuleTemplateId(template.getId()); 231 assertTrue(ruleDefaults.getTemplateRuleInd()); 232 assertEquals("Testy Me A Template", ruleDefaults.getDescription()); 233 assertEquals("01/11/2006", ruleDefaults.getFromDateString()); 234 assertEquals("01/01/2100", ruleDefaults.getToDateString()); 235 assertTrue(ruleDefaults.isForceAction()); 236 assertFalse(ruleDefaults.isActive()); 237 } 238 239 /** 240 * Tests loading a template with a partial ruleDefaults section 241 */ 242 @Test public void testLoadValidTemplateWithSomeDefaults() throws Exception { 243 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_WITH_LIMITED_DEFAULTS.fileNameParameter, null); 244 245 RuleTemplateBo template = KEWServiceLocator.getRuleTemplateService().findByRuleTemplateName(TemplateParserGeneralFixture.VALID_TEMPLATE_WITH_LIMITED_DEFAULTS.ruleTemplateName); 246 247 // test the rule template options 248 List<RuleTemplateOptionBo> options = template.getRuleTemplateOptions(); 249 assertEquals(5, options.size()); 250 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_ACKNOWLEDGE_REQ, "false"); 251 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_APPROVE_REQ, "true"); 252 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_COMPLETE_REQ, "false"); 253 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_FYI_REQ, "false"); 254 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_DEFAULT_CD, "A"); 255 256 // test those set in the default/template rule 257 RuleBaseValues ruleDefaults = KEWServiceLocator.getRuleService().findDefaultRuleByRuleTemplateId(template.getId()); 258 assertTrue(ruleDefaults.getTemplateRuleInd()); 259 assertEquals("a rule based on RuleTemplate_Valid_Some_Defaults", ruleDefaults.getDescription()); 260 assertFalse(ruleDefaults.isForceAction()); 261 assertFalse(ruleDefaults.isActive()); 262 assertEquals("01/11/2006", ruleDefaults.getFromDateString()); 263 assertEquals("01/01/2100", ruleDefaults.getToDateString()); 264 assertNotNull(ruleDefaults.getActivationDate()); 265 assertTrue(new Date(System.currentTimeMillis() - 10000).before(ruleDefaults.getActivationDate()) && new Date(System.currentTimeMillis() + 100).after(ruleDefaults.getActivationDate())); 266 assertNull(ruleDefaults.getDeactivationDate()); 267 } 268 269 /** 270 * Tests loading a template with a partial ruleDefaults section and then updating/overwriting it 271 */ 272 @Test public void testLoadValidTemplateWithSomeDefaultsOverwrite() throws Exception { 273 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_WITH_LIMITED_DEFAULTS.fileNameParameter, null); 274 275 RuleTemplateBo template = KEWServiceLocator.getRuleTemplateService().findByRuleTemplateName(TemplateParserGeneralFixture.VALID_TEMPLATE_WITH_LIMITED_DEFAULTS.ruleTemplateName); 276 277 // test the rule template options 278 List<RuleTemplateOptionBo> options = template.getRuleTemplateOptions(); 279 assertEquals(5, options.size()); 280 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_ACKNOWLEDGE_REQ, "false"); 281 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_APPROVE_REQ, "true"); 282 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_COMPLETE_REQ, "false"); 283 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_FYI_REQ, "false"); 284 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_DEFAULT_CD, "A"); 285 286 // test those set in the default/template rule 287 RuleBaseValues ruleDefaults = KEWServiceLocator.getRuleService().findDefaultRuleByRuleTemplateId(template.getId()); 288 assertTrue(ruleDefaults.getTemplateRuleInd()); 289 assertEquals("a rule based on RuleTemplate_Valid_Some_Defaults", ruleDefaults.getDescription()); 290 assertFalse(ruleDefaults.isForceAction()); 291 assertFalse(ruleDefaults.isActive()); 292 assertEquals("01/11/2006", ruleDefaults.getFromDateString()); 293 assertEquals("01/01/2100", ruleDefaults.getToDateString()); 294 295 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_WITH_LIMITED_DEFAULTS_OVERWRITE.fileNameParameter, null); 296 297 template = KEWServiceLocator.getRuleTemplateService().findByRuleTemplateName(TemplateParserGeneralFixture.VALID_TEMPLATE_WITH_LIMITED_DEFAULTS_OVERWRITE.ruleTemplateName); 298 299 // we overwrite the template and specify a new subset of defaults...any setting omitted should be removed, i.e. reset to a default 300 // value 301 options = template.getRuleTemplateOptions(); 302 assertEquals(1, options.size()); 303 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_ACKNOWLEDGE_REQ, "true"); 304 305 // test those set in the default/template rule 306 ruleDefaults = KEWServiceLocator.getRuleService().findDefaultRuleByRuleTemplateId(template.getId()); 307 assertTrue(ruleDefaults.getTemplateRuleInd()); 308 assertEquals("a rule based on (updated) RuleTemplate_Valid_Some_Defaults", ruleDefaults.getDescription()); 309 assertFalse(ruleDefaults.isForceAction()); 310 assertFalse(ruleDefaults.isActive()); 311 // activation date defaults to current time 312 assertNull(ruleDefaults.getFromDateValue()); 313 assertNotNull(ruleDefaults.getActivationDate()); 314 assertTrue(new Date(System.currentTimeMillis() - 10000).before(ruleDefaults.getActivationDate()) && new Date(System.currentTimeMillis() + 100).after(ruleDefaults.getActivationDate())); 315 assertNull(ruleDefaults.getToDateString()); 316 assertNull(ruleDefaults.getDeactivationDate()); 317 } 318 319 /** 320 * Tests loading a template with a partial ruleDefaults section, and then updating/overwriting it with one with no ruleDefaults 321 * section defined at all 322 */ 323 @Test public void testLoadValidTemplateWithSomeRemovedDefaults() throws Exception { 324 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_WITH_LIMITED_DEFAULTS.fileNameParameter, null); 325 326 RuleTemplateBo template = KEWServiceLocator.getRuleTemplateService().findByRuleTemplateName(TemplateParserGeneralFixture.VALID_TEMPLATE_WITH_LIMITED_DEFAULTS.ruleTemplateName); 327 328 // test the rule template options 329 List<RuleTemplateOptionBo> options = template.getRuleTemplateOptions(); 330 assertEquals(5, options.size()); 331 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_ACKNOWLEDGE_REQ, "false"); 332 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_APPROVE_REQ, "true"); 333 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_COMPLETE_REQ, "false"); 334 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_FYI_REQ, "false"); 335 assertOptionValue(template, KewApiConstants.ACTION_REQUEST_DEFAULT_CD, "A"); 336 337 // test those set in the default/template rule 338 RuleBaseValues ruleDefaults = KEWServiceLocator.getRuleService().findDefaultRuleByRuleTemplateId(template.getId()); 339 assertTrue(ruleDefaults.getTemplateRuleInd()); 340 assertEquals("a rule based on RuleTemplate_Valid_Some_Defaults", ruleDefaults.getDescription()); 341 assertFalse(ruleDefaults.isForceAction()); 342 assertFalse(ruleDefaults.isActive()); 343 assertEquals("01/11/2006", ruleDefaults.getFromDateString()); 344 assertEquals("01/01/2100", ruleDefaults.getToDateString()); 345 346 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_WITH_LIMITED_DEFAULTS_REMOVED.fileNameParameter, null); 347 348 template = KEWServiceLocator.getRuleTemplateService().findByRuleTemplateName(TemplateParserGeneralFixture.VALID_TEMPLATE_WITH_LIMITED_DEFAULTS_REMOVED.ruleTemplateName); 349 350 // we have removed all defaults, make sure they are gone... 351 // specifically that the default/template rule is GONE 352 assertNoDefaultsSpecified(template); 353 } 354 355 /** 356 * Tests loading a template with the minimal required ruleDefaults 357 */ 358 @Test public void testLoadValidTemplateWithDescriptionDefault() throws Exception { 359 testTemplate(TemplateParserGeneralFixture.VALID_TEMPLATE_WITH_DESCRIPTION_DEFAULT.fileNameParameter, null); 360 361 RuleTemplateBo template = KEWServiceLocator.getRuleTemplateService().findByRuleTemplateName(TemplateParserGeneralFixture.VALID_TEMPLATE_WITH_DESCRIPTION_DEFAULT.ruleTemplateName); 362 363 // test the rule template options; this one just has the instructions, nothing else 364 List<RuleTemplateOptionBo> options = template.getRuleTemplateOptions(); 365 assertEquals(0, options.size()); 366 367 // test those set in the default/template rule; everything default exception description which is specified 368 RuleBaseValues ruleDefaults = KEWServiceLocator.getRuleService().findDefaultRuleByRuleTemplateId(template.getId()); 369 assertTrue(ruleDefaults.getTemplateRuleInd()); 370 assertEquals("a description", ruleDefaults.getDescription()); 371 assertFalse(ruleDefaults.isForceAction()); 372 assertFalse(ruleDefaults.isActive()); 373 // activation date defaults to current time 374 assertNull(ruleDefaults.getFromDateValue()); 375 assertNotNull(ruleDefaults.getActivationDate()); 376 assertTrue(new Date(System.currentTimeMillis() - 10000).before(ruleDefaults.getActivationDate()) && new Date(System.currentTimeMillis() + 100).after(ruleDefaults.getActivationDate())); 377 assertNull(ruleDefaults.getToDateString()); 378 assertNull(ruleDefaults.getDeactivationDate()); 379 } 380 381 /** 382 * Asserts that if the defaults element is omitted, the correct defaults are set 383 * @param template the RuleTemplate to check 384 */ 385 protected void assertNoDefaultsSpecified(RuleTemplateBo template) { 386 // test the rule template options 387 assertDefaultTemplateOptions(template); 388 // test those set in the default/template rule 389 assertDefaultRuleDefaults(template); 390 } 391 392 /** 393 * Asserts that if the defaults element is omitted, the correct RuleTemplateOptions are set (or not set) 394 * @param template the RuleTemplate to check 395 */ 396 protected void assertDefaultTemplateOptions(RuleTemplateBo template) { 397 List<RuleTemplateOptionBo> options = template.getRuleTemplateOptions(); 398 assertEquals(0, options.size()); 399 } 400 401 /** 402 * Asserts that if the defaults element is omitted, the correct template rule defaults are set 403 * @param template the RuleTemplate to check 404 */ 405 protected void assertDefaultRuleDefaults(RuleTemplateBo template) { 406 RuleBaseValues ruleDefaults = KEWServiceLocator.getRuleService().findDefaultRuleByRuleTemplateId(template.getId()); 407 // if ruleDefaults were not specified, then the defaults/template rule should not have been created, or should have been deleted 408 assertNull(ruleDefaults); 409 } 410 411 /** 412 * Tests that the rule default template options are present. Must be kept in sync with defaults 413 * defined in RuleTemplate object 414 * @param ruleTemplate the ruleTemplate to check 415 * @param present whether the option should be present or not 416 */ 417 protected void assertRuleDefaultsArePresent(RuleTemplateBo template, boolean present) { 418 for (String key: RuleTemplateBo.DEFAULT_OPTION_KEYS) { 419 assertOptionPresence(template, key, present); 420 } 421 } 422 423 /** 424 * Tests that the rule default template options are present and set to null. Must be kept in sync with defaults 425 * defined in RuleTemplate object 426 * @param ruleTemplate the ruleTemplate to check 427 */ 428 protected void assertRuleDefaultsAreNull(RuleTemplateBo template) { 429 for (String key: RuleTemplateBo.DEFAULT_OPTION_KEYS) { 430 assertOptionValue(template, key, null); 431 } 432 } 433 434 /** 435 * Asserts that the rule template has a specific rule template option defined (with any value) 436 * @param template the rule template 437 * @param key the RuleTemplateOption key 438 * @param present whether the option should be present 439 */ 440 protected void assertOptionPresence(RuleTemplateBo template, String key, boolean present) { 441 RuleTemplateOptionBo option = template.getRuleTemplateOption(key); 442 if (present) { 443 if (option == null) fail("Rule template option '" + key + "' is not defined on template: " + template); 444 } else { 445 if (option != null) fail("Rule template option '" + key + "' is defined on template: " + template); 446 } 447 } 448 449 /** 450 * Asserts that the rule template has a specific rule template option defined with a specific value 451 * @param template the rule template 452 * @param key the RuleTemplateOption key 453 * @param value the RuleTemplateOption value 454 */ 455 protected void assertOptionValue(RuleTemplateBo template, String key, String value) { 456 RuleTemplateOptionBo option = template.getRuleTemplateOption(key); 457 if (option == null) fail("Rule template option '" + key + "' not defined on template: " + template); 458 assertEquals("Incorrect rule template option value for key '" + key + "'. Expected '" + value + "' but found '" + option.getValue() + "'", value, option.getValue()); 459 } 460 461 private enum TemplateParserAttributeActivationFixture { 462 ATTRIBUTE_1(new String[]{RULE_ATTRIBUTE_ONE}, new String[]{RULE_ATTRIBUTE_TWO}), 463 ATTRIBUTE_2(new String[]{}, new String[]{RULE_ATTRIBUTE_ONE,RULE_ATTRIBUTE_TWO}), 464 ATTRIBUTE_3(new String[]{RULE_ATTRIBUTE_ONE,RULE_ATTRIBUTE_THREE}, new String[]{RULE_ATTRIBUTE_TWO}), 465 ATTRIBUTE_4(new String[]{RULE_ATTRIBUTE_TWO,RULE_ATTRIBUTE_FIVE}, new String[]{RULE_ATTRIBUTE_ONE,RULE_ATTRIBUTE_THREE,RULE_ATTRIBUTE_FOUR,}), 466 ; 467 468 public static final String RULE_TEMPLATE_XML_FILENAME_PARM = "ActivationAttributesTest_"; 469 public static final String RULE_TEMPLATE_NAME = "RuleTemplate_Activation_Test"; 470 471 public String[] activeAttributeNames; 472 public String[] inactiveAttributeNames; 473 474 private TemplateParserAttributeActivationFixture(String[] activeAttributeNames, String[] inactiveAttributeNames) { 475 this.activeAttributeNames = activeAttributeNames; 476 this.inactiveAttributeNames = inactiveAttributeNames; 477 } 478 } 479 480 @Test public void testAttributeActivationAndRemoval() throws Exception { 481 RuleTemplateBo template = null; 482 int totalAttributes = -1; 483 for (TemplateParserAttributeActivationFixture currentEnum : TemplateParserAttributeActivationFixture.values()) { 484 String fileNameParameter = TemplateParserAttributeActivationFixture.RULE_TEMPLATE_XML_FILENAME_PARM + (currentEnum.ordinal() + 1); 485 testTemplate(fileNameParameter, null); 486 template = KEWServiceLocator.getRuleTemplateService().findByRuleTemplateName(TemplateParserAttributeActivationFixture.RULE_TEMPLATE_NAME); 487 assertEquals("Total Number of Active Attributes from Rule Template is wrong",currentEnum.activeAttributeNames.length,template.getActiveRuleTemplateAttributes().size()); 488 totalAttributes = currentEnum.activeAttributeNames.length + currentEnum.inactiveAttributeNames.length; 489 assertEquals("Total Number of Attributes from Rule Template is wrong",totalAttributes,template.getRuleTemplateAttributes().size()); 490 testListOfTemplateAttributes(template.getRuleTemplateAttributes(), currentEnum.activeAttributeNames, null); 491 testAllAttributesActive(template.getActiveRuleTemplateAttributes(), currentEnum.activeAttributeNames); 492 } 493 } 494 495 // test for ingesting active attribute 496 497 // test for ingesting inactive attribute 498 499 // test for ingesting active attribute and then reingest to test manual inactivation 500 501 // test for ingesting active attribute and then reingest to test automatic inactivation 502 503 }