/*
* 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.businessobject;
import static org.kuali.kfs.sys.fixture.UserNameFixture.kfs;
import java.io.ByteArrayInputStream;
import java.util.Arrays;
import java.util.List;
import org.kuali.kfs.fp.document.ProcurementCardDocument;
import org.kuali.kfs.sys.ConfigureContext;
import org.kuali.kfs.sys.KFSKeyConstants;
import org.kuali.kfs.sys.context.KualiTestBase;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.document.AccountingDocument;
import org.kuali.kfs.sys.exception.AccountingLineParserException;
import org.kuali.kfs.sys.suite.AnnotationTestSuite;
import org.kuali.kfs.sys.suite.CrossSectionSuite;
import org.kuali.rice.core.api.util.type.KualiDecimal;
import org.kuali.rice.krad.service.DocumentService;
/**
* Test class for testing <code>{@link AccountingLineParserBase}</code>
*/
@AnnotationTestSuite(CrossSectionSuite.class)
@ConfigureContext(session = kfs)
public class AccountingLineParserBaseTest extends KualiTestBase {
private AccountingDocument accountingDocument;
private AccountingLineParser parser;
@Override
protected void setUp() throws Exception {
super.setUp();
accountingDocument = (AccountingDocument) SpringContext.getBean(DocumentService.class).getNewDocument(ProcurementCardDocument.class);
parser = accountingDocument.getAccountingLineParser();
}
/**
*/
public void testParseSourceAccountingLine_failure_notANumber() {
try {
parser.parseSourceAccountingLine(accountingDocument, "BL,4631672, , ,KUL, , , a");
fail("didn't throw AccountingLineParserException");
}
catch (AccountingLineParserException e) {
// good
assertInvalidPropertyValue(e, " a");
}
}
private static void assertInvalidPropertyValue(AccountingLineParserException e, String expectedErrorParam) {
assertEquals(KFSKeyConstants.AccountingLineParser.ERROR_INVALID_PROPERTY_VALUE, e.getErrorKey());
List<String> errorParams = Arrays.asList(e.getErrorParameters());
assertTrue(errorParams + " contains '" + expectedErrorParam + "'", errorParams.contains(expectedErrorParam));
}
/**
*/
public void testParseTargetAccountingLine_failure_notANumber() {
try {
parser.parseTargetAccountingLine(accountingDocument, "BL,4631672, , ,KUL, , , , b");
fail("didn't throw AccountingLineParserException");
}
catch (AccountingLineParserException e) {
// good
assertInvalidPropertyValue(e, " b");
}
}
/**
*/
public void testParseSourceAccountingLine_pass_upperCase() {
String chartOfAccountsCode = "BL";
String accountNumber = "463172";
String projectCode = "KUL";
String amount = "12.31";
StringBuffer sb = new StringBuffer();
sb.append(chartOfAccountsCode);
sb.append(",");
sb.append(accountNumber);
sb.append(",,,,");
sb.append(projectCode);
sb.append(",,");
sb.append(amount);
SourceAccountingLine result = parser.parseSourceAccountingLine(accountingDocument, sb.toString());
assertEquals(accountingDocument.getPostingYear(), result.getPostingYear());
assertEquals(accountingDocument.getDocumentNumber(), result.getDocumentNumber());
assertEquals(accountingDocument.getSourceAccountingLines().size() + 1, result.getSequenceNumber().intValue());
assertEquals(chartOfAccountsCode, result.getChartOfAccountsCode());
assertEquals(accountNumber, result.getAccountNumber());
assertEquals(projectCode, result.getProjectCode());
assertEquals(new KualiDecimal(amount), result.getAmount());
}
/**
*/
public void testParseSourceAccountingLine_pass_lowerCase() {
String chartOfAccountsCode = "bl";
String accountNumber = "463172";
String projectCode = "kul";
String amount = "12.31";
StringBuffer sb = new StringBuffer();
sb.append(chartOfAccountsCode);
sb.append(",");
sb.append(accountNumber);
sb.append(",,,,");
sb.append(projectCode);
sb.append(",,");
sb.append(amount);
SourceAccountingLine result = parser.parseSourceAccountingLine(accountingDocument, sb.toString());
assertEquals(accountingDocument.getPostingYear(), result.getPostingYear());
assertEquals(accountingDocument.getDocumentNumber(), result.getDocumentNumber());
assertEquals(accountingDocument.getSourceAccountingLines().size() + 1, result.getSequenceNumber().intValue());
assertEquals(chartOfAccountsCode.toUpperCase(), result.getChartOfAccountsCode());
assertEquals(accountNumber, result.getAccountNumber());
assertEquals(projectCode.toUpperCase(), result.getProjectCode());
assertEquals(new KualiDecimal(amount), result.getAmount());
}
/**
*/
public void testParseTargetAccountingLine_pass_upperCase() {
String chartOfAccountsCode = "BL";
String accountNumber = "463172";
String projectCode = "KUL";
String description = "test target accounting line";
String amount = "12.31";
StringBuffer sb = new StringBuffer();
sb.append(chartOfAccountsCode);
sb.append(",");
sb.append(accountNumber);
sb.append(",,,,");
sb.append(projectCode);
sb.append(",,");
sb.append(description);
sb.append(",");
sb.append(amount);
TargetAccountingLine result = parser.parseTargetAccountingLine(accountingDocument, sb.toString());
assertEquals(accountingDocument.getPostingYear(), result.getPostingYear());
assertEquals(accountingDocument.getDocumentNumber(), result.getDocumentNumber());
assertEquals(accountingDocument.getTargetAccountingLines().size() + 1, result.getSequenceNumber().intValue());
assertEquals(chartOfAccountsCode, result.getChartOfAccountsCode());
assertEquals(accountNumber, result.getAccountNumber());
assertEquals(projectCode, result.getProjectCode());
assertEquals(new KualiDecimal(amount), result.getAmount());
}
/**
*/
public void testParseTargetAccountingLine_pass_lowerCase() {
String chartOfAccountsCode = "bl";
String accountNumber = "463172";
String projectCode = "kul";
String description = "test target accounting line";
String amount = "12.31";
StringBuffer sb = new StringBuffer();
sb.append(chartOfAccountsCode);
sb.append(",");
sb.append(accountNumber);
sb.append(",,,,");
sb.append(projectCode);
sb.append(",,");
sb.append(description);
sb.append(",");
sb.append(amount);
TargetAccountingLine result = parser.parseTargetAccountingLine(accountingDocument, sb.toString());
assertEquals(accountingDocument.getPostingYear(), result.getPostingYear());
assertEquals(accountingDocument.getDocumentNumber(), result.getDocumentNumber());
assertEquals(accountingDocument.getTargetAccountingLines().size() + 1, result.getSequenceNumber().intValue());
assertEquals(chartOfAccountsCode.toUpperCase(), result.getChartOfAccountsCode());
assertEquals(accountNumber, result.getAccountNumber());
assertEquals(projectCode.toUpperCase(), result.getProjectCode());
assertEquals(new KualiDecimal(amount), result.getAmount());
}
/**
*/
public void testImportSourceAccountingLine_pass() {
String chartOfAccountsCode = "bl";
String accountNumber = "463172";
String projectCode = "kul";
String amount = "12.31";
StringBuffer sb = new StringBuffer();
sb.append(chartOfAccountsCode);
sb.append(",");
sb.append(accountNumber);
sb.append(",,,,");
sb.append(projectCode);
sb.append(",,");
sb.append(amount);
List<SourceAccountingLine> lineList = parser.importSourceAccountingLines(null, new ByteArrayInputStream(sb.toString().getBytes()), accountingDocument);
for (SourceAccountingLine result : lineList) {
assertEquals(accountingDocument.getPostingYear(), result.getPostingYear());
assertEquals(accountingDocument.getDocumentNumber(), result.getDocumentNumber());
assertEquals(accountingDocument.getSourceAccountingLines().size() + 1, result.getSequenceNumber().intValue());
assertEquals(chartOfAccountsCode.toUpperCase(), result.getChartOfAccountsCode());
assertEquals(accountNumber, result.getAccountNumber());
assertEquals(projectCode.toUpperCase(), result.getProjectCode());
assertEquals(new KualiDecimal(amount), result.getAmount());
}
}
//
// public void testImportSourceAccountingLines() throws Exception {
// List result = null;
// List expected = null;
// TransactionalDocument document = getDocument();
//
// expected = getImportSourceAccountingLinesExpected(document);
// result = getAccountingLineParser().importSourceAccountingLines(getImportSourceAccountingLinesFixture(), document);
// assertTrue((result != null));
// assertEquals(expected.toString(), result.toString());
// }
//
// public void testImportTargetAccountingLines() throws Exception {
// List result = null;
// List expected = null;
// TransactionalDocument document = getDocument();
//
// expected = getImportTargetAccountingLinesExpected(document);
// result = getAccountingLineParser().importTargetAccountingLines(getImportTargetAccountingLinesFixture(), document);
// assertTrue((result != null));
// assertEquals(expected.toString(), result.toString());
// }
//
// /**
// * KULEDOCS-1317
// *
// * @throws Exception
// */
// public void testImportSourceAccountingLines_lowerCase() throws Exception {
// StringBuffer buffer = new
// StringBuffer().append(StringUtils.lowerCase(getSerializedTargetAccountingLine())).append("\n").append(StringUtils.lowerCase(getSerializedTargetAccountingLine()));
// InputStream input = new ByteArrayInputStream(buffer.toString().getBytes());
// List result = null;
// List expected = null;
// TransactionalDocument document = getDocument();
// expected = getImportSourceAccountingLinesExpected(document);
// result = getAccountingLineParser().importSourceAccountingLines(input, document);
// assertTrue((result != null));
// assertEquals(expected.toString(), result.toString());
// }
}