/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.coa.service.impl; import static org.kuali.kfs.sys.fixture.UserNameFixture.khuntley; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.kuali.kfs.coa.identity.OrgReviewRole; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.KFSPropertyConstants; import org.kuali.kfs.sys.businessobject.FinancialSystemDocumentHeader; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.rice.core.api.delegation.DelegationType; import org.kuali.rice.kew.api.action.ActionRequestType; import org.kuali.rice.kew.api.document.DocumentStatus; import org.kuali.rice.kim.api.common.delegate.DelegateMember; import org.kuali.rice.kim.api.common.delegate.DelegateType; import org.kuali.rice.krad.service.BusinessObjectService; import org.kuali.rice.krad.util.GlobalVariables; @ConfigureContext(session = khuntley) public class OrgReviewRoleServiceImplTest extends OrgReviewRoleTestBase { @Override protected void setUp() throws Exception { super.setUp(); Logger.getLogger(OrgReviewRoleServiceImpl.class).setLevel(Level.DEBUG); Logger.getLogger("log4j.logger.p6spy").setLevel(Level.INFO); } public void testSaveOrgReviewRoleToKim_OrgReview_New() throws Exception { // don't run this test if there are any enroute documents since the test may fail in that case if (!enrouteDocumentsExist()) { OrgReviewRole orr = buildOrgHierData(); orr.setEdit(false); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertNotNull( "OrgReviewRole roleMemberId should not be null.", orr.getRoleMemberId() ); assertFalse( "OrgReviewRole roleMemberId should not have been blank.", orr.getRoleMemberId().equals("") ); // now, look in KIM for the role checkForMatchingRoleMember(orr, orgHierRole); } } public void testSaveOrgReviewRoleToKim_AcctReview_New() throws Exception { // don't run this test if there are any enroute documents since the test may fail in that case if (!enrouteDocumentsExist()) { OrgReviewRole orr = buildAcctOrgHierData(); orr.setEdit(false); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertNotNull( "OrgReviewRole roleMemberId should not be null.", orr.getRoleMemberId() ); assertFalse( "OrgReviewRole roleMemberId should not have been blank.", orr.getRoleMemberId().equals("") ); // now, look in KIM for the role checkForMatchingRoleMember(orr, acctHierRole); } } public void testSaveOrgReviewRoleToKim_OrgReview_Edit() throws Exception { // don't run this test if there are any enroute documents since the test may fail in that case if (!enrouteDocumentsExist()) { System.err.println( "Creating Role Entry to edit"); OrgReviewRole orr = buildOrgHierData(); orr.setEdit(false); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertNotNull( "OrgReviewRole roleMemberId should not be null.", orr.getRoleMemberId() ); assertFalse( "OrgReviewRole roleMemberId should not have been blank.", orr.getRoleMemberId().equals("") ); String createdRoleMemberId = orr.getRoleMemberId(); System.err.println("Checking created role"); checkForMatchingRoleMember(orr, orgHierRole); System.err.println("Creating update to just-created record"); orr = buildOrgHierData(); orr.setEdit(true); orr.setORMId(createdRoleMemberId); orr.setRoleMemberId(createdRoleMemberId); orr.setActionTypeCode(ActionRequestType.ACKNOWLEDGE.getCode()); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertEquals( "Role member ID should not have changed: ", createdRoleMemberId, orr.getRoleMemberId() ); System.err.println("Retrieving role member record"); checkForMatchingRoleMember(orr, orgHierRole); } } public void testSaveOrgReviewRoleToKim_AcctReview_Edit() throws Exception { // don't run this test if there are any enroute documents since the test may fail in that case if (!enrouteDocumentsExist()) { System.err.println( "Creating Role Entry to edit"); OrgReviewRole orr = buildAcctOrgHierData(); orr.setEdit(false); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertNotNull( "OrgReviewRole roleMemberId should not be null.", orr.getRoleMemberId() ); assertFalse( "OrgReviewRole roleMemberId should not have been blank.", orr.getRoleMemberId().equals("") ); String createdRoleMemberId = orr.getRoleMemberId(); System.err.println("Checking created role"); checkForMatchingRoleMember(orr, acctHierRole); System.err.println("Creating update to just-created record"); orr = buildAcctOrgHierData(); orr.setEdit(true); orr.setORMId(createdRoleMemberId); orr.setRoleMemberId(createdRoleMemberId); orr.setActionTypeCode(ActionRequestType.ACKNOWLEDGE.getCode()); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertEquals( "Role member ID should not have changed: ", createdRoleMemberId, orr.getRoleMemberId() ); System.err.println("Retrieving role member record"); checkForMatchingRoleMember(orr, acctHierRole); } } public void testSaveOrgReviewRoleToKim_OrgReview_Delegate_New() throws Exception { // don't run this test if there are any enroute documents since the test may fail in that case if (!enrouteDocumentsExist()) { // FIRST - create a known role member OrgReviewRole orr = buildOrgHierData(); orr.setEdit(false); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertNotNull( "OrgReviewRole roleMemberId should not be null.", orr.getRoleMemberId() ); assertFalse( "OrgReviewRole roleMemberId should not have been blank.", orr.getRoleMemberId().equals("") ); // now, look in KIM for the role checkForMatchingRoleMember(orr, orgHierRole); String createdRoleMemberId = orr.getRoleMemberId(); orr = buildOrgHierDelegateTypeData( DelegationType.PRIMARY ); orr.setEdit(false); orr.setRoleMemberId(createdRoleMemberId); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertNotNull( "OrgReviewRole delegationMemberId should not be null.", orr.getDelegationMemberId() ); assertFalse( "OrgReviewRole delegationMemberId should not have been blank.", orr.getDelegationMemberId().equals("") ); // ensure the delegate type now exists DelegateType existingDelegateType = roleService.getDelegateTypeByRoleIdAndDelegateTypeCode(orr.getRoleId(), DelegationType.fromCode(orr.getDelegationTypeCode())); assertNotNull( "Unable to retrieve delegate type object from the KIM Service", existingDelegateType ); DelegateMember dm = roleService.getDelegationMemberById(orr.getDelegationMemberId()); assertNotNull( "Unable to retrieve delegate member with given ID: " + dm.getDelegationMemberId(), dm ); checkForMatchingDelegationMember(orr, orgHierRole); } } public void testSaveOrgReviewRoleToKim_AcctReview_Delegate_New() throws Exception { // don't run this test if there are any enroute documents since the test may fail in that case if (!enrouteDocumentsExist()) { // FIRST - create a known role member OrgReviewRole orr = buildAcctOrgHierData(); orr.setEdit(false); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertNotNull( "OrgReviewRole roleMemberId should not be null.", orr.getRoleMemberId() ); assertFalse( "OrgReviewRole roleMemberId should not have been blank.", orr.getRoleMemberId().equals("") ); // now, look in KIM for the role checkForMatchingRoleMember(orr, acctHierRole); String createdRoleMemberId = orr.getRoleMemberId(); orr = buildAcctHierDelegateTypeData( DelegationType.PRIMARY ); orr.setEdit(false); orr.setRoleMemberId(createdRoleMemberId); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertNotNull( "OrgReviewRole delegationMemberId should not be null.", orr.getDelegationMemberId() ); assertFalse( "OrgReviewRole delegationMemberId should not have been blank.", orr.getDelegationMemberId().equals("") ); // ensure the delegate type now exists DelegateType existingDelegateType = roleService.getDelegateTypeByRoleIdAndDelegateTypeCode(orr.getRoleId(), DelegationType.fromCode(orr.getDelegationTypeCode())); assertNotNull( "Unable to retrieve delegate type object from the KIM Service", existingDelegateType ); DelegateMember dm = roleService.getDelegationMemberById(orr.getDelegationMemberId()); assertNotNull( "Unable to retrieve delegate member with given ID: " + dm.getDelegationMemberId(), dm ); checkForMatchingDelegationMember(orr, acctHierRole); } } public void testSaveOrgReviewRoleToKim_OrgReview_Delegate_Edit() throws Exception { // don't run this test if there are any enroute documents since the test may fail in that case if (!enrouteDocumentsExist()) { // Create a org role and delegation OrgReviewRole orr = buildOrgHierData(); orr.setEdit(false); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertNotNull( "OrgReviewRole roleMemberId should not be null.", orr.getRoleMemberId() ); // add a delegation String createdRoleMemberId = orr.getRoleMemberId(); orr = buildOrgHierDelegateTypeData( DelegationType.PRIMARY ); orr.setEdit(false); orr.setRoleMemberId(createdRoleMemberId); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertNotNull( "OrgReviewRole delegationMemberId should not be null.", orr.getDelegationMemberId() ); dumpQueryResultsToErr("SELECT * FROM KRIM_DLGN_T WHERE role_id = '7'"); // check that the delegate member exists DelegateMember dm = roleService.getDelegationMemberById(orr.getDelegationMemberId()); assertNotNull( "Unable to retrieve delegation from KIM after save", dm ); System.err.println( "Saved Delegation Member: " + dm ); String originalDelegationMemberId = dm.getDelegationMemberId(); // edit the delegation orr = new OrgReviewRole(); orgReviewRoleService.populateOrgReviewRoleFromDelegationMember(orr, createdRoleMemberId, dm.getDelegationMemberId()); orr.setEdit(true); assertEquals( "Document type on the retrieved DelegationMember was not correct","ACCT",orr.getFinancialSystemDocumentTypeCode()); orr.setFinancialSystemDocumentTypeCode( "SACC" ); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertNotNull( "OrgReviewRole delegationMemberId should not be null.", orr.getDelegationMemberId() ); dm = roleService.getDelegationMemberById(orr.getDelegationMemberId()); System.err.println( "Updated Delegation Member: " + dm ); assertNotNull( "Unable to retrieve delegation from KIM after save", dm ); dumpQueryResultsToErr("SELECT * FROM KRIM_DLGN_MBR_T WHERE dlgn_mbr_id IN ( '" + originalDelegationMemberId + "', '" + dm.getDelegationMemberId() + "' )"); assertEquals( "The delegationMemberId should not have changed", originalDelegationMemberId, dm.getDelegationMemberId() ); assertEquals( "Document type on the retrieved DelegationMember was not correct","SACC",orr.getFinancialSystemDocumentTypeCode()); } } public void testSaveOrgReviewRoleToKim_AcctReview_Delegate_Edit() throws Exception { // don't run this test if there are any enroute documents since the test may fail in that case if (!enrouteDocumentsExist()) { // Create a org role and delegation OrgReviewRole orr = buildAcctOrgHierData(); orr.setEdit(false); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertNotNull( "OrgReviewRole roleMemberId should not be null.", orr.getRoleMemberId() ); // add a delegation String createdRoleMemberId = orr.getRoleMemberId(); orr = buildAcctHierDelegateTypeData( DelegationType.PRIMARY ); orr.setEdit(false); orr.setRoleMemberId(createdRoleMemberId); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertNotNull( "OrgReviewRole delegationMemberId should not be null.", orr.getDelegationMemberId() ); // check that the delegate member exists DelegateMember dm = roleService.getDelegationMemberById(orr.getDelegationMemberId()); assertNotNull( "Unable to retrieve delegation from KIM after save", dm ); String originalDelegationMemberId = dm.getDelegationMemberId(); // edit the delegation orr = new OrgReviewRole(); orgReviewRoleService.populateOrgReviewRoleFromDelegationMember(orr, createdRoleMemberId, dm.getDelegationMemberId()); orr.setEdit(true); assertEquals( "Document type on the retrieved DelegationMember was not correct","DI",orr.getFinancialSystemDocumentTypeCode()); orr.setFinancialSystemDocumentTypeCode( "GEC" ); orgReviewRoleService.saveOrgReviewRoleToKim(orr); assertNotNull( "OrgReviewRole delegationMemberId should not be null.", orr.getDelegationMemberId() ); dm = roleService.getDelegationMemberById(orr.getDelegationMemberId()); assertNotNull( "Unable to retrieve delegation from KIM after save", dm ); assertEquals( "The delegationMemberId should not have changed", originalDelegationMemberId, dm.getDelegationMemberId() ); assertEquals( "Document type on the retrieved DelegationMember was not correct","GEC",orr.getFinancialSystemDocumentTypeCode()); } } public void testIsValidDocumentTypeForOrgReview() { assertTrue( "DI should have been valid", orgReviewRoleService.isValidDocumentTypeForOrgReview("DI") ); assertTrue( "ACCT should have been valid", orgReviewRoleService.isValidDocumentTypeForOrgReview("ACCT") ); assertFalse( "COAT should not have been valid", orgReviewRoleService.isValidDocumentTypeForOrgReview("COAT") ); } public void testValidateDocumentType() { orgReviewRoleService.validateDocumentType("COAT"); assertFalse( "An error should have been added to the MessageMap for the COAT document type: " + dumpMessageMapErrors(), GlobalVariables.getMessageMap().getErrorMessagesForProperty(OrgReviewRole.DOC_TYPE_NAME_FIELD_NAME).isEmpty() ); } public void testHasOrganizationHierarchy() { assertTrue( "ACCT should have org hierarchy", orgReviewRoleService.hasOrganizationHierarchy("ACCT")); assertFalse( "DI should not have org hierarchy", orgReviewRoleService.hasOrganizationHierarchy("DI")); assertFalse( "COAT should not have org hierarchy", orgReviewRoleService.hasOrganizationHierarchy("COAT")); } public void testHasAccountingOrganizationHierarchy() { assertFalse( "ACCT should not have accounting org hierarchy", orgReviewRoleService.hasAccountingOrganizationHierarchy("ACCT")); assertTrue( "DI should have accounting org hierarchy", orgReviewRoleService.hasAccountingOrganizationHierarchy("DI")); assertFalse( "COAT should not have accounting org hierarchy", orgReviewRoleService.hasAccountingOrganizationHierarchy("COAT")); } /** * Look for any documents (created by optional unit tests) that may be at the accounting organization hierarchy or * organization hierarchy route nodes so we can bypass running tests that may fail * @return whether there are any enroute documents or not */ protected boolean enrouteDocumentsExist() { final BusinessObjectService boService = SpringContext.getBean(BusinessObjectService.class); Map<String, Object> fieldValues = new HashMap<String, Object>(); fieldValues.put(KFSPropertyConstants.WORKFLOW_DOCUMENT_STATUS_CODE, DocumentStatus.ENROUTE.getCode()); int count = boService.countMatching(FinancialSystemDocumentHeader.class, fieldValues); return count > 0; } }