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