/* * 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.module.ld.batch.service; import static org.kuali.kfs.gl.businessobject.OriginEntrySource.LABOR_SCRUBBER_VALID; import java.sql.Date; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import org.apache.commons.lang.StringUtils; import org.kuali.kfs.gl.businessobject.OriginEntryGroup; import org.kuali.kfs.module.ld.businessobject.LaborGeneralLedgerEntry; import org.kuali.kfs.module.ld.businessobject.LaborOriginEntry; import org.kuali.kfs.module.ld.businessobject.LedgerEntry; import org.kuali.kfs.module.ld.service.LaborOriginEntryGroupService; import org.kuali.kfs.module.ld.service.LaborOriginEntryService; import org.kuali.kfs.module.ld.testdata.LaborTestDataPropertyConstants; import org.kuali.kfs.module.ld.util.LaborTestDataPreparator; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.KFSPropertyConstants; import org.kuali.kfs.sys.ObjectUtil; import org.kuali.kfs.sys.TestDataPreparator; import org.kuali.kfs.sys.context.KualiTestBase; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.rice.core.api.datetime.DateTimeService; import org.kuali.rice.krad.service.BusinessObjectService; import org.kuali.rice.krad.service.PersistenceService; @ConfigureContext public class LaborPosterServiceTest extends KualiTestBase { private Properties properties; private String fieldNames; private String deliminator; private OriginEntryGroup groupToPost; @SuppressWarnings("rawtypes") private Map fieldValues, groupFieldValues; private LaborOriginEntryService laborOriginEntryService; private LaborOriginEntryGroupService originEntryGroupService; private BusinessObjectService businessObjectService; private LaborPosterService laborPosterService; private PersistenceService persistenceService; @SuppressWarnings("rawtypes") @Override public void setUp() throws Exception { super.setUp(); String messageFileName = LaborTestDataPropertyConstants.TEST_DATA_PACKAGE_NAME + "/message.properties"; String propertiesFileName = LaborTestDataPropertyConstants.TEST_DATA_PACKAGE_NAME + "/laborPosterService.properties"; properties = TestDataPreparator.loadPropertiesFromClassPath(propertiesFileName); fieldNames = properties.getProperty("fieldNames"); deliminator = properties.getProperty("deliminator"); laborOriginEntryService = SpringContext.getBean(LaborOriginEntryService.class); originEntryGroupService = SpringContext.getBean(LaborOriginEntryGroupService.class); businessObjectService = SpringContext.getBean(BusinessObjectService.class); laborPosterService = SpringContext.getBean(LaborPosterService.class); persistenceService = SpringContext.getBean(PersistenceService.class); groupFieldValues = new HashMap(); groupFieldValues.put(KFSPropertyConstants.SOURCE_CODE, LABOR_SCRUBBER_VALID); //businessObjectService.deleteMatching(OriginEntryGroup.class, groupFieldValues); Date today = (SpringContext.getBean(DateTimeService.class)).getCurrentSqlDate(); //TODO:- commented out //groupToPost = originEntryGroupService.createGroup(today, LABOR_SCRUBBER_VALID, true, true, false); LaborOriginEntry cleanup = new LaborOriginEntry(); ObjectUtil.populateBusinessObject(cleanup, properties, "dataCleanup", fieldNames, deliminator); fieldValues = ObjectUtil.buildPropertyMap(cleanup, Arrays.asList(StringUtils.split(fieldNames, deliminator))); //businessObjectService.deleteMatching(LaborOriginEntry.class, fieldValues); businessObjectService.deleteMatching(LedgerEntry.class, fieldValues); businessObjectService.deleteMatching(LaborGeneralLedgerEntry.class, fieldValues); //TODO:- commented out - problem with "PROJECTCODE" - invalid identifier???? //businessObjectService.deleteMatching(LedgerBalance.class, fieldValues); } public void testPostAsLedgerEntry() throws Exception { //TODO:- need to change it using file // String testTarget = "postAsLedgerEntry."; // int numberOfTestData = Integer.valueOf(properties.getProperty(testTarget + "numOfData")); // int expectedNumOfData = Integer.valueOf(properties.getProperty(testTarget + "expectedNumOfData")); // // List<LaborOriginEntry> inputDataList = getInputDataList(testTarget + "testData", numberOfTestData, groupToPost); // businessObjectService.save(inputDataList); // // for (LaborOriginEntry entry : inputDataList) { // persistenceService.retrieveNonKeyFields(entry); // } // //TODO:- need to change it using file // //laborPosterService.postMainEntries(); // // Collection ledgerEntries = businessObjectService.findMatching(LedgerEntry.class, fieldValues); // List expectedDataList = TestDataPreparator.buildExpectedValueList(LedgerEntryForTesting.class, properties, testTarget + "expected", fieldNames, deliminator, expectedNumOfData); // for (Object entry : ledgerEntries) { // LedgerEntryForTesting ledgerEntryForTesting = new LedgerEntryForTesting(); // ObjectUtil.buildObject(ledgerEntryForTesting, entry); // assertTrue(expectedDataList.contains(ledgerEntryForTesting)); // } //assertEquals(expectedNumOfData, ledgerEntries.size()); } // // public void testPostAsLedgerBalance() throws Exception { // String testTarget = "postAsLedgerBalance."; // int numberOfTestData = Integer.valueOf(properties.getProperty(testTarget + "numOfData")); // int expectedNumOfData = Integer.valueOf(properties.getProperty(testTarget + "expectedNumOfData")); // KualiDecimal expectedMonth7Amount = new KualiDecimal(properties.getProperty(testTarget + "expectedMonth7Amount")); // KualiDecimal expectedMonth8Amount = new KualiDecimal(properties.getProperty(testTarget + "expectedMonth8Amount")); // KualiDecimal expectedAnnualBalanceAmount = new KualiDecimal(properties.getProperty(testTarget + "expectedAnnualBalanceAmount")); // // List<LaborOriginEntry> inputDataList = getInputDataList(testTarget + "testData", numberOfTestData, groupToPost); // businessObjectService.save(inputDataList); // // for (LaborOriginEntry entry : inputDataList) { // persistenceService.retrieveNonKeyFields(entry); // } // // laborPosterService.postMainEntries(); // // Collection ledgerEntries = businessObjectService.findMatching(LedgerBalance.class, fieldValues); // List expectedDataList = TestDataPreparator.buildExpectedValueList(LedgerBalanceForTesting.class, properties, testTarget + "expected", expectedNumOfData); // for (Object entry : ledgerEntries) { // LedgerBalanceForTesting ledgerBalanceForTesting = new LedgerBalanceForTesting(); // ObjectUtil.buildObject(ledgerBalanceForTesting, entry); // // assertTrue(expectedDataList.contains(ledgerBalanceForTesting)); // assertEquals(expectedMonth7Amount, ledgerBalanceForTesting.getMonth7Amount()); // assertEquals(expectedMonth8Amount, ledgerBalanceForTesting.getMonth8Amount()); // assertEquals(expectedAnnualBalanceAmount, ledgerBalanceForTesting.getAccountLineAnnualBalanceAmount()); // } // assertEquals(expectedNumOfData, ledgerEntries.size()); // } // // public void testPostLaborGLEntries() throws Exception { // String testTarget = "postLaborGLEntries."; // int numberOfTestData = Integer.valueOf(properties.getProperty(testTarget + "numOfData")); // int expectedNumOfData = Integer.valueOf(properties.getProperty(testTarget + "expectedNumOfData")); // // List<LaborOriginEntry> inputDataList = getInputDataList(testTarget + "testData", numberOfTestData, groupToPost); // businessObjectService.save(inputDataList); // // for (LaborOriginEntry entry : inputDataList) { // persistenceService.retrieveNonKeyFields(entry); // } // // laborPosterService.postMainEntries(); // // Collection GLEntry = businessObjectService.findMatching(LaborGeneralLedgerEntry.class, fieldValues); // List expectedDataList = TestDataPreparator.buildExpectedValueList(LaborGeneralLedgerEntryForTesting.class, properties, testTarget + "expected", expectedNumOfData); // for (Object entry : GLEntry) { // LaborGeneralLedgerEntryForTesting GLEntryForTesting = new LaborGeneralLedgerEntryForTesting(); // ObjectUtil.buildObject(GLEntryForTesting, entry); // // assertTrue(expectedDataList.contains(GLEntryForTesting)); // } // assertEquals(expectedNumOfData, GLEntry.size()); // } // // public void testUpdateOriginEntryGroup() throws Exception { // String testTarget = "updateOriginEntryGroup."; // int numberOfTestData = Integer.valueOf(properties.getProperty(testTarget + "numOfData")); // int expectedNumOfData = Integer.valueOf(properties.getProperty(testTarget + "expectedNumOfData")); // String groupFieldNames = properties.getProperty(testTarget + "fieldNames"); // // List<LaborOriginEntry> inputDataList = getInputDataList(testTarget + "testData", numberOfTestData, groupToPost); // businessObjectService.save(inputDataList); // // for (LaborOriginEntry entry : inputDataList) { // persistenceService.retrieveNonKeyFields(entry); // } // // laborPosterService.postMainEntries(); // // Collection originEntryGroups = businessObjectService.findAll(OriginEntryGroup.class); // List expectedDataList = TestDataPreparator.buildExpectedValueList(OriginEntryGroupForTesting.class, properties, testTarget + "expected", groupFieldNames, deliminator, expectedNumOfData); // for (Object group : originEntryGroups) { // OriginEntryGroupForTesting originEntryGroupForTesting = new OriginEntryGroupForTesting(); // ObjectUtil.buildObject(originEntryGroupForTesting, group); // // assertTrue(expectedDataList.contains(originEntryGroupForTesting)); // } // assertEquals(expectedNumOfData, originEntryGroups.size()); // } // // public void testNotPostableEntries() throws Exception { // String testTarget = "notPostableEntries."; // int numberOfTestData = Integer.valueOf(properties.getProperty(testTarget + "numOfData")); // int expectedNumOfGLEntry = Integer.valueOf(properties.getProperty(testTarget + "expectedNumOfGLEntry")); // int expectedNumOfLedgerEntry = Integer.valueOf(properties.getProperty(testTarget + "expectedNumOfLedgerEntry")); // int expectedNumOfLedgerBalance = Integer.valueOf(properties.getProperty(testTarget + "expectedNumOfLedgerBalance")); // int expectedNumOfOriginEntry = Integer.valueOf(properties.getProperty(testTarget + "expectedNumOfOriginEntry")); // // List<LaborOriginEntry> inputDataList = getInputDataList(testTarget + "testData", numberOfTestData, groupToPost); // businessObjectService.save(inputDataList); // // for (LaborOriginEntry entry : inputDataList) { // persistenceService.retrieveNonKeyFields(entry); // } // // laborPosterService.postMainEntries(); // // Collection originEntries = businessObjectService.findMatching(LaborOriginEntry.class, fieldValues); // assertEquals(expectedNumOfOriginEntry, originEntries.size()); // // Collection ledgerEntries = businessObjectService.findMatching(LedgerEntry.class, fieldValues); // assertEquals(expectedNumOfLedgerEntry, ledgerEntries.size()); // // Collection ledgerBalances = businessObjectService.findMatching(LedgerBalance.class, fieldValues); // assertEquals(expectedNumOfLedgerBalance, ledgerBalances.size()); // // Collection GLEntries = businessObjectService.findMatching(LaborGeneralLedgerEntry.class, fieldValues); // assertEquals(expectedNumOfGLEntry, GLEntries.size()); // } // // public void testNotPostableEntriesToLaborGL() throws Exception { // String testTarget = "notPostableEntriesToLaborGL."; // int numberOfTestData = Integer.valueOf(properties.getProperty(testTarget + "numOfData")); // int expectedNumOfGLEntry = Integer.valueOf(properties.getProperty(testTarget + "expectedNumOfGLEntry")); // int expectedNumOfLedgerEntry = Integer.valueOf(properties.getProperty(testTarget + "expectedNumOfLedgerEntry")); // int expectedNumOfOriginEntry = Integer.valueOf(properties.getProperty(testTarget + "expectedNumOfOriginEntry")); // // List<LaborOriginEntry> inputDataList = getInputDataList(testTarget + "testData", numberOfTestData, groupToPost); // businessObjectService.save(inputDataList); // // for (LaborOriginEntry entry : inputDataList) { // persistenceService.retrieveNonKeyFields(entry); // } // // laborPosterService.postMainEntries(); // // Collection originEntries = businessObjectService.findMatching(LaborOriginEntry.class, fieldValues); // assertEquals(expectedNumOfOriginEntry, originEntries.size()); // // Collection ledgerEntries = businessObjectService.findMatching(LedgerEntry.class, fieldValues); // assertEquals(expectedNumOfLedgerEntry, ledgerEntries.size()); // // Collection<LaborGeneralLedgerEntry> GLEntries = businessObjectService.findMatching(LaborGeneralLedgerEntry.class, fieldValues); // assertEquals(expectedNumOfGLEntry, GLEntries.size()); // } // // public void testPosterPerformance() throws Exception { // String testTarget = "posterPerformance."; // int numberOfTestData = Integer.valueOf(properties.getProperty(testTarget + "numOfData")); // int numOfCopy = Integer.valueOf(properties.getProperty(testTarget + "numOfCopy")); // long expectedMaxExcutionTime = Long.valueOf(properties.getProperty(testTarget + "expectedMaxExcutionTime")); // // long startTime = System.currentTimeMillis(); // List<LaborOriginEntry> inputDataList = new ArrayList<LaborOriginEntry>(); // for (int i = 0; i < numOfCopy; i++) { // inputDataList.addAll(getInputDataList(testTarget + "testData", numberOfTestData, groupToPost)); // } // businessObjectService.save(inputDataList); // // for (LaborOriginEntry entry : inputDataList) { // persistenceService.retrieveNonKeyFields(entry); // } // long elapsedTime = System.currentTimeMillis() - startTime; // // startTime = System.currentTimeMillis(); // laborPosterService.postMainEntries(); // elapsedTime = System.currentTimeMillis() - startTime; // // assertTrue("It takes too much time to run poster against test data", elapsedTime <= expectedMaxExcutionTime); // } private List<LaborOriginEntry> getInputDataList(String propertyKeyPrefix, int numberOfInputData, OriginEntryGroup group) { return LaborTestDataPreparator.getLaborOriginEntryList(properties, propertyKeyPrefix, numberOfInputData, group); } }