/*
* 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");
}
}