/* * 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 static org.kuali.kfs.sys.fixture.UserNameFixture.khuntley; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.kuali.kfs.coa.businessobject.AccountDelegateGlobal; import org.kuali.kfs.coa.businessobject.AccountDelegateGlobalDetail; import org.kuali.kfs.coa.businessobject.AccountGlobal; import org.kuali.kfs.coa.businessobject.AccountGlobalDetail; import org.kuali.kfs.sys.ConfigureContext; 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.suite.AnnotationTestSuite; import org.kuali.kfs.sys.suite.CrossSectionSuite; import org.kuali.kfs.sys.util.KfsDateUtils; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.kns.document.MaintenanceDocument; import org.kuali.rice.kns.maintenance.Maintainable; import org.kuali.rice.krad.bo.PersistableBusinessObject; import org.kuali.rice.krad.service.DocumentService; @SuppressWarnings("deprecation") @ConfigureContext(session = khuntley) public class GlobalDocumentTest extends KualiTestBase { private static final Log LOG = LogFactory.getLog(GlobalDocumentTest.class); private static final String KNOWN_DOCUMENT_TYPENAME = "GDLG"; private static final String GLOBAL_DELEGATE_TYPENAME = "GDLG"; private static final String GLOBAL_ACCOUNT_TYPENAME = "GACC"; public void testGlobalDelegateMaintenanceDocumentCreation_goodDocTypeName() throws Exception { MaintenanceDocument doc = (MaintenanceDocument) SpringContext.getBean(DocumentService.class).getNewDocument(KNOWN_DOCUMENT_TYPENAME); assertNotNull(doc); assertNotNull(doc.getNewMaintainableObject()); assertEquals("org.kuali.kfs.coa.businessobject.AccountDelegateGlobal", doc.getNewMaintainableObject().getBoClass().getName()); } public final void testGetNewDocument_globalDelegateMaintDoc() throws Exception { MaintenanceDocument document = (MaintenanceDocument) SpringContext.getBean(DocumentService.class).getNewDocument(GLOBAL_DELEGATE_TYPENAME); // make sure the doc is setup assertNotNull(document); assertNotNull(document.getDocumentHeader()); assertNotNull(document.getDocumentHeader().getDocumentNumber()); assertEquals("Global document should always appear as a New.", true, document.isNew()); assertEquals("Global document should never appear as an edit.", false, document.isEdit()); Maintainable newMaintainable = document.getNewMaintainableObject(); assertNotNull("New Maintainable should never be null.", newMaintainable); assertEquals("BO Class should be DelegateGlobal.", AccountDelegateGlobal.class, newMaintainable.getBoClass()); PersistableBusinessObject newBo = newMaintainable.getBusinessObject(); assertNotNull("New BO should never be null.", newBo); assertEquals("New BO should be of the correct class.", AccountDelegateGlobal.class, newBo.getClass()); } public final void testGetNewDocument_globalAccountMaintDoc() throws Exception { MaintenanceDocument document = (MaintenanceDocument) SpringContext.getBean(DocumentService.class).getNewDocument(GLOBAL_ACCOUNT_TYPENAME); // make sure the doc is setup assertNotNull(document); assertNotNull(document.getDocumentHeader()); assertNotNull(document.getDocumentHeader().getDocumentNumber()); assertEquals("Global document should always appear as a New.", true, document.isNew()); assertEquals("Global document should never appear as an edit.", false, document.isEdit()); Maintainable newMaintainable = document.getNewMaintainableObject(); assertNotNull("New Maintainable should never be null.", newMaintainable); assertEquals("BO Class should be AccountGlobal.", AccountGlobal.class, newMaintainable.getBoClass()); PersistableBusinessObject newBo = newMaintainable.getBusinessObject(); assertNotNull("New BO should never be null.", newBo); assertEquals("New BO should be of the correct class.", AccountGlobal.class, newBo.getClass()); } @ConfigureContext(session = khuntley, shouldCommitTransactions = true) public final void testSaveDocument_globalDelegate() throws Exception { MaintenanceDocument document = (MaintenanceDocument) SpringContext.getBean(DocumentService.class).getNewDocument(GLOBAL_DELEGATE_TYPENAME); // get local references to the Maintainable and the BO Maintainable newMaintainable = document.getNewMaintainableObject(); AccountDelegateGlobal bo = (AccountDelegateGlobal) newMaintainable.getBusinessObject(); String finDocNumber = document.getDocumentNumber(); document.getDocumentHeader().setDocumentDescription("blah"); System.err.println("DOC_NBR = " + finDocNumber); List<AccountDelegateGlobalDetail> changes = new ArrayList(); AccountDelegateGlobalDetail change = new AccountDelegateGlobalDetail(); change.setAccountDelegatePrimaryRoutingIndicator(false); change.setAccountDelegateStartDate(KfsDateUtils.newDate(2006, 6, 1)); change.setAccountDelegateUniversalId("1183109030"); change.setApprovalFromThisAmount(KualiDecimal.ZERO); change.setApprovalToThisAmount(KualiDecimal.ZERO); change.setFinancialDocumentTypeCode(KFSConstants.ROOT_DOCUMENT_TYPE); changes.add(change); bo.setDelegateGlobals(changes); AccountGlobalDetail account; account = new AccountGlobalDetail(); account.setDocumentNumber(finDocNumber); account.setChartOfAccountsCode("BL"); account.setAccountNumber("1031400"); bo.addAccount(account); account = new AccountGlobalDetail(); account.setDocumentNumber(finDocNumber); account.setChartOfAccountsCode("BL"); account.setAccountNumber("1031420"); bo.addAccount(account); account = new AccountGlobalDetail(); account.setDocumentNumber(finDocNumber); account.setChartOfAccountsCode("BL"); account.setAccountNumber("1031467"); bo.addAccount(account); SpringContext.getBean(DocumentService.class).saveDocument(document); document = (MaintenanceDocument)SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(document.getDocumentNumber()); // now that it worked, lets cancel the doc so it doesnt lock for others SpringContext.getBean(DocumentService.class).cancelDocument(document, "cancelling test document"); } @AnnotationTestSuite(CrossSectionSuite.class) @ConfigureContext(session = khuntley, shouldCommitTransactions = true) public final void testSaveAndLoadDocument_globalDelegate() throws Exception { MaintenanceDocument document = (MaintenanceDocument) SpringContext.getBean(DocumentService.class).getNewDocument(GLOBAL_DELEGATE_TYPENAME); // get local references to the Maintainable and the BO Maintainable newMaintainable = document.getNewMaintainableObject(); AccountDelegateGlobal bo = (AccountDelegateGlobal) newMaintainable.getBusinessObject(); String finDocNumber = document.getDocumentNumber(); document.getDocumentHeader().setDocumentDescription("blah"); List<AccountDelegateGlobalDetail> changes = new ArrayList(); AccountDelegateGlobalDetail change = new AccountDelegateGlobalDetail(); change.setAccountDelegatePrimaryRoutingIndicator(false); change.setAccountDelegateStartDate(KfsDateUtils.newDate(2006, 6, 1)); change.setAccountDelegateUniversalId("1183109030"); change.setApprovalFromThisAmount(KualiDecimal.ZERO); change.setApprovalToThisAmount(KualiDecimal.ZERO); change.setFinancialDocumentTypeCode(KFSConstants.ROOT_DOCUMENT_TYPE); changes.add(change); bo.setDelegateGlobals(changes); AccountGlobalDetail account; account = new AccountGlobalDetail(); account.setDocumentNumber(finDocNumber); account.setChartOfAccountsCode("BL"); account.setAccountNumber("1031400"); bo.addAccount(account); account = new AccountGlobalDetail(); account.setDocumentNumber(finDocNumber); account.setChartOfAccountsCode("BL"); account.setAccountNumber("1031420"); bo.addAccount(account); account = new AccountGlobalDetail(); account.setDocumentNumber(finDocNumber); account.setChartOfAccountsCode("BL"); account.setAccountNumber("1031467"); bo.addAccount(account); SpringContext.getBean(DocumentService.class).saveDocument(document); // clear the document, and re-load it from the DB document = null; document = (MaintenanceDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(finDocNumber); assertNotNull("Document should not be null after loaded from the DB.", document); assertNotNull("Document Header should not be null after loaded from the DB.", document.getDocumentHeader()); assertNotNull("Document FinDocNumber should not be null after loaded from the DB.", document.getDocumentHeader().getDocumentNumber()); // document should show up as a 'New' document assertEquals("Global document should always appear as a New.", true, document.isNew()); assertEquals("Global document should never appear as an edit.", false, document.isEdit()); // Maintainable should be populated and contain the right class newMaintainable = document.getNewMaintainableObject(); assertNotNull("New Maintainable should never be null.", newMaintainable); assertEquals("BO Class should be DelegateGlobal.", AccountDelegateGlobal.class, newMaintainable.getBoClass()); // BO should be non-null and the right class bo = (AccountDelegateGlobal) newMaintainable.getBusinessObject(); assertNotNull("New BO should never be null.", bo); assertEquals("New BO should be of the correct class.", AccountDelegateGlobal.class, bo.getClass()); // List should contain 3 elements assertNotNull("AccountDetail list should not be null.", bo.getAccountGlobalDetails()); List accounts = bo.getAccountGlobalDetails(); assertEquals("AccountDetail list should not be empty.", false, accounts.isEmpty()); assertEquals("AccountDetail list should contain 3 elements.", 3, accounts.size()); // make sure all the accounts are non-null and at least have the Chart populated for (Iterator iter = accounts.iterator(); iter.hasNext();) { AccountGlobalDetail accountDetail = (AccountGlobalDetail) iter.next(); assertNotNull("AccountDetailChange should not be null.", accountDetail); assertNotNull("ChartOfAccountsCode", accountDetail.getChartOfAccountsCode()); assertEquals("Account Chart should be known.", "BL", accountDetail.getChartOfAccountsCode()); } // now that it worked, lets cancel the doc so it doesnt lock for others SpringContext.getBean(DocumentService.class).cancelDocument(document, "cancelling test document"); } }