/* * 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.service; import java.util.ArrayList; import java.util.List; import org.kuali.kfs.coa.businessobject.Account; import org.kuali.kfs.coa.businessobject.SubFundGroup; import org.kuali.kfs.integration.ld.LaborLedgerExpenseTransferAccountingLine; import org.kuali.kfs.module.ld.businessobject.ExpenseTransferTargetAccountingLine; import org.kuali.kfs.module.ld.document.SalaryExpenseTransferDocument; import org.kuali.kfs.module.ld.document.service.impl.SalaryExpenseTransferTransactionAgeServiceImpl; import org.kuali.kfs.module.ld.document.validation.impl.SalaryExpenseTransferDocumentRuleConstants; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.businessobject.UniversityDate; import org.kuali.kfs.sys.context.KualiTestBase; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.context.TestUtils; import org.kuali.kfs.sys.service.UniversityDateService; import org.kuali.kfs.sys.service.impl.KfsParameterConstants; import org.kuali.kfs.sys.service.impl.UniversityDateServiceImpl; import org.kuali.rice.coreservice.framework.parameter.ParameterService; /** * The unit tests for methods in SalaryExpenseTransferTransactionAgeService. This specifically tests to make sure the correct * parameters are used based on the age of the transaction and the subfund. It only sets up a target accounting line because 1) the * same logic to test a source accounting line is triggered and 2) the subfund logic only applies to target accounting lines. * * @see org.kuali.kfs.module.ld.document.service.impl.SalaryExpenseTransferTransactionAgeServiceImpl */ @ConfigureContext public class SalaryExpenseTransferTransactionAgeServiceTest extends KualiTestBase { private static final Integer DEFAULT_PARM_FISCAL_PERIODS = new Integer("3"); private static final Integer SUBFUND_PARM_FISCAL_PERIODS = new Integer("2"); private static final String DEFAULT_PARM_SUBFUND = "FEDERA=2"; private static final String YOUNGER_FISCAL_PER = "11"; private static final String OLDER_FISCAL_PER = "7"; private static final String NON_PARM_SUBFUND = "AG"; private static final String PARM_SUBFUND = "FEDERA"; private static final String TEST_FISCAL_PERIOD = "13"; private SalaryExpenseTransferTransactionAgeServiceImpl salaryExpenseTransferTransactionAgeService; private MyUniversityDateService universityDateService; private UniversityDateService oldDateService; private SalaryExpenseTransferDocument stDoc; @Override public void setUp() throws Exception { super.setUp(); salaryExpenseTransferTransactionAgeService = new SalaryExpenseTransferTransactionAgeServiceImpl(); universityDateService = new MyUniversityDateService(); oldDateService = salaryExpenseTransferTransactionAgeService.getUniversityDateService(); salaryExpenseTransferTransactionAgeService.setUniversityDateService(universityDateService); salaryExpenseTransferTransactionAgeService.setParameterService(SpringContext.getBean(ParameterService.class)); TestUtils.setSystemParameter(KfsParameterConstants.LABOR_DOCUMENT.class, SalaryExpenseTransferDocumentRuleConstants.DEFAULT_NUMBER_OF_FISCAL_PERIODS_ERROR_CERTIFICATION_TAB_REQUIRED, DEFAULT_PARM_FISCAL_PERIODS.toString()); TestUtils.setSystemParameter(KfsParameterConstants.LABOR_DOCUMENT.class, SalaryExpenseTransferDocumentRuleConstants.ERROR_CERTIFICATION_DEFAULT_OVERRIDE_BY_SUB_FUND, DEFAULT_PARM_SUBFUND); } @Override public void tearDown() throws Exception { super.tearDown(); this.salaryExpenseTransferTransactionAgeService.setUniversityDateService(oldDateService); } /** * Test the case where a target accounting line is "younger" and the subfund is not in the * ERROR_CERTIFICATION_DEFAULT_OVERRIDE_BY_SUB_FUND parameter. This is therefore based on fiscal periods and the * DEFAULT_NUMBER_OF_FISCAL_PERIODS_ERROR_CERTIFICATION_TAB_REQUIRED parameter. The target accounting line will use the current * year and will be set to YOUNGER_FISCAL_PER. The validation will use the UniversityDateService that is defined in this test * class. */ public void testYoungerAccountingLine() { List<LaborLedgerExpenseTransferAccountingLine> accountingLines = createAccountingLinesList(YOUNGER_FISCAL_PER, NON_PARM_SUBFUND); boolean isYounger = salaryExpenseTransferTransactionAgeService.defaultNumberOfFiscalPeriodsCheck(accountingLines, DEFAULT_PARM_FISCAL_PERIODS); assertTrue("The transaction is older, but should be younger.", isYounger); } /** * Test the case where a target accounting line is "older" and the subfund is not in the * ERROR_CERTIFICATION_DEFAULT_OVERRIDE_BY_SUB_FUND parameter. This is therefore based on fiscal periods and the * DEFAULT_NUMBER_OF_FISCAL_PERIODS_ERROR_CERTIFICATION_TAB_REQUIRED parameter. The target accounting line will use the current * year and will be set to OLDER_FISCAL_PER. The validation will use the UniversityDateService that is defined in this test * class. Note that defaultNumberOfFiscalPeriodsCheck returns true of all transactions are younger. */ public void testOlderAccountingLine() { List<LaborLedgerExpenseTransferAccountingLine> accountingLines = createAccountingLinesList(OLDER_FISCAL_PER, NON_PARM_SUBFUND); boolean isYounger = salaryExpenseTransferTransactionAgeService.defaultNumberOfFiscalPeriodsCheck(accountingLines, DEFAULT_PARM_FISCAL_PERIODS); assertFalse("The transaction is younger, but should be older.", isYounger); } /** * Test the case where a target accounting line is "older" and the subfund is in the * ERROR_CERTIFICATION_DEFAULT_OVERRIDE_BY_SUB_FUND parameter. This is based on fiscal periods and the * ERROR_CERTIFICATION_DEFAULT_OVERRIDE_BY_SUB_FUND parameter. The target accounting line will use the current year and will be * set to OLDER_FISCAL_PER. The validation will use the UniversityDateService that is defined in this test class. Note that * defaultNumberOfFiscalPeriodsCheck returns true of all transactions are younger. */ public void testSubFundParameterTrigger() { List<LaborLedgerExpenseTransferAccountingLine> accountingLines = createAccountingLinesList(OLDER_FISCAL_PER, PARM_SUBFUND); boolean isYounger = salaryExpenseTransferTransactionAgeService.defaultNumberOfFiscalPeriodsCheck(accountingLines, SUBFUND_PARM_FISCAL_PERIODS); assertFalse("The transaction should have been considered older and had a subfund that is in the ERROR_CERTIFICATION_DEFAULT_OVERRIDE_BY_SUB_FUND parameter.", isYounger); } /** * Creates target accounting lines for use in the unit tests based on the fiscalPeriod and subFund that are passed in. * * @param fiscalPeriod * @param subFund * @return accountingLines for testing */ public List createAccountingLinesList(String fiscalPeriod, String subFund) { List<LaborLedgerExpenseTransferAccountingLine> accountingLines = new ArrayList<LaborLedgerExpenseTransferAccountingLine>(); Account account = new Account(); SubFundGroup subFundGroup = new SubFundGroup(); subFundGroup.setSubFundGroupCode(subFund); account.setSubFundGroup(subFundGroup); // create a target accounting line for testing in set object ExpenseTransferTargetAccountingLine targetAccountingLine = new ExpenseTransferTargetAccountingLine(); targetAccountingLine.setPayrollEndDateFiscalYear(salaryExpenseTransferTransactionAgeService.getUniversityDateService().getCurrentUniversityDate().getUniversityFiscalYear()); targetAccountingLine.setPayrollEndDateFiscalPeriodCode(fiscalPeriod); targetAccountingLine.setAccount(account); accountingLines.add(targetAccountingLine); return accountingLines; } /** * Fake the current university date for this test to be in the TEST_FISCAL_PERIOD. */ static class MyUniversityDateService extends UniversityDateServiceImpl { @Override public UniversityDate getCurrentUniversityDate() { UniversityDate universityDate = SpringContext.getBean(UniversityDateService.class).getCurrentUniversityDate(); universityDate.setUniversityFiscalAccountingPeriod(TEST_FISCAL_PERIOD); return universityDate; } } }