001 /** 002 * Copyright 2005-2013 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.krad.service; 017 018 import org.junit.Test; 019 import org.kuali.rice.krad.UserSession; 020 import org.kuali.rice.krad.test.document.AccountRequestDocument; 021 import org.kuali.rice.krad.test.document.AccountRequestDocumentWithCyclicalReference; 022 import org.kuali.rice.krad.util.GlobalVariables; 023 import org.kuali.rice.krad.util.MessageMap; 024 import org.kuali.rice.krad.test.KRADTestCase; 025 026 import static org.junit.Assert.assertEquals; 027 028 /** 029 * This class tests the DictionaryValidationService (currently only recursive validation is tested). 030 * 031 * @author Kuali Rice Team (rice.collab@kuali.org) 032 * 033 */ 034 public class DictionaryValidationServiceTest extends KRADTestCase { 035 036 public DictionaryValidationServiceTest() { 037 } 038 039 @Override 040 public void setUp() throws Exception { 041 super.setUp(); 042 GlobalVariables.setMessageMap(new MessageMap()); 043 GlobalVariables.setUserSession(new UserSession("quickstart")); 044 } 045 046 @Override 047 public void tearDown() throws Exception { 048 GlobalVariables.setMessageMap(new MessageMap()); 049 GlobalVariables.setUserSession(null); 050 super.tearDown(); 051 } 052 053 /** 054 * This method tests recursive validation at a depth of zero 055 * 056 * @throws Exception 057 */ 058 @Test public void testRecursiveValidation() throws Exception { 059 AccountRequestDocument travelDocument = (AccountRequestDocument) KRADServiceLocatorWeb.getDocumentService().getNewDocument("AccountRequest"); 060 // set all required fields except 1 061 travelDocument.getDocumentHeader().setDocumentDescription("test document"); 062 travelDocument.setReason1("reason1"); 063 travelDocument.setReason2("reason2"); 064 travelDocument.setRequester("requester"); 065 066 GlobalVariables.setMessageMap(new MessageMap()); 067 KRADServiceLocatorWeb.getDictionaryValidationService().validateDocumentAndUpdatableReferencesRecursively(travelDocument, 0, true); 068 MessageMap errorMap = GlobalVariables.getMessageMap(); 069 int recursiveZeroMessageMapSize = errorMap.getNumberOfPropertiesWithErrors(); 070 071 // errors should be 'account type code' and 'request type' both being required 072 assertEquals("Number of errors found is incorrect", 2, recursiveZeroMessageMapSize); 073 } 074 075 /** 076 * This method tests recursive validation comparing multiple levels of recursion 077 * 078 * @throws Exception 079 */ 080 @Test public void testRecursiveValidationMultiple() throws Exception { 081 AccountRequestDocument travelDocument = (AccountRequestDocument) KRADServiceLocatorWeb.getDocumentService().getNewDocument("AccountRequest"); 082 // set all required fields except 1 083 travelDocument.getDocumentHeader().setDocumentDescription("test document"); 084 travelDocument.setReason1("reason1"); 085 travelDocument.setReason2("reason2"); 086 travelDocument.setRequester("requester"); 087 088 GlobalVariables.setMessageMap(new MessageMap()); 089 KRADServiceLocatorWeb.getDictionaryValidationService().validateDocumentAndUpdatableReferencesRecursively(travelDocument, 0, true); 090 MessageMap errorMap = GlobalVariables.getMessageMap(); 091 int recursiveZeroMessageMapSize = errorMap.getNumberOfPropertiesWithErrors(); 092 093 GlobalVariables.setMessageMap(new MessageMap()); 094 KRADServiceLocatorWeb.getDictionaryValidationService().validateDocumentAndUpdatableReferencesRecursively(travelDocument, 5, true); 095 MessageMap errorMap2 = GlobalVariables.getMessageMap(); 096 int recursiveFiveMessageMapSize = errorMap2.getNumberOfPropertiesWithErrors(); 097 098 assertEquals("We should get the same number of errors no matter how deeply we recursively validate for this document", recursiveZeroMessageMapSize, recursiveFiveMessageMapSize); 099 } 100 101 @Test public void testRecursiveValidationParentChildLoop() throws Exception { 102 AccountRequestDocumentWithCyclicalReference doc1 = (AccountRequestDocumentWithCyclicalReference) KRADServiceLocatorWeb.getDocumentService().getNewDocument("AccountRequest3"); 103 // set all required fields except 1 104 doc1.getDocumentHeader().setDocumentDescription("test document 1"); 105 doc1.setReason1("reason1"); 106 doc1.setReason2("reason2"); 107 doc1.setRequester("requester"); 108 109 AccountRequestDocumentWithCyclicalReference doc2 = (AccountRequestDocumentWithCyclicalReference) KRADServiceLocatorWeb.getDocumentService().getNewDocument("AccountRequest3"); 110 doc2.getDocumentHeader().setDocumentDescription("test document 2"); 111 doc2.setReason1("reason1a"); 112 doc2.setReason2("reason2a"); 113 doc2.setRequester("requester2"); 114 doc2.setParent(doc1); 115 doc1.setChild(doc2); 116 117 GlobalVariables.setMessageMap(new MessageMap()); 118 KRADServiceLocatorWeb.getDictionaryValidationService().validateDocumentAndUpdatableReferencesRecursively(doc1, 5, true); 119 MessageMap errorMap = GlobalVariables.getMessageMap(); 120 int recursiveFiveMessageMapSize = errorMap.getNumberOfPropertiesWithErrors(); 121 122 GlobalVariables.setMessageMap(new MessageMap()); 123 KRADServiceLocatorWeb.getDictionaryValidationService().validateDocumentAndUpdatableReferencesRecursively(doc1, 10, true); 124 MessageMap errorMap2 = GlobalVariables.getMessageMap(); 125 int recursiveTenMessageMapSize = errorMap2.getNumberOfPropertiesWithErrors(); 126 127 assertEquals("We should get the same number of errors no matter how deeply we recursively validate for this document", recursiveFiveMessageMapSize, recursiveTenMessageMapSize); 128 } 129 130 }