/* * 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.document; import java.util.HashMap; import java.util.List; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.kuali.kfs.coa.identity.OrgReviewRole; import org.kuali.kfs.coa.service.impl.OrgReviewRoleServiceImpl; import org.kuali.kfs.coa.service.impl.OrgReviewRoleTestBase; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.fixture.UserNameFixture; import org.kuali.rice.core.api.delegation.DelegationType; import org.kuali.rice.kns.document.MaintenanceDocument; import org.kuali.rice.kns.maintenance.Maintainable; import org.kuali.rice.kns.web.ui.Field; import org.kuali.rice.kns.web.ui.Row; import org.kuali.rice.kns.web.ui.Section; import org.kuali.rice.krad.bo.BusinessObject; import org.kuali.rice.krad.bo.PersistableBusinessObject; import org.kuali.rice.krad.service.BusinessObjectService; import org.kuali.rice.krad.service.KRADServiceLocatorWeb; import org.kuali.rice.krad.util.KRADConstants; import org.kuali.rice.krad.util.ObjectUtils; @ConfigureContext(session=UserNameFixture.khuntley) public class OrgReviewRoleMaintainableImplTest extends OrgReviewRoleTestBase { protected static final String ORG_REVIEW_DOC_TYPE = "ORR"; protected OrgReviewRoleMaintainableImpl newMaint; protected OrgReviewRoleMaintainableImpl oldMaint; protected OrgReviewRole orgHierOrgReviewRole; @Override protected void setUp() throws Exception { super.setUp(); Logger.getLogger(OrgReviewRoleServiceImpl.class).setLevel(Level.DEBUG); Logger.getLogger(OrgReviewRoleMaintainableImpl.class).setLevel(Level.DEBUG); newMaint = new OrgReviewRoleMaintainableImpl(); oldMaint = new OrgReviewRoleMaintainableImpl(); orgHierOrgReviewRole = buildOrgHierData(); } public void testPrepareFieldsCommon() { Field f = new Field(OrgReviewRole.REVIEW_ROLES_INDICATOR_FIELD_NAME, "This Value Doesn't Matter"); newMaint.prepareFieldsCommon(f, true, false); assertTrue( "Field should have been read only after prepareFieldsCommon", f.isReadOnly() ); } public void testPrepareBusinessObject_OrgHier_RoleMember_New() { orgHierOrgReviewRole.setMethodToCall(""); newMaint.prepareBusinessObject(orgHierOrgReviewRole); assertFalse( "ORR should not be in edit mode", orgHierOrgReviewRole.isEdit() ); assertFalse( "ORR should not be in copy mode", orgHierOrgReviewRole.isCopy() ); assertFalse( "ORR should not think it's a delegate", orgHierOrgReviewRole.isDelegate() ); // assertFalse( "ORR should not be in edit role member mode", orgHierOrgReviewRole.isEditRoleMember() ); // assertFalse( "ORR should not be in edit delegate member mode", orgHierOrgReviewRole.isEditDelegation() ); // assertFalse( "ORR should not be in create delegate member mode", orgHierOrgReviewRole.isCreateDelegation() ); assertTrue( "ORR should be in new role member mode", orgHierOrgReviewRole.isCreateRoleMember() ); } public void testPrepareBusinessObject_OrgHier_RoleMember_Edit() { // since an edit, we need to save it first, since the document will // attempt to retrieve it from the database orgHierOrgReviewRole.setEdit(false); orgReviewRoleService.saveOrgReviewRoleToKim(orgHierOrgReviewRole); orgHierOrgReviewRole.setMethodToCall(KRADConstants.MAINTENANCE_EDIT_METHOD_TO_CALL); newMaint.prepareBusinessObject(orgHierOrgReviewRole); assertTrue( "ORR should be in edit mode", orgHierOrgReviewRole.isEdit() ); assertFalse( "ORR should not be in copy mode", orgHierOrgReviewRole.isCopy() ); assertFalse( "ORR should not think it's a delegate", orgHierOrgReviewRole.isDelegate() ); assertTrue( "ORR should be in edit role member mode", orgHierOrgReviewRole.isEditRoleMember() ); assertFalse( "ORR should not be in new role member mode", orgHierOrgReviewRole.isCreateRoleMember() ); assertEquals( "The marker ORMId value should be blank", "", orgHierOrgReviewRole.getORMId() ); assertFalse( "The roleMemberId should not have been blank", StringUtils.isBlank(orgHierOrgReviewRole.getRoleMemberId() ) ); } public void testPrepareBusinessObject_OrgHier_RoleMember_Copy() { // since an copy, we need to save it first, since the document will // attempt to retrieve it from the database orgHierOrgReviewRole.setEdit(false); orgReviewRoleService.saveOrgReviewRoleToKim(orgHierOrgReviewRole); orgHierOrgReviewRole.setMethodToCall(KRADConstants.MAINTENANCE_COPY_METHOD_TO_CALL); newMaint.prepareBusinessObject(orgHierOrgReviewRole); assertFalse( "ORR should not be in edit mode", orgHierOrgReviewRole.isEdit() ); assertTrue( "ORR should be in copy mode", orgHierOrgReviewRole.isCopy() ); assertFalse( "ORR should not think it's a delegate", orgHierOrgReviewRole.isDelegate() ); assertTrue( "ORR should be in copy role member mode", orgHierOrgReviewRole.isCopyRoleMember() ); assertFalse( "ORR should not be in new role member mode", orgHierOrgReviewRole.isCreateRoleMember() ); assertEquals( "The marker ORMId value should be blank", "", orgHierOrgReviewRole.getORMId() ); assertEquals( "The roleMemberId should have been blank", "", orgHierOrgReviewRole.getRoleMemberId() ); } // public void testPrepareBusinessObject_OrgHier_Delegate_New() throws Exception { // fail("Not yet implemented"); // } // // public void testPrepareBusinessObject_OrgHier_Delegate_Edit() { // fail("Not yet implemented"); // } // // public void testPrepareBusinessObject_OrgHier_Delegate_Copy() { // fail("Not yet implemented"); // } // // public void testPrepareBusinessObject_AcctHier_New() { // fail("Not yet implemented"); // } protected static String[] FIELDS_TO_IGNORE = { "roleMemberId", "delegationMemberId" }; protected static String[] ORG_HIER_READ_ONLY_PROP_NAMES = { OrgReviewRole.FROM_AMOUNT_FIELD_NAME, OrgReviewRole.TO_AMOUNT_FIELD_NAME, OrgReviewRole.OVERRIDE_CODE_FIELD_NAME }; protected static String[] EDIT_READ_ONLY_PROP_NAMES = { OrgReviewRole.REVIEW_ROLES_INDICATOR_FIELD_NAME, OrgReviewRole.CHART_CODE_FIELD_NAME, OrgReviewRole.ORG_CODE_FIELD_NAME, OrgReviewRole.DOC_TYPE_NAME_FIELD_NAME, OrgReviewRole.PRINCIPAL_NAME_FIELD_NAME, OrgReviewRole.GROUP_NAME_FIELD_NAME, OrgReviewRole.GROUP_NAME_FIELD_NAMESPACE_CODE, OrgReviewRole.ROLE_NAME_FIELD_NAME, OrgReviewRole.ROLE_NAME_FIELD_NAMESPACE_CODE }; protected static String[] DELEGATE_READ_ONLY_PROP_NAMES = { OrgReviewRole.REVIEW_ROLES_INDICATOR_FIELD_NAME, OrgReviewRole.CHART_CODE_FIELD_NAME, OrgReviewRole.ORG_CODE_FIELD_NAME, OrgReviewRole.DOC_TYPE_NAME_FIELD_NAME, OrgReviewRole.FORCE_ACTION_FIELD_NAME, OrgReviewRole.ACTION_TYPE_CODE_FIELD_NAME, OrgReviewRole.ACTION_POLICY_CODE_FIELD_NAME, OrgReviewRole.PRIORITY_CODE_FIELD_NAME }; public void testGetSections_OrgHier_RoleMember_New() throws Exception { MaintenanceDocument document = createNewDocument_RoleMember(); // populate the old side (should be blank) List<Section> oldSections = document.getNewMaintainableObject().getSections(document, null); // populate the new side List<Section> newSections = document.getNewMaintainableObject().getSections(document, document.getNewMaintainableObject()); for ( Section section : newSections ) { for ( Row row : section.getRows() ) { for ( Field field : row.getFields() ) { if ( ArrayUtils.contains(FIELDS_TO_IGNORE, field.getPropertyName()) ) { continue; } if ( field.getPropertyName().equals(OrgReviewRole.DELEGATION_TYPE_CODE) ) { assertEquals( "Delegation type Field should have been hidden: ", Field.HIDDEN, field.getFieldType() ); } else { assertFalse( field.getPropertyName() + " should have been editable and not hidden", field.isReadOnly() || field.getFieldType().equals(Field.HIDDEN) ); } } } } } public void testGetSections_OrgHier_RoleMember_Copy() throws Exception { orgReviewRoleService.saveOrgReviewRoleToKim(orgHierOrgReviewRole); MaintenanceDocument document = createCopyDocument_OrgHier_RoleMember(orgHierOrgReviewRole.getRoleMemberId()); // populate the old side (should be blank) List<Section> oldSections = document.getNewMaintainableObject().getSections(document, null); // populate the new side List<Section> newSections = document.getNewMaintainableObject().getSections(document, document.getNewMaintainableObject()); for ( Section section : newSections ) { for ( Row row : section.getRows() ) { for ( Field field : row.getFields() ) { if ( ArrayUtils.contains(FIELDS_TO_IGNORE, field.getPropertyName()) ) { continue; } if ( field.getPropertyName().equals(OrgReviewRole.DELEGATION_TYPE_CODE) ) { assertEquals( "Delegation type Field should have been hidden: ", Field.HIDDEN, field.getFieldType() ); } else { assertFalse( field.getPropertyName() + " should have been editable and not hidden", field.isReadOnly() || field.getFieldType().equals(Field.HIDDEN) ); } } } } } public void testGetSections_OrgHier_Delegate_New() throws Exception { // create an org hierarchy role member on which to create a delegation orgHierOrgReviewRole.setEdit(false); orgReviewRoleService.saveOrgReviewRoleToKim(orgHierOrgReviewRole); MaintenanceDocument document = createNewDocument_OrgHier_Delegation( orgHierOrgReviewRole.getRoleMemberId() ); // populate the old side (should be blank) List<Section> oldSections = document.getNewMaintainableObject().getSections(document, null); // populate the new side List<Section> newSections = document.getNewMaintainableObject().getSections(document, document.getNewMaintainableObject()); for ( Section section : newSections ) { for ( Row row : section.getRows() ) { for ( Field field : row.getFields() ) { if ( ArrayUtils.contains(FIELDS_TO_IGNORE, field.getPropertyName()) ) { continue; } boolean fieldChecked = false; for ( String readOnlyPropertyName : ORG_HIER_READ_ONLY_PROP_NAMES ) { if ( field.getPropertyName().equals(readOnlyPropertyName) ) { assertTrue( readOnlyPropertyName + " should have been read only", field.isReadOnly() ); fieldChecked = true; } } for ( String fieldName : DELEGATE_READ_ONLY_PROP_NAMES ) { if ( StringUtils.equals(fieldName, field.getPropertyName() ) ) { assertTrue( fieldName + " should have been read only", field.isReadOnly() ); fieldChecked = true; } } if ( !fieldChecked ) { assertFalse( field.getPropertyName() + " should not be read only.", field.isReadOnly() ); assertFalse( field.getPropertyName() + " should not be hidden", field.getFieldType().equals(Field.HIDDEN) ); } } } } } public void testGetSections_OrgHier_RoleMember_Edit() throws Exception { MaintenanceDocument document = createEditDocument_OrgHier_RoleMember( buildOrgHierData() ); // populate the old side (should be blank) List<Section> oldSections = document.getNewMaintainableObject().getSections(document, null); // populate the new side List<Section> newSections = document.getNewMaintainableObject().getSections(document, document.getNewMaintainableObject()); for ( Section section : newSections ) { for ( Row row : section.getRows() ) { for ( Field field : row.getFields() ) { if ( ArrayUtils.contains(FIELDS_TO_IGNORE, field.getPropertyName()) ) { continue; } boolean fieldChecked = false; if ( field.getPropertyName().equals(OrgReviewRole.DELEGATION_TYPE_CODE) ) { assertEquals( "Delegation type Field should have been hidden: ", Field.HIDDEN, field.getFieldType() ); fieldChecked = true; } for ( String fieldName : EDIT_READ_ONLY_PROP_NAMES ) { if ( StringUtils.equals(fieldName, field.getPropertyName() ) ) { assertTrue( fieldName + " should have been read only", field.isReadOnly() ); fieldChecked = true; } } for ( String readOnlyPropertyName : ORG_HIER_READ_ONLY_PROP_NAMES ) { if ( field.getPropertyName().equals(readOnlyPropertyName) ) { assertTrue( readOnlyPropertyName + " should have been read only", field.isReadOnly() ); fieldChecked = true; } } if ( !fieldChecked ) { assertFalse( field.getPropertyName() + " should not be read only.", field.isReadOnly() ); assertFalse( field.getPropertyName() + " should not be hidden", field.getFieldType().equals(Field.HIDDEN) ); } } } } } @SuppressWarnings("deprecation") protected MaintenanceDocument createNewDocument_RoleMember() throws Exception { MaintenanceDocument document = (MaintenanceDocument) KRADServiceLocatorWeb.getDocumentService().getNewDocument(ORG_REVIEW_DOC_TYPE); document.getOldMaintainableObject().prepareBusinessObject(new OrgReviewRole()); PersistableBusinessObject oldBo = document.getOldMaintainableObject().getBusinessObject(); document.getOldMaintainableObject().setBusinessObject(oldBo); document.getOldMaintainableObject().setBoClass(OrgReviewRole.class); document.getNewMaintainableObject().setBusinessObject((PersistableBusinessObject) ObjectUtils.deepCopy(oldBo)); document.getNewMaintainableObject().setBoClass(OrgReviewRole.class); document.getNewMaintainableObject().setGenerateDefaultValues(ORG_REVIEW_DOC_TYPE); document.getNewMaintainableObject().processAfterNew( document, new HashMap<String, String[]>() ); document.getNewMaintainableObject().setMaintenanceAction(KRADConstants.MAINTENANCE_NEW_ACTION); return document; } @SuppressWarnings("deprecation") protected MaintenanceDocument createEditDocument_OrgHier_RoleMember( OrgReviewRole existingOrr ) throws Exception { MaintenanceDocument document = (MaintenanceDocument) KRADServiceLocatorWeb.getDocumentService().getNewDocument(ORG_REVIEW_DOC_TYPE); existingOrr.setMethodToCall("edit"); document.getOldMaintainableObject().prepareBusinessObject((BusinessObject) ObjectUtils.deepCopy(existingOrr)); PersistableBusinessObject oldBo = document.getOldMaintainableObject().getBusinessObject(); document.getOldMaintainableObject().setBusinessObject(oldBo); document.getOldMaintainableObject().setBoClass(OrgReviewRole.class); document.getNewMaintainableObject().setBusinessObject((PersistableBusinessObject) ObjectUtils.deepCopy(oldBo)); document.getNewMaintainableObject().setBoClass(OrgReviewRole.class); document.getNewMaintainableObject().processAfterEdit( document, new HashMap<String, String[]>() ); document.getNewMaintainableObject().setMaintenanceAction(KRADConstants.MAINTENANCE_EDIT_ACTION); return document; } public void testDocumentSubmit_OrgHier_Delegate_New() throws Exception { // create an org hierarchy role member on which to create a delegation orgHierOrgReviewRole.setEdit(false); orgReviewRoleService.saveOrgReviewRoleToKim(orgHierOrgReviewRole); MaintenanceDocument doc = createNewDocument_OrgHier_Delegation( orgHierOrgReviewRole.getRoleMemberId() ); ((OrgReviewRole)doc.getNewMaintainableObject().getBusinessObject()).setDelegationTypeCode(DelegationType.PRIMARY.getCode()); doc.getDocumentHeader().setDocumentDescription("Unit Test"); SpringContext.getBean(BusinessObjectService.class).linkUserFields(doc); ((OrgReviewRole)doc.getNewMaintainableObject().getBusinessObject()).setPerson(UserNameFixture.day.getPerson()); KRADServiceLocatorWeb.getDocumentService().routeDocument(doc, null, null); } @SuppressWarnings("deprecation") protected MaintenanceDocument createCopyDocument_OrgHier_RoleMember( String roleMemberId ) throws Exception { // kr/maintenance.do? // businessObjectClassName=org.kuali.kfs.coa.identity.OrgReviewRole // &cpKys=ODelMId%2CORMId%2CmethodToCall // &methodToCall=copy // &ORMId=KFS1285 // create an ORR and save it // Create the document MaintenanceDocument document = (MaintenanceDocument) KRADServiceLocatorWeb.getDocumentService().getNewDocument(ORG_REVIEW_DOC_TYPE); OrgReviewRole existingOrr = new OrgReviewRole(); existingOrr.setORMId(existingOrr.getRoleMemberId()); existingOrr.setMethodToCall("copy"); document.getOldMaintainableObject().prepareBusinessObject((BusinessObject) ObjectUtils.deepCopy(existingOrr)); PersistableBusinessObject oldBo = document.getOldMaintainableObject().getBusinessObject(); document.getOldMaintainableObject().setBusinessObject(oldBo); document.getOldMaintainableObject().setBoClass(OrgReviewRole.class); document.getNewMaintainableObject().setBusinessObject((PersistableBusinessObject) ObjectUtils.deepCopy(oldBo)); document.getNewMaintainableObject().setBoClass(OrgReviewRole.class); // on a COPY, clear any fields that this user isnt authorized for, and also // clear the primary key fields and the version number and objectId //for issue KULRice 3072 existingOrr.setOrgReviewRoleMemberId(null); ((OrgReviewRole)document.getNewMaintainableObject().getBusinessObject()).setOrgReviewRoleMemberId(null); ((OrgReviewRole)document.getNewMaintainableObject().getBusinessObject()).setDelegate(false); Maintainable maintainable = document.getNewMaintainableObject(); document.getNewMaintainableObject().processAfterCopy( document, new HashMap<String, String[]>() ); // mark so that blank required fields will be populated with default values maintainable.setGenerateBlankRequiredValues(ORG_REVIEW_DOC_TYPE); document.getNewMaintainableObject().getBusinessObject().setObjectId(null); document.getNewMaintainableObject().getBusinessObject().setVersionNumber(new Long(1)); document.getNewMaintainableObject().setMaintenanceAction(KRADConstants.MAINTENANCE_COPY_ACTION); return document; } @SuppressWarnings("deprecation") protected MaintenanceDocument createNewDocument_OrgHier_Delegation( String roleMemberId ) throws Exception { // kr/maintenance.do? // businessObjectClassName=org.kuali.kfs.coa.identity.OrgReviewRole // &cpKys=ODelMId%2CORMId%2CmethodToCall // &methodToCall=edit // &ORMId=10004 // &ODelMId=New MaintenanceDocument document = (MaintenanceDocument) KRADServiceLocatorWeb.getDocumentService().getNewDocument(ORG_REVIEW_DOC_TYPE); OrgReviewRole existingOrr = new OrgReviewRole(); existingOrr.setODelMId("New"); existingOrr.setORMId(roleMemberId); existingOrr.setMethodToCall("edit"); document.getOldMaintainableObject().prepareBusinessObject(existingOrr); existingOrr = (OrgReviewRole) document.getOldMaintainableObject().getBusinessObject(); document.getOldMaintainableObject().setBusinessObject(existingOrr); document.getOldMaintainableObject().setBoClass(OrgReviewRole.class); document.getNewMaintainableObject().setBusinessObject((PersistableBusinessObject) ObjectUtils.deepCopy(existingOrr)); document.getNewMaintainableObject().setBoClass(OrgReviewRole.class); document.getNewMaintainableObject().processAfterEdit( document, new HashMap<String, String[]>() ); document.getNewMaintainableObject().setMaintenanceAction(KRADConstants.MAINTENANCE_EDIT_ACTION); return document; } }