/* * 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.sys.service; import static org.kuali.kfs.sys.fixture.AccountingLineFixture.LINE2_TOF; import static org.kuali.kfs.sys.fixture.UserNameFixture.khuntley; import java.util.Iterator; import java.util.List; import org.kuali.kfs.fp.document.TransferOfFundsDocument; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.DocumentTestUtils; import org.kuali.kfs.sys.businessobject.AccountingLine; import org.kuali.kfs.sys.businessobject.SourceAccountingLine; import org.kuali.kfs.sys.businessobject.TargetAccountingLine; import org.kuali.kfs.sys.context.KualiTestBase; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.document.AccountingDocument; import org.kuali.rice.krad.service.BusinessObjectService; import org.kuali.rice.krad.service.DocumentService; /** * This class tests the AccountingLine service. */ @ConfigureContext(session = khuntley, shouldCommitTransactions = true) public class AccountingLineServiceTest extends KualiTestBase { private SourceAccountingLine sline; private TargetAccountingLine tline; private AccountingDocument document; @Override protected void setUp() throws Exception { super.setUp(); document = DocumentTestUtils.createDocument(SpringContext.getBean(DocumentService.class), TransferOfFundsDocument.class); SpringContext.getBean(DocumentService.class).saveDocument(document); LINE2_TOF.addAsSourceTo(document); LINE2_TOF.addAsTargetTo(document); sline = (SourceAccountingLine) document.getSourceAccountingLine(0); tline = (TargetAccountingLine) document.getTargetAccountingLine(0); } /** * Tests an accounting line is correctly persisted when the primitives of the line are set. * * @throws Exception */ public void testPersistence() throws Exception { SpringContext.getBean(BusinessObjectService.class).save(sline); List<? extends SourceAccountingLine> sourceLines = SpringContext.getBean(AccountingLineService.class).getByDocumentHeaderId(SourceAccountingLine.class, document.getDocumentNumber()); assertTrue(sourceLines.size() > 0); AccountingLine line = sourceLines.get(0); assertEquals(LINE2_TOF.chartOfAccountsCode, line.getChartOfAccountsCode()); assertEquals(LINE2_TOF.accountNumber, line.getAccountNumber()); assertEquals(LINE2_TOF.subAccountNumber, line.getSubAccountNumber()); assertEquals(LINE2_TOF.financialObjectCode, line.getFinancialObjectCode()); assertEquals(LINE2_TOF.financialSubObjectCode, line.getFinancialSubObjectCode()); SpringContext.getBean(BusinessObjectService.class).delete((AccountingLine) line); } /** * Tests reference objects are being corrected refreshed from changed pritive values. */ public void testRefresh() { assertEquals(LINE2_TOF.chartOfAccountsCode, sline.getAccount().getChartOfAccountsCode()); assertEquals(LINE2_TOF.accountNumber, sline.getAccount().getAccountNumber()); sline.setAccountNumber(TestConstants.Data4.ACCOUNT2); sline.refresh(); assertEquals(LINE2_TOF.chartOfAccountsCode, sline.getAccount().getChartOfAccountsCode()); assertEquals(TestConstants.Data4.ACCOUNT2, sline.getAccount().getAccountNumber()); sline.setChartOfAccountsCode(TestConstants.Data4.CHART_CODE_BA); sline.setFinancialObjectCode(TestConstants.Data4.OBJECT_CODE2); sline.refresh(); assertEquals(TestConstants.Data4.CHART_CODE_BA, sline.getObjectCode().getChartOfAccounts().getChartOfAccountsCode()); assertEquals(TestConstants.Data4.OBJECT_CODE2, sline.getObjectCode().getFinancialObjectCode()); } // no obvious way to test these separately, since we need to create to test save, need to save to (really) test get, and need // to delete so future test-runs can recreate public void testLifecycle() throws Exception { String docNumber = document.getDocumentNumber(); // make sure they dont' exist assertEquals(0, SpringContext.getBean(AccountingLineService.class).getByDocumentHeaderId(SourceAccountingLine.class, docNumber).size()); assertEquals(0, SpringContext.getBean(AccountingLineService.class).getByDocumentHeaderId(TargetAccountingLine.class, docNumber).size()); List sourceLines = null; List targetLines = null; // save 'em SpringContext.getBean(BusinessObjectService.class).save(sline); SpringContext.getBean(BusinessObjectService.class).save(tline); sourceLines = SpringContext.getBean(AccountingLineService.class).getByDocumentHeaderId(SourceAccountingLine.class, docNumber); targetLines = SpringContext.getBean(AccountingLineService.class).getByDocumentHeaderId(TargetAccountingLine.class, docNumber); // make sure they got saved assertTrue(sourceLines.size() > 0); assertTrue(targetLines.size() > 0); // delete 'em if (sourceLines != null) { for (Iterator i = sourceLines.iterator(); i.hasNext();) { SpringContext.getBean(BusinessObjectService.class).delete((AccountingLine) i.next()); } } if (targetLines != null) { for (Iterator i = targetLines.iterator(); i.hasNext();) { SpringContext.getBean(BusinessObjectService.class).delete((AccountingLine) i.next()); } } // make sure they got deleted assertEquals(0, SpringContext.getBean(AccountingLineService.class).getByDocumentHeaderId(SourceAccountingLine.class, docNumber).size()); assertEquals(0, SpringContext.getBean(AccountingLineService.class).getByDocumentHeaderId(TargetAccountingLine.class, docNumber).size()); } }