/* * 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.ec.document.validation.impl; import java.util.List; import java.util.Properties; import org.kuali.kfs.integration.ld.LaborLedgerBalance; import org.kuali.kfs.integration.ld.LaborModuleService; import org.kuali.kfs.module.ec.businessobject.EffortCertificationReportDefinition; import org.kuali.kfs.module.ec.testdata.EffortTestDataPropertyConstants; import org.kuali.kfs.module.ld.businessobject.LedgerBalanceForEffortCertification; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.Message; 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.krad.service.BusinessObjectService; import org.kuali.rice.krad.service.KualiModuleService; import org.kuali.rice.krad.service.PersistenceService; @ConfigureContext public class LedgerBalanceFieldValidatorTest extends KualiTestBase { private Properties properties, message; private String balanceFieldNames; private String deliminator; Integer postingYear; private BusinessObjectService businessObjectService; private PersistenceService persistenceService; private LaborModuleService laborModuleService; private Class<? extends LaborLedgerBalance> ledgerBalanceClass; /** * Constructs a LedgerBalanceFieldValidatorTest.java. */ public LedgerBalanceFieldValidatorTest() { super(); String messageFileName = EffortTestDataPropertyConstants.TEST_DATA_PACKAGE_NAME + "/message.properties"; String propertiesFileName = EffortTestDataPropertyConstants.TEST_DATA_PACKAGE_NAME + "/ledgerBalanceFieldValidator.properties"; properties = TestDataPreparator.loadPropertiesFromClassPath(propertiesFileName); message = TestDataPreparator.loadPropertiesFromClassPath(messageFileName); deliminator = properties.getProperty(EffortTestDataPropertyConstants.DELIMINATOR); balanceFieldNames = properties.getProperty(EffortTestDataPropertyConstants.BALANCE_FIELD_NAMES); } @Override public void setUp() throws Exception { super.setUp(); businessObjectService = SpringContext.getBean(BusinessObjectService.class); persistenceService = SpringContext.getBean(PersistenceService.class); laborModuleService = SpringContext.getBean(LaborModuleService.class); KualiModuleService kualiModuleService = SpringContext.getBean(KualiModuleService.class); ledgerBalanceClass = LedgerBalanceForEffortCertification.class; TestDataPreparator.doCleanUpWithoutReference(ledgerBalanceClass, properties, EffortTestDataPropertyConstants.DATA_CLEANUP, balanceFieldNames, deliminator); } public void testHasValidAccount_valid() throws Exception { String testTarget = "hasValidAccount.valid."; LaborLedgerBalance ledgerBalance = this.buildLedgerBalance(testTarget); Message validationMessage = LedgerBalanceFieldValidator.hasValidAccount(ledgerBalance); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.hasValidAccount.valid"); assertTrue(errorMessage, validationMessage == null); } public void testHasValidAccount_invalid() throws Exception { String testTarget = "hasValidAccount.invalid."; // the test is disable because the account in the test data volates an integrity constraint foreign and the test data cannot // be stored into database // LedgerBalance ledgerBalance = this.buildLedgerBalance(testTarget); // Message validationMessage = LedgerBalanceFieldValidator.hasValidAccount(ledgerBalance); // String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.hasValidAccount.invalid"); // assertTrue(errorMessage.toString(), validationMessage != null); } public void testIsInFundGroups_Contain() throws Exception { String testTarget = "isInFundGroups.contain."; LaborLedgerBalance ledgerBalance = this.buildLedgerBalance(testTarget); List<String> fundGroupCodes = ObjectUtil.split(properties.getProperty(testTarget + EffortTestDataPropertyConstants.FUND_GROUPS), deliminator); Message validationMessage = LedgerBalanceFieldValidator.isInFundGroups(ledgerBalance, fundGroupCodes); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.isInFundGroups.contain"); assertTrue(errorMessage, validationMessage == null); } public void testIsInFundGroups_NotContain() throws Exception { String testTarget = "isInFundGroups.notContain."; LaborLedgerBalance ledgerBalance = this.buildLedgerBalance(testTarget); List<String> fundGroupCodes = ObjectUtil.split(properties.getProperty(testTarget + EffortTestDataPropertyConstants.FUND_GROUPS), deliminator); Message validationMessage = LedgerBalanceFieldValidator.isInFundGroups(ledgerBalance, fundGroupCodes); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.isInFundGroups.notContain"); assertTrue(errorMessage.toString(), validationMessage != null); } public void testIsInSubFundGroups_Contain() throws Exception { String testTarget = "isInSubFundGroups.contain."; LaborLedgerBalance ledgerBalance = this.buildLedgerBalance(testTarget); List<String> fundGroupCodes = ObjectUtil.split(properties.getProperty(testTarget + EffortTestDataPropertyConstants.SUB_FUND_GROUPS), deliminator); Message validationMessage = LedgerBalanceFieldValidator.isInSubFundGroups(ledgerBalance, fundGroupCodes); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.isInSubFundGroups.contain"); assertTrue(errorMessage, validationMessage == null); } public void testIsInSubFundGroups_NotContain() throws Exception { String testTarget = "isInSubFundGroups.notContain."; LaborLedgerBalance ledgerBalance = this.buildLedgerBalance(testTarget); List<String> fundGroupCodes = ObjectUtil.split(properties.getProperty(testTarget + EffortTestDataPropertyConstants.SUB_FUND_GROUPS), deliminator); Message validationMessage = LedgerBalanceFieldValidator.isInSubFundGroups(ledgerBalance, fundGroupCodes); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.isInSubFundGroups.notContain"); assertTrue(errorMessage.toString(), validationMessage != null); } public void testIsNonZeroAmountBalanceWithinReportPeriod_IsNonZeroAmount() throws Exception { String testTarget = "isNonZeroAmountBalanceWithinReportPeriod.isNonZeroAmount."; LaborLedgerBalance ledgerBalance = this.buildLedgerBalance(testTarget); EffortCertificationReportDefinition reportDefinition = this.buildReportDefinition(testTarget); Message validationMessage = LedgerBalanceFieldValidator.isNonZeroAmountBalanceWithinReportPeriod(ledgerBalance, reportDefinition.getReportPeriods()); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.isNonZeroAmountBalanceWithinReportPeriod.isNonZeroAmount"); assertTrue(errorMessage, validationMessage == null); } public void testIsNonZeroAmountBalanceWithinReportPeriod_IsZeroAmount() throws Exception { String testTarget = "isNonZeroAmountBalanceWithinReportPeriod.isZeroAmount."; LaborLedgerBalance ledgerBalance = this.buildLedgerBalance(testTarget); EffortCertificationReportDefinition reportDefinition = this.buildReportDefinition(testTarget); Message validationMessage = LedgerBalanceFieldValidator.isNonZeroAmountBalanceWithinReportPeriod(ledgerBalance, reportDefinition.getReportPeriods()); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.isNonZeroAmountBalanceWithinReportPeriod.isZeroAmount"); assertTrue(errorMessage.toString(), validationMessage != null); } public void testIsTotalAmountPositive_IsPositive() throws Exception { String testTarget = "isTotalAmountPositive.isPositive."; List<LaborLedgerBalance> ledgerBalances = this.buildLedgerBalances(testTarget); EffortCertificationReportDefinition reportDefinition = this.buildReportDefinition(testTarget); Message validationMessage = LedgerBalanceFieldValidator.isTotalAmountPositive(ledgerBalances, reportDefinition.getReportPeriods()); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.isTotalAmountPositive.isPositive"); assertTrue(errorMessage.toString(), validationMessage == null); } public void testIsTotalAmountPositive_IsZero() throws Exception { String testTarget = "isTotalAmountPositive.isZero."; List<LaborLedgerBalance> ledgerBalances = this.buildLedgerBalances(testTarget); EffortCertificationReportDefinition reportDefinition = this.buildReportDefinition(testTarget); Message validationMessage = LedgerBalanceFieldValidator.isTotalAmountPositive(ledgerBalances, reportDefinition.getReportPeriods()); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.isTotalAmountPositive.isZero"); assertTrue(errorMessage.toString(), validationMessage != null); } public void testIsTotalAmountPositive_IsNegative() throws Exception { String testTarget = "isTotalAmountPositive.isNegative."; List<LaborLedgerBalance> ledgerBalances = this.buildLedgerBalances(testTarget); EffortCertificationReportDefinition reportDefinition = this.buildReportDefinition(testTarget); Message validationMessage = LedgerBalanceFieldValidator.isTotalAmountPositive(ledgerBalances, reportDefinition.getReportPeriods()); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.isTotalAmountPositive.isNegative"); assertTrue(errorMessage.toString(), validationMessage != null); } public void testHasGrantAccount_ByFundGroup_Contain() throws Exception { String testTarget = "hasGrantAccount.byFundGroup.contain."; List<LaborLedgerBalance> ledgerBalances = this.buildLedgerBalances(testTarget); List<String> fundGroupCodes = ObjectUtil.split(properties.getProperty(testTarget + EffortTestDataPropertyConstants.FUND_GROUPS), deliminator); Message validationMessage = LedgerBalanceFieldValidator.hasGrantAccount(ledgerBalances); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.hasGrantAccount.byFundGroup.contain"); assertTrue(errorMessage.toString(), validationMessage == null); } public void testHasGrantAccount_ByFundGroup_NotContain() throws Exception { String testTarget = "hasGrantAccount.byFundGroup.notContain."; List<LaborLedgerBalance> ledgerBalances = this.buildLedgerBalances(testTarget); List<String> fundGroupCodes = ObjectUtil.split(properties.getProperty(testTarget + EffortTestDataPropertyConstants.FUND_GROUPS), deliminator); Message validationMessage = LedgerBalanceFieldValidator.hasGrantAccount(ledgerBalances); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.hasGrantAccount.byFundGroup.notContain"); assertTrue(errorMessage.toString(), validationMessage != null); } public void testHasGrantAccount_BySubFundGroup_Contain() throws Exception { String testTarget = "hasGrantAccount.bySubFundGroup.contain."; List<LaborLedgerBalance> ledgerBalances = this.buildLedgerBalances(testTarget); List<String> fundGroupCodes = ObjectUtil.split(properties.getProperty(testTarget + EffortTestDataPropertyConstants.SUB_FUND_GROUPS), deliminator); Message validationMessage = LedgerBalanceFieldValidator.hasGrantAccount(ledgerBalances); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.hasGrantAccount.bySubFundGroup.contain"); assertTrue(errorMessage.toString(), validationMessage == null); } public void testHasGrantAccount_BySubFundGroup_NotContain() throws Exception { String testTarget = "hasGrantAccount.bySubFundGroup.notContain."; List<LaborLedgerBalance> ledgerBalances = this.buildLedgerBalances(testTarget); List<String> fundGroupCodes = ObjectUtil.split(properties.getProperty(testTarget + EffortTestDataPropertyConstants.SUB_FUND_GROUPS), deliminator); Message validationMessage = LedgerBalanceFieldValidator.hasGrantAccount(ledgerBalances); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.hasGrantAccount.bySubFundGroup.notContain"); assertTrue(errorMessage.toString(), validationMessage != null); } public void testIsFromSingleOrganization_Single() throws Exception { String testTarget = "isFromSingleOrganization.single."; List<LaborLedgerBalance> ledgerBalances = this.buildLedgerBalances(testTarget); Message validationMessage = LedgerBalanceFieldValidator.isFromSingleOrganization(ledgerBalances); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.isFromSingleOrganization.single"); assertTrue(errorMessage.toString(), validationMessage == null); } public void testIsFromSingleOrganization_Multiple() throws Exception { String testTarget = "isFromSingleOrganization.multiple."; List<LaborLedgerBalance> ledgerBalances = this.buildLedgerBalances(testTarget); Message validationMessage = LedgerBalanceFieldValidator.isFromSingleOrganization(ledgerBalances); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.isFromSingleOrganization.multiple"); assertTrue(errorMessage, validationMessage != null); } public void testHasFederalFunds_FederalFunds() throws Exception { String testTarget = "hasFederalFunds.federalFunds."; List<LaborLedgerBalance> ledgerBalances = this.buildLedgerBalances(testTarget); List<String> federalAgencyTypeCodes = ObjectUtil.split(properties.getProperty(testTarget + EffortTestDataPropertyConstants.FEDERAL_AGENCY_TYPE_CODES), deliminator); Message validationMessage = LedgerBalanceFieldValidator.hasFederalFunds(ledgerBalances, federalAgencyTypeCodes); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.hasFederalFunds.federalFunds"); assertTrue(errorMessage.toString(), validationMessage == null); } public void testHasFederalFunds_PassThrough() throws Exception { String testTarget = "hasFederalFunds.passThrough."; List<LaborLedgerBalance> ledgerBalances = this.buildLedgerBalances(testTarget); List<String> federalAgencyTypeCodes = ObjectUtil.split(properties.getProperty(testTarget + EffortTestDataPropertyConstants.FEDERAL_AGENCY_TYPE_CODES), deliminator); Message validationMessage = LedgerBalanceFieldValidator.hasFederalFunds(ledgerBalances, federalAgencyTypeCodes); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.hasFederalFunds.passThrough"); assertTrue(errorMessage.toString(), validationMessage == null); } public void testHasFederalFunds_NoFederalFunds() throws Exception { String testTarget = "hasFederalFunds.noFederalFunds."; List<LaborLedgerBalance> ledgerBalances = this.buildLedgerBalances(testTarget); List<String> federalAgencyTypeCodes = ObjectUtil.split(properties.getProperty(testTarget + EffortTestDataPropertyConstants.FEDERAL_AGENCY_TYPE_CODES), deliminator); Message validationMessage = LedgerBalanceFieldValidator.hasFederalFunds(ledgerBalances, federalAgencyTypeCodes); String errorMessage = message.getProperty("error.ledgerBalanceFieldValidator.hasFederalFunds.noFederalFunds"); assertTrue(errorMessage.toString(), validationMessage != null); } /** * construct a ledger balance and persist it * * @param testTarget the given test target that specifies the test data being used * @return a ledger balance */ private LaborLedgerBalance buildLedgerBalance(String testTarget) { LaborLedgerBalance ledgerBalance = TestDataPreparator.buildTestDataObject(ledgerBalanceClass, properties, testTarget + EffortTestDataPropertyConstants.INPUT_BALANCE, balanceFieldNames, deliminator); businessObjectService.save(ledgerBalance); persistenceService.retrieveNonKeyFields(ledgerBalance); ledgerBalance.refreshNonUpdateableReferences(); return ledgerBalance; } /** * construct a list of ledger balances and persist them * * @param testTarget the given test target that specifies the test data being used * @return a list of ledger balances */ private List<LaborLedgerBalance> buildLedgerBalances(String testTarget) { int numberOfTestData = Integer.valueOf(properties.getProperty(testTarget + EffortTestDataPropertyConstants.NUM_OF_DATA)); List<LaborLedgerBalance> ledgerBalances = TestDataPreparator.buildTestDataList(ledgerBalanceClass, properties, testTarget + EffortTestDataPropertyConstants.INPUT_BALANCE, balanceFieldNames, deliminator, numberOfTestData); businessObjectService.save(ledgerBalances); for (LaborLedgerBalance balance : ledgerBalances) { persistenceService.retrieveNonKeyFields(balance); balance.refreshNonUpdateableReferences(); } return ledgerBalances; } /** * build a report defintion object from the given test target * * @param testTarget the given test target that specifies the test data being used * @return a report defintion object */ private EffortCertificationReportDefinition buildReportDefinition(String testTarget) { EffortCertificationReportDefinition reportDefinition = new EffortCertificationReportDefinition(); String reprtDefinitionFieldNames = properties.getProperty(EffortTestDataPropertyConstants.REPORT_DEFINITION_FIELD_NAMES); ObjectUtil.populateBusinessObject(reportDefinition, properties, testTarget + EffortTestDataPropertyConstants.REPORT_DEFINITION_FIELD_VALUES, reprtDefinitionFieldNames, deliminator); return reportDefinition; } }