/* * 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.fp.document.validation.impl; import java.util.Collection; import org.kuali.kfs.fp.document.DistributionOfIncomeAndExpenseDocument; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.KFSKeyConstants; import org.kuali.kfs.sys.businessobject.AccountingLine; import org.kuali.kfs.sys.businessobject.SourceAccountingLine; import org.kuali.kfs.sys.businessobject.TargetAccountingLine; import org.kuali.kfs.sys.context.KualiTestBase; import org.kuali.kfs.sys.document.validation.event.AttributedRouteDocumentEvent; import org.kuali.kfs.sys.fixture.AccountingLineFixture; import org.kuali.rice.krad.util.GlobalVariables; @ConfigureContext public class CapitalAssetAccountingLineUniquenessEnforcementValidationTest extends KualiTestBase { CapitalAssetAccountingLineUniquenessEnforcementValidation validator; AttributedRouteDocumentEvent event; @Override protected void setUp() throws Exception { super.setUp(); validator = new CapitalAssetAccountingLineUniquenessEnforcementValidation(); DistributionOfIncomeAndExpenseDocument doc = new DistributionOfIncomeAndExpenseDocument(); validator.setAccountingDocumentForValidation(doc); //SourceAccountingLine sourceLine = AccountingLineFixture.LINE17.createSourceAccountingLine(); event = new AttributedRouteDocumentEvent(doc); } protected SourceAccountingLine addSourceLine( AccountingLineFixture fixture ) throws Exception { SourceAccountingLine sourceAccountingLine = fixture.createSourceAccountingLine(); validator.getAccountingDocumentForValidation().addSourceAccountingLine( sourceAccountingLine ); return sourceAccountingLine; } public void testValidate_NO_LINES() { assertTrue( "When no accounting lines, should have returned true", validator.validate(event) ); } public void testValidate_NO_CAP_LINES() throws Exception { validator.getAccountingDocumentForValidation().addSourceAccountingLine(AccountingLineFixture.LINE.createSourceAccountingLine() ); assertTrue( "When no capital asset accounting lines, should have returned true", validator.validate(event) ); } public void testGetCapitalAssetAccountingLines() throws Exception { addSourceLine(AccountingLineFixture.LINE); SourceAccountingLine capLine = addSourceLine(AccountingLineFixture.LINE17); Collection<AccountingLine> capAssetLines = validator.getCapitalAssetAccountingLines(validator.getAccountingDocumentForValidation().getSourceAccountingLines()); assertEquals( "One of the lines should have been returned: " + capAssetLines, 1, capAssetLines.size() ); assertSame( "Wrong line was returned" + capAssetLines, capLine, capAssetLines.iterator().next() ); } public void testValidateLineUniqueness_TWO_IDENTICAL_LINES() throws Exception { addSourceLine(AccountingLineFixture.LINE17); addSourceLine(AccountingLineFixture.LINE17); assertFalse( "Rule should have failed - lines were not unique: " + validator.getAccountingDocumentForValidation().getSourceAccountingLines(), validator.validateLineUniqueness(validator.getAccountingDocumentForValidation().getSourceAccountingLines()) ); assertTrue( "Message map should have had an appropriate error: " + dumpMessageMapErrors(), GlobalVariables.getMessageMap().containsMessageKey(KFSKeyConstants.ERROR_NONUNIQUE_CAPITAL_ASSET_ACCOUNTING_LINE) ); } public void testValidateLineUniqueness_NO_IDENTICAL_LINES() throws Exception { // need to alter the line so that it's a cap asset line addSourceLine(AccountingLineFixture.LINE).setFinancialObjectCode("7600"); addSourceLine(AccountingLineFixture.LINE17); // double check - if line filtered out it would pass the test below as well System.err.println(validator.getAccountingDocumentForValidation().getSourceAccountingLines()); Collection<AccountingLine> capAssetLines = validator.getCapitalAssetAccountingLines(validator.getAccountingDocumentForValidation().getSourceAccountingLines()); assertEquals( "Both lines should have been returned: " + validator.getAccountingDocumentForValidation().getSourceAccountingLines(), 2, capAssetLines.size() ); assertTrue( "Rule should not have failed - lines were unique: " + validator.getAccountingDocumentForValidation().getSourceAccountingLines(), validator.validateLineUniqueness(validator.getAccountingDocumentForValidation().getSourceAccountingLines()) ); } public void testGetLineUniquenessKey_EQUALS() throws Exception { SourceAccountingLine sourceLine = AccountingLineFixture.LINE17.createSourceAccountingLine(); SourceAccountingLine targetLine = AccountingLineFixture.LINE17.createSourceAccountingLine(); assertEquals( "Lines created from same fixture should have been equal", validator.getLineUniquenessKey(sourceLine), validator.getLineUniquenessKey(targetLine) ); } public void testGetLineUniquenessKey_NOT_EQUALS() throws Exception { SourceAccountingLine sourceLine = AccountingLineFixture.LINE17.createSourceAccountingLine(); TargetAccountingLine targetLine = AccountingLineFixture.LINE.createTargetAccountingLine(); assertFalse( "Lines created from different fixtures should not have been equal", validator.getLineUniquenessKey(sourceLine).equals(validator.getLineUniquenessKey(targetLine)) ); } }