/* * 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 java.util.Collections; import java.util.List; import java.util.Map; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.kuali.kfs.coa.identity.KfsKimDocDelegateMember; import org.kuali.kfs.coa.identity.OrgReviewRole; import org.kuali.kfs.sys.KFSConstants; import org.kuali.kfs.sys.context.KualiTestBase; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.context.TestUtils; import org.kuali.kfs.sys.dataaccess.UnitTestSqlDao; import org.kuali.kfs.sys.fixture.UserNameFixture; import org.kuali.kfs.sys.identity.KfsKimAttributes; import org.kuali.rice.core.api.CoreApiServiceLocator; import org.kuali.rice.core.api.criteria.PredicateUtils; import org.kuali.rice.core.api.criteria.QueryByCriteria; import org.kuali.rice.core.api.datetime.DateTimeService; import org.kuali.rice.core.api.delegation.DelegationType; import org.kuali.rice.core.api.membership.MemberType; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.coreservice.api.CoreServiceApiServiceLocator; import org.kuali.rice.coreservice.impl.CoreServiceImplServiceLocator; import org.kuali.rice.kew.api.action.ActionRequestPolicy; import org.kuali.rice.kew.api.action.ActionRequestType; import org.kuali.rice.kim.api.KimConstants; import org.kuali.rice.kim.api.common.delegate.DelegateMember; import org.kuali.rice.kim.api.identity.Person; import org.kuali.rice.kim.api.identity.PersonService; import org.kuali.rice.kim.api.responsibility.Responsibility; import org.kuali.rice.kim.api.responsibility.ResponsibilityService; import org.kuali.rice.kim.api.role.Role; import org.kuali.rice.kim.api.role.RoleMember; import org.kuali.rice.kim.api.role.RoleMemberQueryResults; import org.kuali.rice.kim.api.role.RoleResponsibility; import org.kuali.rice.kim.api.role.RoleResponsibilityAction; import org.kuali.rice.kim.api.role.RoleService; import org.kuali.rice.kim.api.services.KimApiServiceLocator; import org.kuali.rice.kim.api.type.KimTypeInfoService; public class OrgReviewRoleTestBase extends KualiTestBase { protected OrgReviewRoleServiceImpl orgReviewRoleService; protected RoleService roleService; protected ResponsibilityService responsibilityService; protected KimTypeInfoService kimTypeInfoService; protected PersonService personService; protected DateTimeService dateTimeService; protected Role orgHierRole; protected Role acctHierRole; @Override protected void setUp() throws Exception { super.setUp(); orgReviewRoleService = (OrgReviewRoleServiceImpl) TestUtils.getUnproxiedService( "orgReviewRoleService" ); roleService = KimApiServiceLocator.getRoleService(); responsibilityService = KimApiServiceLocator.getResponsibilityService(); kimTypeInfoService = KimApiServiceLocator.getKimTypeInfoService(); personService = KimApiServiceLocator.getPersonService(); dateTimeService = CoreApiServiceLocator.getDateTimeService(); orgHierRole = roleService.getRoleByNamespaceCodeAndName(KFSConstants.SysKimApiConstants.ORGANIZATION_REVIEWER_ROLE_NAMESPACECODE, KFSConstants.SysKimApiConstants.ORGANIZATION_REVIEWER_ROLE_NAME); acctHierRole = roleService.getRoleByNamespaceCodeAndName(KFSConstants.SysKimApiConstants.ORGANIZATION_REVIEWER_ROLE_NAMESPACECODE, KFSConstants.SysKimApiConstants.ACCOUNTING_REVIEWER_ROLE_NAME); Logger.getLogger(OrgReviewRoleServiceImpl.class).setLevel(Level.DEBUG); } protected OrgReviewRole buildOrgHierData() { OrgReviewRole orr = new OrgReviewRole(); orr.setRoleId( orgHierRole.getId() ); orr.setKimTypeId( orgHierRole.getKimTypeId() ); orr.setRoleName(orgHierRole.getName()); orr.setNamespaceCode(orgHierRole.getNamespaceCode()); orr.setChartOfAccountsCode("BL"); orr.setOrganizationCode("PSY"); //orr.setOverrideCode(""); //orr.setFromAmount(KualiDecimal.ZERO); //orr.setToAmount(new KualiDecimal("5000.00")); orr.setFinancialSystemDocumentTypeCode("ACCT"); orr.setActionTypeCode(ActionRequestType.APPROVE.getCode()); orr.setPriorityNumber(""); orr.setActionPolicyCode(ActionRequestPolicy.FIRST.getCode()); orr.setForceAction(false); orr.setMemberTypeCode(MemberType.PRINCIPAL.getCode()); Person p = UserNameFixture.khuntley.getPerson(); orr.setPrincipalMemberPrincipalName(p.getPrincipalName()); orr.setPrincipalMemberPrincipalId(p.getPrincipalId()); //orr.setActiveFromDate(null); //orr.setActiveToDate(null); return orr; } protected OrgReviewRole buildAcctOrgHierData() { OrgReviewRole orr = new OrgReviewRole(); orr.setRoleId( acctHierRole.getId() ); orr.setKimTypeId( acctHierRole.getKimTypeId() ); orr.setRoleName(acctHierRole.getName()); orr.setNamespaceCode(acctHierRole.getNamespaceCode()); orr.setChartOfAccountsCode("BL"); orr.setOrganizationCode("PSY"); orr.setOverrideCode(""); orr.setFromAmount(KualiDecimal.ZERO); orr.setToAmount(new KualiDecimal("5000.00")); orr.setFinancialSystemDocumentTypeCode("DI"); orr.setActionTypeCode(ActionRequestType.APPROVE.getCode()); orr.setPriorityNumber("1"); orr.setActionPolicyCode(ActionRequestPolicy.FIRST.getCode()); orr.setForceAction(false); orr.setMemberTypeCode(MemberType.PRINCIPAL.getCode()); Person p = UserNameFixture.khuntley.getPerson(); orr.setPrincipalMemberPrincipalName(p.getPrincipalName()); orr.setPrincipalMemberPrincipalId(p.getPrincipalId()); //orr.setActiveFromDate(null); //orr.setActiveToDate(null); return orr; } protected OrgReviewRole buildOrgHierDelegateTypeData( DelegationType delegationType ) { OrgReviewRole orr = new OrgReviewRole(); orr.setDelegate(true); orr.setRoleId( orgHierRole.getId() ); orr.setKimTypeId( orgHierRole.getKimTypeId() ); orr.setRoleName(orgHierRole.getName()); orr.setNamespaceCode(orgHierRole.getNamespaceCode()); orr.setDelegationTypeCode(delegationType.getCode()); orr.setChartOfAccountsCode("BL"); orr.setOrganizationCode("PSY"); //orr.setOverrideCode(""); //orr.setFromAmount(KualiDecimal.ZERO); //orr.setToAmount(new KualiDecimal("5000.00")); orr.setFinancialSystemDocumentTypeCode("ACCT"); orr.setActionTypeCode(ActionRequestType.APPROVE.getCode()); orr.setPriorityNumber(""); orr.setActionPolicyCode(ActionRequestPolicy.FIRST.getCode()); orr.setForceAction(false); orr.setMemberTypeCode(MemberType.PRINCIPAL.getCode()); Person p = UserNameFixture.rorenfro.getPerson(); orr.setPrincipalMemberPrincipalName(p.getPrincipalName()); orr.setPrincipalMemberPrincipalId(p.getPrincipalId()); //orr.setActiveFromDate(null); //orr.setActiveToDate(null); return orr; } protected OrgReviewRole buildAcctHierDelegateTypeData( DelegationType delegationType ) { OrgReviewRole orr = new OrgReviewRole(); orr.setDelegate(true); orr.setRoleId( orgHierRole.getId() ); orr.setKimTypeId( orgHierRole.getKimTypeId() ); orr.setRoleName(orgHierRole.getName()); orr.setNamespaceCode(orgHierRole.getNamespaceCode()); orr.setDelegationTypeCode(delegationType.getCode()); orr.setChartOfAccountsCode("BL"); orr.setOrganizationCode("PSY"); orr.setOverrideCode(""); // delegates don't have amounts // orr.setFromAmount(KualiDecimal.ZERO); // orr.setToAmount(new KualiDecimal("5000.00")); orr.setFinancialSystemDocumentTypeCode("DI"); orr.setActionTypeCode(ActionRequestType.APPROVE.getCode()); orr.setPriorityNumber(""); orr.setActionPolicyCode(ActionRequestPolicy.FIRST.getCode()); orr.setForceAction(false); orr.setMemberTypeCode(MemberType.PRINCIPAL.getCode()); Person p = UserNameFixture.rorenfro.getPerson(); orr.setPrincipalMemberPrincipalName(p.getPrincipalName()); orr.setPrincipalMemberPrincipalId(p.getPrincipalId()); //orr.setActiveFromDate(null); //orr.setActiveToDate(null); return orr; } protected int getNumberOfResponsibilitiesWithRoleMemberLevelActions( Role role ) { List<RoleResponsibility> roleResponsibilities = roleService.getRoleResponsibilities(role.getId()); assertNotNull( "There should have been responsibilities assigned to the role (was null)", roleResponsibilities ); assertFalse( "There should have been responsibilities assigned to the role", roleResponsibilities.isEmpty() ); int num = 0; for ( RoleResponsibility rr : roleResponsibilities ) { Responsibility r = responsibilityService.getResponsibility(rr.getResponsibilityId()); if ( Boolean.parseBoolean( r.getAttributes().get(KimConstants.AttributeConstants.ACTION_DETAILS_AT_ROLE_MEMBER_LEVEL) ) ) { num++; } } return num; } protected void checkForMatchingRoleMember( OrgReviewRole orr, Role role ) { RoleMemberQueryResults roleMembers = roleService.findRoleMembers(QueryByCriteria.Builder.fromPredicates( PredicateUtils.convertMapToPredicate(Collections.singletonMap(KimConstants.PrimaryKeyConstants.ID, orr.getRoleMemberId())))); assertNotNull( "Returned role members object should not have been null", roleMembers ); assertEquals( "One result should have been returned", 1, roleMembers.getResults().size() ); RoleMember rm = roleMembers.getResults().get(0); matchOrgReviewRoleToRoleMember(orr, rm, role); } protected void checkForMatchingDelegationMember( OrgReviewRole orr, Role role ) { DelegateMember dm = roleService.getDelegationMemberById(orr.getDelegationMemberId()); assertNotNull( "Returned delegation member object should not have been null", dm ); matchOrgReviewRoleToDelegationMember(orr, dm, role); } protected void matchOrgReviewRoleToRoleMember( OrgReviewRole orr, RoleMember rm, Role role ) { System.err.println( "RoleMember: " + rm ); System.err.println( "OrgReviewRole: " + orr ); assertEquals( "RoleMember id should be that requested", orr.getRoleMemberId(), rm.getId() ); assertEquals( "RoleMember's ID should match the inputs", orr.getPrincipalMemberPrincipalId(), rm.getMemberId() ); assertEquals( "Role should be " + role.getName(), role.getId(), rm.getRoleId() ); Map<String,String> attr = rm.getAttributes(); assertNotNull( "The role member attributes should not have been null", rm.getAttributes() ); assertEquals("Chart attrib is incorrect", orr.getChartOfAccountsCode(), attr.get(KfsKimAttributes.CHART_OF_ACCOUNTS_CODE)); assertEquals("Org attrib is incorrect", orr.getOrganizationCode(), attr.get(KfsKimAttributes.ORGANIZATION_CODE)); assertEquals("Doc Type attrib is incorrect", orr.getFinancialSystemDocumentTypeCode(), attr.get(KimConstants.AttributeConstants.DOCUMENT_TYPE_NAME)); assertEquals("From amount is incorrect", orr.getFromAmountStr(), attr.get(KfsKimAttributes.FROM_AMOUNT)); assertEquals("To amount is incorrect", orr.getToAmountStr(), attr.get(KfsKimAttributes.TO_AMOUNT)); List<RoleResponsibilityAction> respActions = KimApiServiceLocator.getRoleService().getRoleMemberResponsibilityActions(rm.getId()); assertNotNull( "Role resp actions should not be null", respActions ); assertFalse( "Role resp actions should not be empty", respActions.isEmpty() ); assertEquals( "There should only be one RoleRespAction", 1, respActions.size() ); RoleResponsibilityAction rra = respActions.get(0); assertEquals( "The responsibility type does not match", orr.getActionTypeCode(), rra.getActionTypeCode() ); assertEquals( "The responsibility policy does not match", orr.getActionPolicyCode(), rra.getActionPolicyCode() ); assertEquals( "The role resp ID is not correct", "*", rra.getRoleResponsibilityId() ); } protected void matchOrgReviewRoleToDelegationMember( OrgReviewRole orr, DelegateMember dm, Role role ) { System.err.println( "DelegateMember: " + dm ); System.err.println( "OrgReviewRole: " + orr ); assertEquals( "DelegateMember id should be that requested", orr.getDelegationMemberId(), dm.getDelegationMemberId() ); assertEquals( "DelegateMember's ID should match the inputs", orr.getPrincipalMemberPrincipalId(), dm.getMemberId() ); assertEquals( "DelegateMember's role member ID should match the inputs", orr.getRoleMemberId(), dm.getRoleMemberId() ); Map<String,String> attr = dm.getAttributes(); assertNotNull( "The delegate member's attributes should not have been null", dm.getAttributes() ); assertEquals("Chart attrib is incorrect", orr.getChartOfAccountsCode(), attr.get(KfsKimAttributes.CHART_OF_ACCOUNTS_CODE)); assertEquals("Org attrib is incorrect", orr.getOrganizationCode(), attr.get(KfsKimAttributes.ORGANIZATION_CODE)); assertEquals("Doc Type attrib is incorrect", orr.getFinancialSystemDocumentTypeCode(), attr.get(KimConstants.AttributeConstants.DOCUMENT_TYPE_NAME)); assertEquals("From amount is incorrect", orr.getFromAmountStr(), attr.get(KfsKimAttributes.FROM_AMOUNT)); assertEquals("To amount is incorrect", orr.getToAmountStr(), attr.get(KfsKimAttributes.TO_AMOUNT)); } protected void dumpQueryResultsToErr( String sql ) { List<Map<String,?>> queryResults = SpringContext.getBean(UnitTestSqlDao.class,"riceUnitTestSqlDao").sqlSelect(sql); System.err.println( sql ); for ( Map<String,?> row : queryResults ) { System.err.println( row ); } } }