/* * 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.coa.document.validation.impl; import static org.kuali.kfs.sys.KualiTestAssertionUtils.assertGlobalMessageMapEmpty; import static org.kuali.kfs.sys.KualiTestAssertionUtils.assertGlobalMessageMapSize; import static org.kuali.kfs.sys.fixture.UserNameFixture.khuntley; import java.util.ArrayList; import java.util.List; import org.kuali.kfs.coa.businessobject.AccountGlobal; import org.kuali.kfs.coa.businessobject.AccountGlobalDetail; import org.kuali.kfs.integration.UnimplementedKfsModuleServiceImpl; import org.kuali.kfs.integration.cg.ContractsAndGrantsCfda; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.KFSKeyConstants; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.rice.kns.document.MaintenanceDocument; import org.kuali.rice.krad.service.KualiModuleService; import org.kuali.rice.krad.service.ModuleService; @ConfigureContext(session = khuntley) public class AccountGlobalRuleTest extends ChartRuleTestBase { private class Accounts { private class ChartCode { private static final String GOOD1 = "BL"; private static final String CLOSED1 = "BL"; private static final String EXPIRED1 = "BL"; private static final String GOOD2 = "UA"; private static final String BAD1 = "ZZ"; } private class AccountNumber { private static final String GOOD1 = "1031400"; private static final String CLOSED1 = "2231414"; private static final String EXPIRED1 = "2231404"; private static final String BAD1 = "9999999"; } private class Org { private static final String GOOD1 = "ACAD"; private static final String BAD1 = "1234"; } private class State { private static final String GOOD1 = "IN"; private static final String BAD1 = "ZZ"; } private class Zip { private static final String GOOD1 = "47405-3085"; private static final String BAD1 = "12345-6789"; } private class SubFund { private class Code { private static final String CG1 = "HIEDUA"; private static final String GF1 = "GENFND"; private static final String GF_MPRACT = "MPRACT"; private static final String EN1 = "ENDOW"; } private class FundGroupCode { private static final String CG1 = "CG"; private static final String GF1 = "GF"; private static final String EN1 = "EN"; } private static final String GOOD1 = "GENFND"; } private class HigherEdFunction { private static final String GOOD1 = "AC"; } private class User { private class McafeeAlan { private static final String UNIVERSAL_ID = "1509103107"; private static final String USER_ID = "AEMCAFEE"; private static final String EMP_ID = "0000000013"; private static final String NAME = "Mcafee, Alan"; private static final String EMP_STATUS = "A"; private static final String EMP_TYPE = "P"; } private class PhamAnibal { private static final String UNIVERSAL_ID = "1195901455"; private static final String USER_ID = "AAPHAM"; private static final String EMP_ID = "0000004686"; private static final String NAME = "Pham, Anibal"; private static final String EMP_STATUS = "A"; private static final String EMP_TYPE = "P"; } private class AhlersEsteban { private static final String UNIVERSAL_ID = "1959008511"; private static final String USER_ID = "AHLERS"; private static final String EMP_ID = "0000002820"; private static final String NAME = "Ahlers, Esteban"; private static final String EMP_STATUS = "A"; private static final String EMP_TYPE = "P"; } } private class FiscalOfficer { private static final String GOOD1 = "4318506633"; } private class Supervisor { private static final String GOOD1 = "4052406505"; } private class Manager { private static final String GOOD1 = "4318506633"; } private class UserIds { private static final String SUPER1 = "HEAGLE"; private static final String GOOD1 = "kcopley"; private static final String GOOD2 = "khuntley"; } private class Cfda { private static final String GOOD1 = "10.576"; private static final String BAD = "XX.XXX"; } } AccountGlobal newAccountGlobals; MaintenanceDocument maintDoc; AccountGlobalRule rule; public void testDefaultExistenceChecks_Org_KnownGood() { // create new account to test newAccountGlobals = new AccountGlobal(); newAccountGlobals.setChartOfAccountsCode(Accounts.ChartCode.GOOD1); newAccountGlobals.setOrganizationCode(Accounts.Org.GOOD1); setUsersThatExist(); // run the test testDefaultExistenceCheck(newAccountGlobals, "organizationCode", false); assertGlobalMessageMapEmpty(); } private void setUsersThatExist() { newAccountGlobals.setAccountManagerSystemIdentifier(Accounts.Manager.GOOD1); newAccountGlobals.setAccountFiscalOfficerSystemIdentifier(Accounts.FiscalOfficer.GOOD1); newAccountGlobals.setAccountsSupervisorySystemsIdentifier(Accounts.Supervisor.GOOD1); } public void testDefaultExistenceChecks_AccountState_KnownGood() { // create new account to test newAccountGlobals = new AccountGlobal(); newAccountGlobals.setAccountStateCode(Accounts.State.GOOD1); setUsersThatExist(); // run the test testDefaultExistenceCheck(newAccountGlobals, "accountStateCode", false); assertGlobalMessageMapEmpty(); } public void testCustomRouteDocumentBusinessRules_Cfda_KnownGood() { // create new account global, maint doc and rule to test setupAccountGlobal(); newAccountGlobals.setAccountCfdaNumber(Accounts.Cfda.GOOD1); maintDoc = newMaintDoc(newAccountGlobals); rule = (AccountGlobalRule) setupMaintDocRule(maintDoc, AccountGlobalRule.class); // run the test boolean result = rule.processCustomRouteDocumentBusinessRules(maintDoc); // if neither C&G nor KFS/KC integration are enabled, test should fail otherwise it should pass ModuleService moduleService = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(ContractsAndGrantsCfda.class); if ( moduleService instanceof UnimplementedKfsModuleServiceImpl ) { assertEquals("Rule should return false with invalid CFDA number.", false, result); assertGlobalMessageMapSize(1); assertFieldErrorExists("accountCfdaNumber", KFSKeyConstants.ERROR_DOCUMENT_GLOBAL_ACCOUNT_CFDA_NUMBER_INVALID); } else { assertEquals("Rule should return true.", true, result); assertGlobalMessageMapEmpty(); } } public void testCustomRouteDocumentBusinessRules_Cfda_KnownBad() { // create new account global, maint doc and rule to test setupAccountGlobal(); newAccountGlobals.setAccountCfdaNumber(Accounts.Cfda.BAD); maintDoc = newMaintDoc(newAccountGlobals); rule = (AccountGlobalRule) setupMaintDocRule(maintDoc, AccountGlobalRule.class); // run the test boolean result = rule.processCustomRouteDocumentBusinessRules(maintDoc); assertEquals("Rule should return false with invalid CFDA number.", false, result); assertGlobalMessageMapSize(1); assertFieldErrorExists("accountCfdaNumber", KFSKeyConstants.ERROR_DOCUMENT_GLOBAL_ACCOUNT_CFDA_NUMBER_INVALID); } private void setupAccountGlobal() { newAccountGlobals = new AccountGlobal(); newAccountGlobals.setChartOfAccountsCode(Accounts.ChartCode.GOOD1); newAccountGlobals.setOrganizationCode(Accounts.Org.GOOD1); setUsersThatExist(); AccountGlobalDetail accountGlobalDetail = new AccountGlobalDetail(); accountGlobalDetail.setChartOfAccountsCode(Accounts.ChartCode.GOOD1); accountGlobalDetail.setAccountNumber(Accounts.AccountNumber.GOOD1); accountGlobalDetail.refreshNonUpdateableReferences(); List<AccountGlobalDetail> accountGlobalDetails = new ArrayList<AccountGlobalDetail>(); accountGlobalDetails.add(accountGlobalDetail); newAccountGlobals.setAccountGlobalDetails(accountGlobalDetails); } }