/* * 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.gl.batch; import java.io.File; import java.io.FileReader; import java.io.Reader; import java.util.ArrayList; import java.util.List; import org.apache.commons.io.IOUtils; import org.kuali.kfs.gl.GeneralLedgerConstants; import org.kuali.kfs.gl.businessobject.OriginEntryFull; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.batch.BatchDirectoryHelper; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.context.TestUtils; import org.kuali.kfs.sys.dataaccess.UnitTestSqlDao; import org.kuali.kfs.sys.service.impl.KfsParameterConstants; import org.kuali.kfs.sys.suite.AnnotationTestSuite; import org.kuali.kfs.sys.suite.IcrEncumbranceSuite; import org.kuali.rice.coreservice.framework.parameter.ParameterService; /** * This class tests posting of ICR Encumbrance entries to the general ledger table. */ @ConfigureContext @AnnotationTestSuite(IcrEncumbranceSuite.class) public class PosterIcrEncumbranceEntriesStepTest extends IcrEncumbranceStepTestBase { private BatchDirectoryHelper batchDirectoryHelper; // Services private IcrEncumbranceSortStep icrEncumbranceSortStep; private PosterIcrEncumbranceEntriesStep posterIcrEncumbranceEntriesStep; private UnitTestSqlDao unitTestSqlDao; /** * This method sets up the services used during testing. * * @see org.kuali.kfs.gl.batch.IcrEncumbranceStepTestBase#setUp() */ @Override public void setUp() throws Exception { super.setUp(); batchDirectoryHelper = new BatchDirectoryHelper("gl","originEntry"); batchDirectoryHelper.createBatchDirectory(); // Init services this.icrEncumbranceSortStep = SpringContext.getBean(IcrEncumbranceSortStep.class); this.icrEncumbranceSortStep.setParameterService(SpringContext.getBean(ParameterService.class)); this.posterIcrEncumbranceEntriesStep = SpringContext.getBean(PosterIcrEncumbranceEntriesStep.class); this.posterIcrEncumbranceEntriesStep.setParameterService(SpringContext.getBean(ParameterService.class)); this.unitTestSqlDao = SpringContext.getBean(UnitTestSqlDao.class); } @Override public void tearDown() throws Exception { super.tearDown(); batchDirectoryHelper.removeBatchDirectory(); } /* * Populate a list of OriginEntryFull objects from the lines * contained in a generated feed file. */ private List<OriginEntryFull> getOriginEntriesFromFile(File feedFile){ List<String> lines = getLinesFromFile(feedFile); List<OriginEntryFull> entryList = new ArrayList<OriginEntryFull>(); int lineNumber = 1; for(String line : lines){ OriginEntryFull entry = new OriginEntryFull(); entry.setFromTextFileForBatch(line, lineNumber); entryList.add(entry); lineNumber++; } return entryList; } /* * Helper method to pull lines from a file and create one * String for each line. */ private List<String> getLinesFromFile(File feedFile){ Reader feedReader = null; List<String> lines = null; try { feedReader = new FileReader(feedFile); lines = IOUtils.readLines(feedReader); }catch (Exception e) { throw new RuntimeException(e); }finally{ IOUtils.closeQuietly(feedReader); } return lines; } /** * This method tests the execute() mehthod of the PosterIcrEncumbranceEntriesStep. * * The sequence of steps for the ICR Encumbrance posting job is: * 1.) icrEncumbranceFeedStep * 2.) icrEncumbranceSortStep * 3.) posterIcrEncumbranceEntriesStep <--- This is what we are testing, stop here * 4.) fileRenameStep * * @see org.kuali.kfs.gl.batch.IcrEncumbranceStepTestBase#testExecute() */ @Override public void testExecute() { TestUtils.setSystemParameter(KfsParameterConstants.GENERAL_LEDGER_BATCH.class, GeneralLedgerConstants.USE_ICR_ENCUMBRANCE_PARAM, "Y"); // Generate a feed file, (see IcrEncumbranceFeedTest for full test coverage) File feedFile = icrEncumbranceService.buildIcrEncumbranceFeed(); // Sort file contents (see IcrEncumbranceSortStepTest for full test coverage) this.icrEncumbranceSortStep.execute("testIcrEncumbranceSortStep", dateTimeService.getCurrentDate()); // Ensure OriginEntryFull objects can be instantiated from the generated feed // file, and capture how many entries were generated int originEntryCount = getOriginEntriesFromFile(feedFile).size(); assertTrue("The feed file did not produce the expected number of origin entries.", originEntryCount > 0); // Clear the general ledger table, then ensure no records are present, // this means any new records are from our test posting them unitTestSqlDao.sqlCommand("DELETE FROM GL_ENTRY_T"); int glEntryTableRowCount = unitTestSqlDao.sqlSelect("SELECT UNIV_FISCAL_PRD_CD FROM GL_ENTRY_T").size(); assertTrue("The GL_ENTRY_T should be empty.", glEntryTableRowCount == 0); // Perform posting, this step is the consumer of the feed file contents posterIcrEncumbranceEntriesStep.execute("testPosterIcrEncumbranceEntriesStep", dateTimeService.getCurrentDate()); // Ensure the general ledger table contains twice the number of records as origin entries from the feed file glEntryTableRowCount = unitTestSqlDao.sqlSelect("SELECT UNIV_FISCAL_PRD_CD FROM GL_ENTRY_T").size(); int expectedCount = originEntryCount * 2; String msg = String.format("The GL_ENTRY_T should have %d records but only has %d.", expectedCount, glEntryTableRowCount); assertTrue(msg, glEntryTableRowCount == expectedCount); } }