/*
* 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 java.util.ArrayList;
import java.util.List;
import org.kuali.kfs.coa.businessobject.AccountGlobalDetail;
import org.kuali.kfs.coa.businessobject.SubObjectCodeGlobal;
import org.kuali.kfs.coa.businessobject.SubObjectCodeGlobalDetail;
import org.kuali.kfs.sys.ConfigureContext;
import org.kuali.kfs.sys.context.TestUtils;
@ConfigureContext
public class SubObjCdGlobalRuleTest extends ChartRuleTestBase {
private static class SOCDocument {
private class ChartCode {
private static final String GOOD1 = "BL";
private static final String BAD1 = "ZZ";
}
private static class FiscalYear {
public static int getFiscalYear_GOOD1() {
return TestUtils.getFiscalYearForTesting().intValue();
}
public static int getFiscalYear_BAD1() {
return 0;
}
}
}
public void testDefaultExistenceChecks_Chart_KnownGood() {
// create new SubObjCdGlobal
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
socChangeDocument.setChartOfAccountsCode(SOCDocument.ChartCode.GOOD1);
testDefaultExistenceCheck(socChangeDocument, "chartOfAccountsCode", false);
assertGlobalMessageMapEmpty();
}
public void testDefaultExistenceChecks_Chart_KnownBad() {
// create new SubObjCdGlobal
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
socChangeDocument.setChartOfAccountsCode(SOCDocument.ChartCode.BAD1);
// run the test
testDefaultExistenceCheck(socChangeDocument, "chartOfAccountsCode", true);
assertGlobalMessageMapSize(1);
}
public void testDefaultExistenceChecks_FiscalYear_KnownGood() {
// create new SubObjCdGlobal
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
socChangeDocument.setUniversityFiscalYear(SOCDocument.FiscalYear.getFiscalYear_GOOD1());
testDefaultExistenceCheck(socChangeDocument, "universityFiscalYear", false);
assertGlobalMessageMapEmpty();
}
public void testDefaultExistenceChecks_FiscalYear_KnownBad() {
// create new SubObjCdGlobal
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
socChangeDocument.setUniversityFiscalYear(SOCDocument.FiscalYear.getFiscalYear_BAD1());
// run the test
testDefaultExistenceCheck(socChangeDocument, "universityFiscalYear", true);
assertGlobalMessageMapSize(1);
}
public void testSubObjCdGlobalDetail_InDocument() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(2006);
socChangeDocument.refreshNonUpdateableReferences();
socChangeDetail.setUniversityFiscalYear(2006);
socChangeDetail.refreshNonUpdateableReferences();
List<SubObjectCodeGlobalDetail> socDetails = new ArrayList<SubObjectCodeGlobalDetail>();
socDetails.add(socChangeDetail);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkForSubObjCdGlobalDetails(socChangeDocument.getSubObjCdGlobalDetails());
assertTrue("Rule should pass", result);
}
public void testSubObjCdGlobalDetail_NotInDocument() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(2006);
socChangeDocument.refreshNonUpdateableReferences();
List<SubObjectCodeGlobalDetail> socDetails = new ArrayList<SubObjectCodeGlobalDetail>();
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkForSubObjCdGlobalDetails(socChangeDocument.getSubObjCdGlobalDetails());
assertFalse("Rule should not pass", result);
}
public void testAccountGlobalDetail_InDocument() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(2006);
socChangeDocument.refreshNonUpdateableReferences();
AccountGlobalDetail acctDetail = new AccountGlobalDetail();
acctDetail.setChartOfAccountsCode("BL");
acctDetail.refreshNonUpdateableReferences();
List<AccountGlobalDetail> acctDetails = new ArrayList<AccountGlobalDetail>();
acctDetails.add(acctDetail);
socChangeDocument.setAccountGlobalDetails(acctDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkForAccountGlobalDetails(socChangeDocument.getAccountGlobalDetails());
assertTrue("Rule should pass", result);
}
public void testAccountGlobalDetail_NotInDocument() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(2006);
socChangeDocument.refreshNonUpdateableReferences();
AccountGlobalDetail acctDetail = new AccountGlobalDetail();
acctDetail.setChartOfAccountsCode("BL");
acctDetail.refreshNonUpdateableReferences();
List<AccountGlobalDetail> acctDetails = new ArrayList<AccountGlobalDetail>();
socChangeDocument.setAccountGlobalDetails(acctDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkForAccountGlobalDetails(socChangeDocument.getAccountGlobalDetails());
assertFalse("Rule should not pass", result);
}
public void testFiscalYear_SameOnDocAndDetail() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(TestUtils.getFiscalYearForTesting());
socChangeDocument.refreshNonUpdateableReferences();
socChangeDetail.setUniversityFiscalYear(TestUtils.getFiscalYearForTesting());
socChangeDetail.refreshNonUpdateableReferences();
List<SubObjectCodeGlobalDetail> socDetails = new ArrayList<SubObjectCodeGlobalDetail>();
socDetails.add(socChangeDetail);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkFiscalYear(socChangeDocument, socChangeDetail, 0, false);
assertTrue("Rules should pass", result);
}
public void testFiscalYear_NotSameOnDocAndDetail() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(TestUtils.getFiscalYearForTesting()-1);
socChangeDocument.refreshNonUpdateableReferences();
socChangeDetail.setUniversityFiscalYear(TestUtils.getFiscalYearForTesting());
socChangeDetail.refreshNonUpdateableReferences();
List<SubObjectCodeGlobalDetail> socDetails = new ArrayList<SubObjectCodeGlobalDetail>();
socDetails.add(socChangeDetail);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkFiscalYear(socChangeDocument, socChangeDetail, 0, false);
assertFalse(result);
}
public void testFiscalYear_SameOnDocAndDetailMultipleLines() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
SubObjectCodeGlobalDetail socChangeDetail2 = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(TestUtils.getFiscalYearForTesting());
socChangeDocument.refreshNonUpdateableReferences();
socChangeDetail.setUniversityFiscalYear(TestUtils.getFiscalYearForTesting());
socChangeDetail.refreshNonUpdateableReferences();
socChangeDetail2.setUniversityFiscalYear(TestUtils.getFiscalYearForTesting());
socChangeDetail2.refreshNonUpdateableReferences();
List<SubObjectCodeGlobalDetail> socDetails = new ArrayList<SubObjectCodeGlobalDetail>();
socDetails.add(socChangeDetail);
socDetails.add(socChangeDetail2);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkFiscalYearAllLines(socChangeDocument);
assertTrue("Rules should pass", result);
}
public void testFiscalYear_NotSameOnDocAndDetailMultipleLines() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
SubObjectCodeGlobalDetail socChangeDetail2 = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(TestUtils.getFiscalYearForTesting());
socChangeDocument.refreshNonUpdateableReferences();
socChangeDetail.setUniversityFiscalYear(TestUtils.getFiscalYearForTesting());
socChangeDetail.refreshNonUpdateableReferences();
socChangeDetail2.setUniversityFiscalYear(TestUtils.getFiscalYearForTesting()-1);
socChangeDetail2.refreshNonUpdateableReferences();
List<SubObjectCodeGlobalDetail> socDetails = new ArrayList<SubObjectCodeGlobalDetail>();
socDetails.add(socChangeDetail);
socDetails.add(socChangeDetail2);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkFiscalYearAllLines(socChangeDocument);
assertFalse(result);
}
public void testChart_SameOnDocAndDetail() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(2006);
socChangeDocument.setChartOfAccountsCode("BL");
socChangeDocument.refreshNonUpdateableReferences();
socChangeDetail.setUniversityFiscalYear(2006);
socChangeDetail.setChartOfAccountsCode("BL");
socChangeDetail.refreshNonUpdateableReferences();
List<SubObjectCodeGlobalDetail> socDetails = new ArrayList<SubObjectCodeGlobalDetail>();
socDetails.add(socChangeDetail);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkChartOnSubObjCodeDetails(socChangeDocument, socChangeDetail, 0, false);
assertTrue("Rules should pass", result);
}
public void testChart_SameOnDocAndAcctDetail() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(2006);
socChangeDocument.setChartOfAccountsCode("BL");
socChangeDocument.refreshNonUpdateableReferences();
socChangeDetail.setUniversityFiscalYear(2006);
socChangeDetail.setChartOfAccountsCode("BL");
socChangeDetail.refreshNonUpdateableReferences();
AccountGlobalDetail acctDetail = new AccountGlobalDetail();
acctDetail.setChartOfAccountsCode("BL");
acctDetail.refreshNonUpdateableReferences();
List<SubObjectCodeGlobalDetail> socDetails = new ArrayList<SubObjectCodeGlobalDetail>();
List<AccountGlobalDetail> acctDetails = new ArrayList<AccountGlobalDetail>();
socDetails.add(socChangeDetail);
acctDetails.add(acctDetail);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
socChangeDocument.setAccountGlobalDetails(acctDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkChartOnAccountDetails(socChangeDocument, acctDetail, 0, false);
assertTrue("Rules should pass", result);
}
public void testChart_NotSameOnDocAndDetail() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(2006);
socChangeDocument.setChartOfAccountsCode("BL");
socChangeDocument.refreshNonUpdateableReferences();
socChangeDetail.setUniversityFiscalYear(2006);
socChangeDetail.setChartOfAccountsCode("UA");
socChangeDetail.refreshNonUpdateableReferences();
List<SubObjectCodeGlobalDetail> socDetails = new ArrayList<SubObjectCodeGlobalDetail>();
socDetails.add(socChangeDetail);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkChartOnSubObjCodeDetails(socChangeDocument, socChangeDetail, 0, false);
assertFalse("Rules should not pass", result);
}
public void testChart_NotSameOnDocAndAcctDetail() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(2006);
socChangeDocument.setChartOfAccountsCode("BL");
socChangeDocument.refreshNonUpdateableReferences();
socChangeDetail.setUniversityFiscalYear(2006);
socChangeDetail.setChartOfAccountsCode("BL");
socChangeDetail.refreshNonUpdateableReferences();
AccountGlobalDetail acctDetail = new AccountGlobalDetail();
acctDetail.setChartOfAccountsCode("UA");
acctDetail.refreshNonUpdateableReferences();
List<SubObjectCodeGlobalDetail> socDetails = new ArrayList<SubObjectCodeGlobalDetail>();
List<AccountGlobalDetail> acctDetails = new ArrayList<AccountGlobalDetail>();
socDetails.add(socChangeDetail);
acctDetails.add(acctDetail);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
socChangeDocument.setAccountGlobalDetails(acctDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkChartOnAccountDetails(socChangeDocument, acctDetail, 0, false);
assertFalse("Rules should not pass", result);
}
public void testChart_SameOnDocAndDetailMultipleLines() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
SubObjectCodeGlobalDetail socChangeDetail2 = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(2006);
socChangeDocument.setChartOfAccountsCode("BL");
socChangeDocument.refreshNonUpdateableReferences();
socChangeDetail.setUniversityFiscalYear(2006);
socChangeDetail.setChartOfAccountsCode("BL");
socChangeDetail.refreshNonUpdateableReferences();
socChangeDetail2.setUniversityFiscalYear(2006);
socChangeDetail2.setChartOfAccountsCode("BL");
socChangeDetail2.refreshNonUpdateableReferences();
List<SubObjectCodeGlobalDetail> socDetails = new ArrayList<SubObjectCodeGlobalDetail>();
socDetails.add(socChangeDetail);
socDetails.add(socChangeDetail2);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkChartAllLines(socChangeDocument);
assertTrue("Rules should pass", result);
}
public void testChart_NotSameOnDocAndDetailMultipleLines() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
SubObjectCodeGlobalDetail socChangeDetail2 = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(2006);
socChangeDocument.setChartOfAccountsCode("BL");
socChangeDocument.refreshNonUpdateableReferences();
socChangeDetail.setUniversityFiscalYear(2006);
socChangeDetail.setChartOfAccountsCode("BL");
socChangeDetail.refreshNonUpdateableReferences();
socChangeDetail2.setUniversityFiscalYear(2006);
socChangeDetail2.setChartOfAccountsCode("UA");
socChangeDetail2.refreshNonUpdateableReferences();
List<SubObjectCodeGlobalDetail> socDetails = new ArrayList<SubObjectCodeGlobalDetail>();
socDetails.add(socChangeDetail);
socDetails.add(socChangeDetail2);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkChartAllLines(socChangeDocument);
assertFalse(result);
}
public void testChart_SameOnDocAndAcctDetailMultipleLines() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
SubObjectCodeGlobalDetail socChangeDetail2 = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(2006);
socChangeDocument.setChartOfAccountsCode("BL");
socChangeDocument.refreshNonUpdateableReferences();
socChangeDetail.setUniversityFiscalYear(2006);
socChangeDetail.setChartOfAccountsCode("BL");
socChangeDetail.refreshNonUpdateableReferences();
socChangeDetail2.setUniversityFiscalYear(2006);
socChangeDetail2.setChartOfAccountsCode("BL");
socChangeDetail2.refreshNonUpdateableReferences();
AccountGlobalDetail acctDetail = new AccountGlobalDetail();
acctDetail.setChartOfAccountsCode("BL");
acctDetail.refreshNonUpdateableReferences();
AccountGlobalDetail acctDetail2 = new AccountGlobalDetail();
acctDetail2.setChartOfAccountsCode("BL");
acctDetail2.refreshNonUpdateableReferences();
List<SubObjectCodeGlobalDetail> socDetails = new ArrayList<SubObjectCodeGlobalDetail>();
List<AccountGlobalDetail> acctDetails = new ArrayList<AccountGlobalDetail>();
socDetails.add(socChangeDetail);
socDetails.add(socChangeDetail2);
acctDetails.add(acctDetail);
acctDetails.add(acctDetail2);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
socChangeDocument.setAccountGlobalDetails(acctDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkChartAllLines(socChangeDocument);
assertTrue("Rules should pass", result);
}
public void testChart_NotSameOnDocAndAcctDetailMultipleLines() {
boolean result;
SubObjectCodeGlobal socChangeDocument = new SubObjectCodeGlobal();
SubObjectCodeGlobalDetail socChangeDetail = new SubObjectCodeGlobalDetail();
SubObjectCodeGlobalDetail socChangeDetail2 = new SubObjectCodeGlobalDetail();
socChangeDocument.setUniversityFiscalYear(2006);
socChangeDocument.setChartOfAccountsCode("BL");
socChangeDocument.refreshNonUpdateableReferences();
socChangeDetail.setUniversityFiscalYear(2006);
socChangeDetail.setChartOfAccountsCode("BL");
socChangeDetail.refreshNonUpdateableReferences();
socChangeDetail2.setUniversityFiscalYear(2006);
socChangeDetail2.setChartOfAccountsCode("BL");
socChangeDetail2.refreshNonUpdateableReferences();
AccountGlobalDetail acctDetail = new AccountGlobalDetail();
acctDetail.setChartOfAccountsCode("UA");
acctDetail.refreshNonUpdateableReferences();
AccountGlobalDetail acctDetail2 = new AccountGlobalDetail();
acctDetail2.setChartOfAccountsCode("BL");
acctDetail2.refreshNonUpdateableReferences();
List<SubObjectCodeGlobalDetail> socDetails = new ArrayList<SubObjectCodeGlobalDetail>();
List<AccountGlobalDetail> acctDetails = new ArrayList<AccountGlobalDetail>();
socDetails.add(socChangeDetail);
socDetails.add(socChangeDetail2);
acctDetails.add(acctDetail);
acctDetails.add(acctDetail2);
socChangeDocument.setSubObjCdGlobalDetails(socDetails);
socChangeDocument.setAccountGlobalDetails(acctDetails);
SubObjCdGlobalRule rule = new SubObjCdGlobalRule();
result = rule.checkChartAllLines(socChangeDocument);
assertFalse(result);
}
}