/* * 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.fp.document; import static org.kuali.kfs.sys.document.AccountingDocumentTestUtils.testGetNewDocument_byDocumentClass; import static org.kuali.kfs.sys.fixture.AccountingLineFixture.LINE2; import static org.kuali.kfs.sys.fixture.UserNameFixture.khuntley; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.DocumentTestUtils; 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.AccountingDocumentTestUtils; import org.kuali.kfs.sys.fixture.AccountingLineFixture; import org.kuali.rice.kns.service.DataDictionaryService; import org.kuali.rice.kns.service.TransactionalDocumentDictionaryService; import org.kuali.rice.krad.document.Document; import org.kuali.rice.krad.service.DocumentService; /** * This class is used to test DistributionOfIncomeAndExpenseDocument. */ @ConfigureContext(session = khuntley) public class DistributionOfIncomeAndExpenseDocumentTest extends KualiTestBase { private static final Log LOG = LogFactory.getLog(DistributionOfIncomeAndExpenseDocumentTest.class); public static final Class<DistributionOfIncomeAndExpenseDocument> DOCUMENT_CLASS = DistributionOfIncomeAndExpenseDocument.class; private Document getDocumentParameterFixture() throws Exception { return DocumentTestUtils.createDocument(SpringContext.getBean(DocumentService.class), DistributionOfIncomeAndExpenseDocument.class); } private List<AccountingLineFixture> getTargetAccountingLineParametersFromFixtures() { List<AccountingLineFixture> list = new ArrayList<AccountingLineFixture>(); list.add(LINE2); return list; } private List<AccountingLineFixture> getSourceAccountingLineParametersFromFixtures() { List<AccountingLineFixture> list = new ArrayList<AccountingLineFixture>(); list.add(LINE2); return list; } /* * This test fails related to KULEDOCS-1662 */ // @RelatesTo(KULRNE1612) @ConfigureContext(session = khuntley, shouldCommitTransactions = true) public final void testKULEDOCS_1401() throws Exception { String testDocId = null; try { { // create a DIE doc DistributionOfIncomeAndExpenseDocument createdDoc = (DistributionOfIncomeAndExpenseDocument) SpringContext.getBean(DocumentService.class).getNewDocument(DistributionOfIncomeAndExpenseDocument.class); testDocId = createdDoc.getDocumentNumber(); // populate and save it createdDoc.getDocumentHeader().setDocumentDescription("created by testKULEDOCS_1401"); createdDoc.getDocumentHeader().setExplanation("reproducing KULEDOCS_1401"); createdDoc.addSourceAccountingLine(getSourceAccountingLineAccessibleAccount()); createdDoc.addTargetAccountingLine(getTargetAccountingLineAccessibleAccount()); SpringContext.getBean(DocumentService.class).saveDocument(createdDoc); } { // change the accountingLine totals (by adding new lines) DistributionOfIncomeAndExpenseDocument savedDoc = (DistributionOfIncomeAndExpenseDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(testDocId); savedDoc.addSourceAccountingLine(getSourceAccountingLineAccessibleAccount()); savedDoc.addTargetAccountingLine(getTargetAccountingLineAccessibleAccount()); // blanketapprove updated doc SpringContext.getBean(DocumentService.class).blanketApproveDocument(savedDoc, "blanketapproving updated doc", null); } } finally { // clean things up, if possible if (testDocId != null) { DistributionOfIncomeAndExpenseDocument cancelingDoc = (DistributionOfIncomeAndExpenseDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(testDocId); if (cancelingDoc != null) { try { SpringContext.getBean(DocumentService.class).cancelDocument(cancelingDoc, "cleaning up after test"); } catch (RuntimeException e) { LOG.error("caught RuntimeException canceling document: " + e.getMessage()); } } } } } public final void testAddAccountingLine() throws Exception { List<SourceAccountingLine> sourceLines = generateSouceAccountingLines(); List<TargetAccountingLine> targetLines = generateTargetAccountingLines(); int expectedSourceTotal = sourceLines.size(); int expectedTargetTotal = targetLines.size(); AccountingDocumentTestUtils.testAddAccountingLine(DocumentTestUtils.createDocument(SpringContext.getBean(DocumentService.class), DOCUMENT_CLASS), sourceLines, targetLines, expectedSourceTotal, expectedTargetTotal); } public final void testGetNewDocument() throws Exception { testGetNewDocument_byDocumentClass(DOCUMENT_CLASS, SpringContext.getBean(DocumentService.class)); } public final void testConvertIntoCopy_copyDisallowed() throws Exception { AccountingDocumentTestUtils.testConvertIntoCopy_copyDisallowed(buildDocument(), SpringContext.getBean(DataDictionaryService.class)); } public final void testConvertIntoErrorCorrection_documentAlreadyCorrected() throws Exception { AccountingDocumentTestUtils.testConvertIntoErrorCorrection_documentAlreadyCorrected(buildDocument(), SpringContext.getBean(TransactionalDocumentDictionaryService.class)); } public final void testConvertIntoErrorCorrection_errorCorrectionDisallowed() throws Exception { AccountingDocumentTestUtils.testConvertIntoErrorCorrection_errorCorrectionDisallowed(buildDocument(), SpringContext.getBean(DataDictionaryService.class)); } @ConfigureContext(session = khuntley, shouldCommitTransactions = true) public final void testConvertIntoErrorCorrection() throws Exception { AccountingDocumentTestUtils.testConvertIntoErrorCorrection(buildDocument(), getExpectedPrePeCount(), SpringContext.getBean(DocumentService.class), SpringContext.getBean(TransactionalDocumentDictionaryService.class)); } @ConfigureContext(session = khuntley, shouldCommitTransactions = true) public final void testRouteDocument() throws Exception { AccountingDocumentTestUtils.testRouteDocument(buildDocument(), SpringContext.getBean(DocumentService.class)); } @ConfigureContext(session = khuntley, shouldCommitTransactions = true) public final void testSaveDocument() throws Exception { AccountingDocumentTestUtils.testSaveDocument(buildDocument(), SpringContext.getBean(DocumentService.class)); } @ConfigureContext(session = khuntley, shouldCommitTransactions = true) public void testConvertIntoCopy() throws Exception { AccountingDocumentTestUtils.testConvertIntoCopy(buildDocument(), SpringContext.getBean(DocumentService.class), getExpectedPrePeCount()); } // test util methods private List<SourceAccountingLine> generateSouceAccountingLines() throws Exception { List<SourceAccountingLine> sourceLines = new ArrayList<SourceAccountingLine>(); // set accountinglines to document for (AccountingLineFixture sourceFixture : getSourceAccountingLineParametersFromFixtures()) { sourceLines.add(sourceFixture.createSourceAccountingLine()); } return sourceLines; } private List<TargetAccountingLine> generateTargetAccountingLines() throws Exception { List<TargetAccountingLine> targetLines = new ArrayList<TargetAccountingLine>(); for (AccountingLineFixture targetFixture : getTargetAccountingLineParametersFromFixtures()) { targetLines.add(targetFixture.createTargetAccountingLine()); } return targetLines; } private DistributionOfIncomeAndExpenseDocument buildDocument() throws Exception { // put accounting lines into document parameter for later DistributionOfIncomeAndExpenseDocument document = (DistributionOfIncomeAndExpenseDocument) getDocumentParameterFixture(); // set accountinglines to document for (AccountingLineFixture sourceFixture : getSourceAccountingLineParametersFromFixtures()) { sourceFixture.addAsSourceTo(document); } for (AccountingLineFixture targetFixture : getTargetAccountingLineParametersFromFixtures()) { targetFixture.addAsTargetTo(document); } return document; } private int getExpectedPrePeCount() { return 4; } private SourceAccountingLine getSourceAccountingLineAccessibleAccount() throws Exception { return LINE2.createSourceAccountingLine(); } private TargetAccountingLine getTargetAccountingLineAccessibleAccount() throws Exception { return LINE2.createTargetAccountingLine(); } }