/* * 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.sys.document.validation; import static org.kuali.kfs.sys.KualiTestAssertionUtils.assertGlobalMessageMapContains; import static org.kuali.kfs.sys.KualiTestAssertionUtils.assertGlobalMessageMapEmpty; import static org.kuali.kfs.sys.fixture.AccountFixture.ACCOUNT_NON_PRESENCE_ACCOUNT; import static org.kuali.kfs.sys.fixture.AccountFixture.ACCOUNT_PRESENCE_ACCOUNT_BUT_CLOSED; import static org.kuali.kfs.sys.fixture.AccountFixture.ACCOUNT_PRESENCE_ACCOUNT_WITH_EXPIRED; import static org.kuali.kfs.sys.fixture.AccountFixture.ACTIVE_ACCOUNT; import static org.kuali.kfs.sys.fixture.AccountFixture.CLOSED_ACCOUNT; import static org.kuali.kfs.sys.fixture.AccountFixture.EXPIRIED_ACCOUNT; import static org.kuali.kfs.sys.fixture.AccountFixture.EXPIRIED_ACCOUNT_EXPIRIED_AND_CLOSED_CONTINUATION; import static org.kuali.kfs.sys.fixture.AccountFixture.EXPIRIED_ACCOUNT_EXPIRIED_AND_OPEN_CONTINUATION; import static org.kuali.kfs.sys.fixture.AccountFixture.EXPIRIED_ACCOUNT_NO_CONTINUATION; import static org.kuali.kfs.sys.fixture.ObjectCodeFixture.OBJECT_CODE_BUDGETED_OBJECT_CODE; import static org.kuali.kfs.sys.fixture.ObjectCodeFixture.OBJECT_CODE_NON_BUDGET_OBJECT_CODE; import org.kuali.kfs.coa.businessobject.Account; import org.kuali.kfs.coa.businessobject.ObjectCode; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.KFSConstants; import org.kuali.kfs.sys.KFSKeyConstants; import org.kuali.kfs.sys.businessobject.AccountingLine; import org.kuali.kfs.sys.businessobject.AccountingLineOverride; import org.kuali.kfs.sys.businessobject.SourceAccountingLine; import org.kuali.kfs.sys.context.KualiTestBase; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.document.service.AccountingLineRuleHelperService; import org.kuali.rice.kns.service.DataDictionaryService; import org.kuali.rice.krad.service.BusinessObjectService; /** * This class tests some methods of AccountingLineRuleUtil. */ @ConfigureContext public class AccountingLineRuleUtilTest extends KualiTestBase { public void testLabelsAreInDataDictionary() { AccountingLineRuleHelperService accountingLineRuleUtil = SpringContext.getBean(AccountingLineRuleHelperService.class); assertNotNull(accountingLineRuleUtil.getChartLabel()); assertNotNull(accountingLineRuleUtil.getAccountLabel()); assertNotNull(accountingLineRuleUtil.getSubAccountLabel()); assertNotNull(accountingLineRuleUtil.getObjectCodeLabel()); assertNotNull(accountingLineRuleUtil.getSubObjectCodeLabel()); assertNotNull(accountingLineRuleUtil.getProjectCodeLabel()); assertNotNull(accountingLineRuleUtil.getObjectTypeCodeLabel()); assertNotNull(accountingLineRuleUtil.getObjectSubTypeCodeLabel()); assertNotNull(accountingLineRuleUtil.getOrganizationCodeLabel()); assertNotNull(accountingLineRuleUtil.getFundGroupCodeLabel()); assertNotNull(accountingLineRuleUtil.getSubFundGroupCodeLabel()); } public void testIsValidAccount_valid() { testIsValidAccount(ACTIVE_ACCOUNT.createAccount(), null); } public void testIsValidAccount_null() { testIsValidAccount(null, KFSKeyConstants.ERROR_EXISTING_WITH_IDENTIFYING_ACCOUNTING_LINE); } public void testIsValidAccount_closed() { testIsValidAccount(CLOSED_ACCOUNT.createAccount(), KFSKeyConstants.ERROR_DOCUMENT_ACCOUNT_CLOSED_WITH_IDENTIFYING_ACCOUNTING_LINE); } private void testIsValidAccount(Account account, String expectedErrorKey) { assertGlobalMessageMapEmpty(); AccountingLineRuleHelperService accountingLineRuleUtil = SpringContext.getBean(AccountingLineRuleHelperService.class); boolean actual = accountingLineRuleUtil.isValidAccount("", account, SpringContext.getBean(DataDictionaryService.class).getDataDictionary()); assertEquals("isValidAccount result", expectedErrorKey == null, actual); if (expectedErrorKey == null) { assertGlobalMessageMapEmpty(); } else { assertGlobalMessageMapContains(KFSConstants.ACCOUNT_NUMBER_PROPERTY_NAME, expectedErrorKey); } } public void testHasRequiredOverrides_valid() { testHasRequiredOverrides(ACTIVE_ACCOUNT.createAccount(), AccountingLineOverride.CODE.NONE, null, null); } public void testHasRequiredOverrides_blank_valid() { testHasRequiredOverrides(ACTIVE_ACCOUNT.createAccount(), AccountingLineOverride.CODE.BLANK, null, null); } public void testHasRequiredOverrides_null() { testHasRequiredOverrides(null, AccountingLineOverride.CODE.NONE, null, null); } public void testHasRequiredOverrides_closed() { testHasRequiredOverrides(CLOSED_ACCOUNT.createAccount(), AccountingLineOverride.CODE.NONE, null, null); } public void testHasRequiredOverrides_expired() { testHasRequiredOverrides(EXPIRIED_ACCOUNT.createAccount(), AccountingLineOverride.CODE.NONE, KFSKeyConstants.ERROR_DOCUMENT_ACCOUNT_EXPIRED, new String[] { EXPIRIED_ACCOUNT.accountNumber, EXPIRIED_ACCOUNT.chartOfAccountsCode, EXPIRIED_ACCOUNT.continuationAccountNumber }); } public void testHasRequiredOverrides_expiredContinuationsClosedAndExpired() { testHasRequiredOverrides(EXPIRIED_ACCOUNT_EXPIRIED_AND_CLOSED_CONTINUATION.createAccount(), AccountingLineOverride.CODE.NONE, KFSKeyConstants.ERROR_DOCUMENT_ACCOUNT_EXPIRED, new String[] { EXPIRIED_ACCOUNT_EXPIRIED_AND_CLOSED_CONTINUATION.accountNumber, EXPIRIED_ACCOUNT_EXPIRIED_AND_CLOSED_CONTINUATION.continuationFinChrtOfAcctCd, EXPIRIED_ACCOUNT.continuationAccountNumber }); } public void testHasRequiredOverrides_expiredContinuationExpired() { testHasRequiredOverrides(EXPIRIED_ACCOUNT_EXPIRIED_AND_OPEN_CONTINUATION.createAccount(), AccountingLineOverride.CODE.NONE, KFSKeyConstants.ERROR_DOCUMENT_ACCOUNT_EXPIRED, new String[] { EXPIRIED_ACCOUNT_EXPIRIED_AND_OPEN_CONTINUATION.accountNumber, EXPIRIED_ACCOUNT_EXPIRIED_AND_OPEN_CONTINUATION.continuationFinChrtOfAcctCd, EXPIRIED_ACCOUNT.continuationAccountNumber }); } public void testHasRequiredOverrides_expiredNoContinuation() { testHasRequiredOverrides(EXPIRIED_ACCOUNT_NO_CONTINUATION.createAccount(), AccountingLineOverride.CODE.NONE, KFSKeyConstants.ERROR_DOCUMENT_ACCOUNT_EXPIRED_NO_CONTINUATION, null); } public void testHasRequiredOverrides_expiredButOverridden() { testHasRequiredOverrides(EXPIRIED_ACCOUNT.createAccount(), AccountingLineOverride.CODE.EXPIRED_ACCOUNT, null, null); } public void testHasRequiredOverrides_expiredNoContinuationButOverridden() { testHasRequiredOverrides(EXPIRIED_ACCOUNT_NO_CONTINUATION.createAccount(), AccountingLineOverride.CODE.EXPIRED_ACCOUNT, null, null); } public void testHasRequiredOverrides_expiredButMultipleOverridden() { testHasRequiredOverrides(EXPIRIED_ACCOUNT.createAccount(), AccountingLineOverride.CODE.EXPIRED_ACCOUNT_AND_NON_FRINGE_ACCOUNT_USED, null, null); } // public void testHasRequiredOverrides_AccountPresenceBudgetedObject() { // testHasRequiredOverrides(ACCOUNT_PRESENCE_ACCOUNT.createAccount(businessObjectService), getBudgetedObjectCode(), // AccountingLineOverride.CODE.NONE, null); // } // // public void testHasRequiredOverrides_AccountPresenceNonBudgetObject() { // testHasRequiredOverrides(ACCOUNT_PRESENCE_ACCOUNT.createAccount(businessObjectService), getNonBudgetedObjectCode(), // AccountingLineOverride.CODE.NON_BUDGETED_OBJECT, // KFSKeyConstants.ERROR_DOCUMENT_ACCOUNT_PRESENCE_NON_BUDGETED_OBJECT_CODE); // } public void testHasRequiredOverrides_NoAccountPresenceBudgetedObject() { testHasRequiredOverrides(ACCOUNT_NON_PRESENCE_ACCOUNT.createAccount(SpringContext.getBean(BusinessObjectService.class)), OBJECT_CODE_BUDGETED_OBJECT_CODE.createObjectCode(SpringContext.getBean(BusinessObjectService.class)), AccountingLineOverride.CODE.NONE, null); } public void testHasRequiredOverrides_NoAccountPresenceNonBudgetedObject() { testHasRequiredOverrides(ACCOUNT_NON_PRESENCE_ACCOUNT.createAccount(SpringContext.getBean(BusinessObjectService.class)), OBJECT_CODE_NON_BUDGET_OBJECT_CODE.createObjectCode(SpringContext.getBean(BusinessObjectService.class)), AccountingLineOverride.CODE.NONE, null); } public void testHasRequiredOverrides_NoAccountPresenceNonBudgetedObjectAccountExpired() { testHasRequiredOverrides(ACCOUNT_PRESENCE_ACCOUNT_WITH_EXPIRED.createAccount(SpringContext.getBean(BusinessObjectService.class)), OBJECT_CODE_NON_BUDGET_OBJECT_CODE.createObjectCode(SpringContext.getBean(BusinessObjectService.class)), AccountingLineOverride.CODE.EXPIRED_ACCOUNT_AND_NON_BUDGETED_OBJECT, null); } public void testHasRequiredOverrides_closedAccountNonBudgetedObject() { // This account would require a non-budgeted override if it were not closed. But, the closed validation takes precedence. testHasRequiredOverrides(ACCOUNT_PRESENCE_ACCOUNT_BUT_CLOSED.createAccount(SpringContext.getBean(BusinessObjectService.class)), OBJECT_CODE_NON_BUDGET_OBJECT_CODE.createObjectCode(SpringContext.getBean(BusinessObjectService.class)), AccountingLineOverride.CODE.NONE, null); } @SuppressWarnings("deprecation") private void testHasRequiredOverrides(Account account, String overrideCode, String expectedErrorKey, String[] expectedErrorParameters) { AccountingLine line = new SourceAccountingLine(); line.setAccount(account); if (account != null) { line.setChartOfAccountsCode(account.getChartOfAccountsCode()); line.setAccountNumber(account.getAccountNumber()); } assertGlobalMessageMapEmpty(); AccountingLineRuleHelperService accountingLineRuleUtil = SpringContext.getBean(AccountingLineRuleHelperService.class); boolean actual = accountingLineRuleUtil.hasRequiredOverrides(line, overrideCode); assertEquals("hasRequiredOverrides result", expectedErrorKey == null, actual); if (expectedErrorKey == null) { assertGlobalMessageMapEmpty(); } else { assertGlobalMessageMapContains(KFSConstants.ACCOUNT_NUMBER_PROPERTY_NAME, expectedErrorKey, expectedErrorParameters); } } @SuppressWarnings("deprecation") private void testHasRequiredOverrides(Account account, ObjectCode objectCode, String overrideCode, String expectedErrorKey) { AccountingLine line = new SourceAccountingLine(); line.setAccount(account); line.setObjectCode(objectCode); assertGlobalMessageMapEmpty(); AccountingLineRuleHelperService accountingLineRuleUtil = SpringContext.getBean(AccountingLineRuleHelperService.class); boolean actual = accountingLineRuleUtil.hasRequiredOverrides(line, overrideCode); assertEquals("hasRequiredOverrides result", expectedErrorKey == null, actual); if (expectedErrorKey == null) { assertGlobalMessageMapEmpty(); } else { assertGlobalMessageMapContains(KFSConstants.FINANCIAL_OBJECT_CODE_PROPERTY_NAME, expectedErrorKey); } } }