/*
* 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.businessobject.lookup;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.kuali.kfs.gl.Constant;
import org.kuali.kfs.gl.businessobject.OriginEntryGroup;
import org.kuali.kfs.gl.web.TestDataGenerator;
import org.kuali.kfs.module.bc.businessobject.CalculatedSalaryFoundationTracker;
import org.kuali.kfs.module.ld.LaborConstants;
import org.kuali.kfs.module.ld.businessobject.AccountStatusBaseFunds;
import org.kuali.kfs.module.ld.service.LaborInquiryOptionsService;
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.businessobject.lookup.LookupableSpringContext;
import org.kuali.kfs.sys.context.KualiTestBase;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.context.TestUtils;
import org.kuali.rice.kns.lookup.LookupableHelperService;
import org.kuali.rice.krad.service.BusinessObjectService;
import org.kuali.rice.krad.service.PersistenceService;
/**
* This class contains test cases that can be applied to methods in Account Status Base Funds class.
*/
@ConfigureContext
public class BaseFundsLookupableHelperServiceTest extends KualiTestBase {
private BusinessObjectService businessObjectService;
private LookupableHelperService lookupableHelperService;
private PersistenceService persistenceService;
private Properties properties;
private String fieldNames;
private String deliminator;
private OriginEntryGroup groupToPost;
private Map fieldValues, groupFieldValues;
private int csfNumberOfTestData;
private int csfExpectedInsertion;
private int baseFundsNumberOfTestData;
private int baseFundsExpectedInsertion;
@Override
/**
* Get things ready for the test
*/
protected void setUp() throws Exception {
super.setUp();
businessObjectService = SpringContext.getBean(BusinessObjectService.class);
lookupableHelperService = LookupableSpringContext.getLookupableHelperService(LaborConstants.BASE_FUNDS_LOOKUP_HELPER_SRVICE_NAME);
lookupableHelperService.setBusinessObjectClass(AccountStatusBaseFunds.class);
// Clear up the database so that any existing data cannot affact your test result
Map keys = new HashMap();
keys.put(KFSPropertyConstants.ACCOUNT_NUMBER, "1031400");
keys.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, TestUtils.getFiscalYearForTesting().toString());
keys.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, "BL");
businessObjectService.deleteMatching(AccountStatusBaseFunds.class, keys);
businessObjectService.deleteMatching(CalculatedSalaryFoundationTracker.class, keys);
}
/**
*
* This method will run the base funds balance inquiry to test that the BaseFundsLookupableHelperService
* is returning data correctly.
* @throws Exception
*/
public void testGetSearchResults() throws Exception {
insertBaseFundsRecords();
insertCSFRecords();
System.out.println("**** RECORDS INSERTED !!!!!");
String messageFileName = "org/kuali/kfs/module/ld/testdata/message.properties";
String propertiesFileName = "org/kuali/kfs/module/ld/testdata/accountStatusBaseFunds.properties";
properties = (new TestDataGenerator(propertiesFileName, messageFileName)).getProperties();
fieldNames = properties.getProperty("fieldNames");
deliminator = properties.getProperty("deliminator");
properties = (new TestDataGenerator(propertiesFileName, messageFileName)).getProperties();
AccountStatusBaseFunds accountStatusBaseFunds = new AccountStatusBaseFunds();
accountStatusBaseFunds.setAccountNumber("1031400");
accountStatusBaseFunds.setUniversityFiscalYear(TestUtils.getFiscalYearForTesting());
accountStatusBaseFunds.setChartOfAccountsCode("BL");
// test the search results before the specified entry is inserted into the database
Map fieldValues = buildFieldValues(accountStatusBaseFunds, this.getLookupFields(false));
// Tells the lookupable I want detailed results
getInquiryOptionsService().getConsolidationField(lookupableHelperService.getRows()).setPropertyValue(Constant.DETAIL);
fieldValues.put(Constant.CONSOLIDATION_OPTION, Constant.DETAIL);
//List<String> groupByList = new ArrayList<String>();
List<AccountStatusBaseFunds> searchResults = (List<AccountStatusBaseFunds>) lookupableHelperService.getSearchResults(fieldValues);
// Make sure the basic search parameters are returned from the inquiry
for (AccountStatusBaseFunds accountStatusBaseFundsReturn : searchResults) {
assertTrue((accountStatusBaseFundsReturn.getAccountNumber().equals(accountStatusBaseFunds.getAccountNumber()) &&
accountStatusBaseFundsReturn.getUniversityFiscalYear().equals(accountStatusBaseFunds.getUniversityFiscalYear()) &&
accountStatusBaseFundsReturn.getChartOfAccountsCode().equals(accountStatusBaseFunds.getChartOfAccountsCode())));
}
if (searchResults != null) {
System.out.println("*** Results Size:" + searchResults.size());
}
// compare the search results with the expected and see if they match with each other
assertEquals(this.baseFundsExpectedInsertion,searchResults.size());
/*int expectedOfData = Integer.valueOf(properties.getProperty("getAccountStatusBaseFunds.expectedNumOfData"));
Collection entries = businessObjectService.findMatching(AccountStatusBaseFunds.class, fieldValues);
List expectedDataList = TestDataPreparator.buildExpectedValueList(AccountStatusBaseFunds.class, properties, "getAccountStatusBaseFunds.expected", fieldNames, deliminator, this.baseFundsExpectedInsertion);
for (Object entry : entries) {
LedgerEntryForTesting ledgerEntryForTesting = new LedgerEntryForTesting();
ObjectUtil.buildObject(ledgerEntryForTesting, entry);
assertTrue(expectedDataList.contains(ledgerEntryForTesting));
}
assertEquals(expectedNumOfData, ledgerEntries.size());*/
String testTarget = "getAccountStatusBaseFunds.";
//Collection ledgerEntries = businessObjectService.findMatching(AccountStatusBaseFunds.class, fieldValues);
System.out.println("****1111");
List expectedDataList = TestDataPreparator.buildExpectedValueList(AccountStatusBaseFunds.class, properties, testTarget + "expected", fieldNames, deliminator, this.baseFundsExpectedInsertion);
for (Object expectedAccountStatusBaseFundsAsObject : expectedDataList) {
AccountStatusBaseFunds expectedAccountStatusBaseFunds = (AccountStatusBaseFunds)expectedAccountStatusBaseFundsAsObject;
expectedAccountStatusBaseFunds.setUniversityFiscalYear(TestUtils.getFiscalYearForTesting());
}
System.out.println("****2222");
for (int i=0;i < searchResults.size();i++) {
//AccountStatusBaseFundsForTesting accountStatusBaseFundsForTesting = new AccountStatusBaseFundsForTesting();
//accountStatusBaseFunds = new AccountStatusBaseFunds();
//ObjectUtil.buildObject(accountStatusBaseFunds, entry);
accountStatusBaseFunds = ((AccountStatusBaseFunds)searchResults.get(i));
System.out.println("*********DATA:"+accountStatusBaseFunds.toString());
assertTrue(expectedDataList.contains(accountStatusBaseFunds));
}
assertEquals(this.baseFundsExpectedInsertion, searchResults.size());
}
/**
*
* This method will run the base funds balance inquiry to test that the BaseFundsLookupableHelperService
* is returning data correctly.
* @throws Exception
*
public void testGetSearchResultsConsolidated() throws Exception {
insertBaseFundsRecords();
//insertCSFRecords();
AccountStatusBaseFunds accountStatusBaseFunds = new AccountStatusBaseFunds();
accountStatusBaseFunds.setAccountNumber("1031400");
accountStatusBaseFunds.setUniversityFiscalYear(2007);
accountStatusBaseFunds.setChartOfAccountsCode("BL");
// test the search results before the specified entry is inserted into the database
Map fieldValues = buildFieldValues(accountStatusBaseFunds, this.getLookupFields(false));
// Tells the lookupable I want consolidated results
getInquiryOptionsService().getConsolidationField(lookupableHelperService.getRows()).setPropertyValue(Constant.CONSOLIDATION);
fieldValues.put(Constant.CONSOLIDATION_OPTION, Constant.CONSOLIDATION);
List<String> groupByList = new ArrayList<String>();
List<AccountStatusBaseFunds> searchResults = lookupableHelperService.getSearchResults(fieldValues);
// Make sure the basic search parameters are returned from the inquiry
for (AccountStatusBaseFunds accountStatusBaseFundsReturn : searchResults) {
assertFalse(!(accountStatusBaseFundsReturn.getAccountNumber().equals(accountStatusBaseFunds.getAccountNumber()) &&
accountStatusBaseFundsReturn.getUniversityFiscalYear().equals(accountStatusBaseFunds.getUniversityFiscalYear()) &&
accountStatusBaseFundsReturn.getChartOfAccountsCode().equals(accountStatusBaseFunds.getChartOfAccountsCode())));
}
if (searchResults != null) {
System.out.println("Results Size:" + searchResults.size());
}
// compare the search results with the expected and see if they match with each other
assertEquals(this.baseFundsExpectedInsertion,searchResults.size());
}*/
/**
*
* This method uses property file parameters to create insert database records for this test
* @param accountStatusBaseFunds
* @param lookupFields
* @return
*/
private Map<String, String> buildFieldValues(AccountStatusBaseFunds accountStatusBaseFunds, List<String> lookupFields) {
Map<String, String> fieldValues = new HashMap<String, String>();
Map<String, Object> tempFieldValues = ObjectUtil.buildPropertyMap(accountStatusBaseFunds, lookupFields);
for (String key : tempFieldValues.keySet()) {
fieldValues.put(key, tempFieldValues.get(key).toString());
}
return fieldValues;
}
/**
*
* This method adds property constatants for future lookups
* @param isExtended
* @return
*/
private List<String> getLookupFields(boolean isExtended) {
List<String> lookupFields = new ArrayList<String>();
lookupFields.add(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR);
lookupFields.add(KFSPropertyConstants.ACCOUNT_NUMBER);
lookupFields.add(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
return lookupFields;
}
/**
* This method will add temporary test data to the CSF Tracker table
*/
protected void insertCSFRecords() {
String messageFileName = "org/kuali/kfs/module/ld/testdata/message.properties";
String propertiesFileName = "org/kuali/kfs/module/ld/testdata/csfTracker.properties";
properties = (new TestDataGenerator(propertiesFileName, messageFileName)).getProperties();
fieldNames = properties.getProperty("fieldNames");
String documentFieldNames = properties.getProperty("fieldNames");
deliminator = properties.getProperty("deliminator");
//CalculatedSalaryFoundationTracker cleanup = new CalculatedSalaryFoundationTracker();
//ObjectUtil.populateBusinessObject(cleanup, properties, "dataCleanup", fieldNames, deliminator);
//Map fieldValues = ObjectUtil.buildPropertyMap(cleanup, Arrays.asList(StringUtils.split(fieldNames, deliminator)));
//businessObjectService.deleteMatching(CalculatedSalaryFoundationTracker.class, fieldValues);
TestDataGenerator testDataGenerator = new TestDataGenerator(propertiesFileName, messageFileName);
businessObjectService = SpringContext.getBean(BusinessObjectService.class);
persistenceService = SpringContext.getBean(PersistenceService.class);
int numberOfDocuments = Integer.valueOf(properties.getProperty("getCSFTracker.numberOfDocuments"));
List<CalculatedSalaryFoundationTracker> inputDataList = new ArrayList<CalculatedSalaryFoundationTracker>();
for (int i = 1; i <= numberOfDocuments; i++) {
String propertyKey = "getCSFTracker.testData" + i;
CalculatedSalaryFoundationTracker inputData = new CalculatedSalaryFoundationTracker();
ObjectUtil.populateBusinessObject(inputData, properties, propertyKey, documentFieldNames, deliminator);
inputData.setUniversityFiscalYear(TestUtils.getFiscalYearForTesting());
inputDataList.add(inputData);
}
String testTarget = "getCSFTracker.";
this.csfNumberOfTestData = Integer.valueOf(properties.getProperty(testTarget + "numberOfDocuments"));
this.csfExpectedInsertion = Integer.valueOf(properties.getProperty(testTarget + "expectedInsertion"));
businessObjectService.save(inputDataList);
}
/**
* This method will add temporary test data to the Ledger Balance table
*/
protected void insertBaseFundsRecords() {
String testTarget = "getAccountStatusBaseFunds.";
String propertyKey;
AccountStatusBaseFunds inputData;
String messageFileName = "org/kuali/kfs/module/ld/testdata/message.properties";
String propertiesFileName = "org/kuali/kfs/module/ld/testdata/accountStatusBaseFunds.properties";
properties = (new TestDataGenerator(propertiesFileName, messageFileName)).getProperties();
fieldNames = properties.getProperty("fieldNames");
deliminator = properties.getProperty("deliminator");
TestDataGenerator testDataGenerator = new TestDataGenerator(propertiesFileName, messageFileName);
businessObjectService = SpringContext.getBean(BusinessObjectService.class);
persistenceService = SpringContext.getBean(PersistenceService.class);
int numberOfData = Integer.valueOf(properties.getProperty(testTarget+"numOfData"));
List<AccountStatusBaseFunds> inputDataList = new ArrayList<AccountStatusBaseFunds>();
for (int i = 1; i <= numberOfData; i++) {
inputData = new AccountStatusBaseFunds();
propertyKey = testTarget+"testData" + i;
ObjectUtil.populateBusinessObject(inputData, properties, propertyKey, fieldNames, deliminator);
inputData.setUniversityFiscalYear(TestUtils.getFiscalYearForTesting());
inputDataList.add(inputData);
}
this.baseFundsNumberOfTestData = Integer.valueOf(properties.getProperty(testTarget + "numOfData"));
this.baseFundsExpectedInsertion = Integer.valueOf(properties.getProperty(testTarget + "expectedNumOfData"));
businessObjectService.save(inputDataList);
/*int expectedOfData = Integer.valueOf(properties.getProperty("getAccountStatusBaseFunds.expectedNumOfData"));
Collection ledgerEntries = businessObjectService.findMatching(LedgerBalance.class, fieldValues);
List expectedDataList = TestDataPreparator.buildExpectedValueList(LedgerEntryForTesting.class, properties, "getAccountStatusBaseFunds.expected", fieldNames, deliminator, expectedNumOfData);
for (Object entry : ledgerEntries) {
LedgerEntryForTesting ledgerEntryForTesting = new LedgerEntryForTesting();
ObjectUtil.buildObject(ledgerEntryForTesting, entry);
assertTrue(expectedDataList.contains(ledgerEntryForTesting));
}
assertEquals(expectedNumOfData, ledgerEntries.size());*/
}
private LaborInquiryOptionsService getInquiryOptionsService() {
return SpringContext.getBean(LaborInquiryOptionsService.class);
}
}