/* * 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.purap.document.validation.impl; import static org.kuali.kfs.sys.fixture.UserNameFixture.parke; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.kuali.kfs.module.purap.businessobject.PurchaseOrderItem; import org.kuali.kfs.module.purap.businessobject.PurchaseOrderVendorStipulation; import org.kuali.kfs.module.purap.document.PurchaseOrderDocument; import org.kuali.kfs.module.purap.document.validation.PurapRuleTestBase; import org.kuali.kfs.module.purap.document.validation.event.AttributedAddPurchasingAccountsPayableItemEvent; import org.kuali.kfs.module.purap.fixture.AmountsLimitsFixture; import org.kuali.kfs.module.purap.fixture.ItemAccountsFixture; import org.kuali.kfs.module.purap.fixture.PurchaseOrderDocumentFixture; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.document.validation.GenericValidation; import org.kuali.kfs.sys.document.validation.event.AttributedDocumentEventBase; import org.kuali.kfs.sys.fixture.UserNameFixture; @ConfigureContext(session = UserNameFixture.parke) public class PurchaseOrderDocumentRuleTest extends PurapRuleTestBase { private Map<String, GenericValidation> validations; PurchaseOrderDocument po; protected void setUp() throws Exception { super.setUp(); po = new PurchaseOrderDocument(); validations = SpringContext.getBeansOfType(GenericValidation.class); } protected void tearDown() throws Exception { validations = null; po = null; super.tearDown(); } /* * Tests of validateEmptyItemWithAccounts */ @ConfigureContext(session = parke) public void testValidateEmptyItemWithAccounts_NullItemWithAccount() { PurchaseOrderItem poItem = ItemAccountsFixture.NULL_ITEM_WITH_ACCOUNT.populateItem(); PurchaseOrderEmptyItemWithAccountsValidation validation = (PurchaseOrderEmptyItemWithAccountsValidation)validations.get("PurchaseOrder-emptyItemWithAccountsValidation"); validation.setItemForValidation(poItem); assertFalse( validation.validate(new AttributedAddPurchasingAccountsPayableItemEvent("", po, poItem)) ); } @ConfigureContext(session = parke) public void testValidateEmptyItemWithAccounts_WithItemWithAccount() { PurchaseOrderItem poItem = ItemAccountsFixture.WITH_QUANTITY_WITH_PRICE_WITH_ACCOUNT.populateItem(); PurchaseOrderEmptyItemWithAccountsValidation validation = (PurchaseOrderEmptyItemWithAccountsValidation)validations.get("PurchaseOrder-emptyItemWithAccountsValidation"); validation.setItemForValidation(poItem); assertTrue( validation.validate(new AttributedAddPurchasingAccountsPayableItemEvent("", po, poItem)) ); } @ConfigureContext(session = parke) public void testValidateEmptyItemWithAccounts_WithItemWithoutAccount() { PurchaseOrderItem poItem = ItemAccountsFixture.WITH_QUANTITY_WITH_PRICE_NULL_ACCOUNT.populateItem(); PurchaseOrderEmptyItemWithAccountsValidation validation = (PurchaseOrderEmptyItemWithAccountsValidation)validations.get("PurchaseOrder-emptyItemWithAccountsValidation"); validation.setItemForValidation(poItem); assertTrue( validation.validate(new AttributedAddPurchasingAccountsPayableItemEvent("", po, poItem)) ); } /* * Tests of validateTotalDollarAmountIsLessThanPurchaseOrderTotalLimit */ public void testValidateTotalDollarAmountIsLessThanPurchaseOrderTotalLimit_ZeroAmountSmallLimit() { po = AmountsLimitsFixture.ZERO_AMOUNT_SMALL_LIMIT.populatePurchaseOrder(); PurchaseOrderDocumentPreRules preRule = new PurchaseOrderDocumentPreRules(); assertTrue(preRule.validateTotalDollarAmountIsLessThanPurchaseOrderTotalLimit(po)); } public void testValidateTotalDollarAmountIsLessThanPurchaseOrderTotalLimit_SmallAmountSmallLimit() { po = AmountsLimitsFixture.SMALL_AMOUNT_SMALL_LIMIT.populatePurchaseOrder(); PurchaseOrderDocumentPreRules preRule = new PurchaseOrderDocumentPreRules(); assertTrue(preRule.validateTotalDollarAmountIsLessThanPurchaseOrderTotalLimit(po)); } public void testValidateTotalDollarAmountIsLessThanPurchaseOrderTotalLimit_LargeAmountSmallLimit() { po = AmountsLimitsFixture.LARGE_AMOUNT_SMALL_LIMIT.populatePurchaseOrder(); PurchaseOrderDocumentPreRules preRule = new PurchaseOrderDocumentPreRules(); assertFalse(preRule.validateTotalDollarAmountIsLessThanPurchaseOrderTotalLimit(po)); } /* * Tests of processVendorStipulationValidation */ public void testProcessVendorStipulationValidation_NotBlank() { po = new PurchaseOrderDocument(); PurchaseOrderVendorStipulation stip = new PurchaseOrderVendorStipulation(); stip.setVendorStipulationDescription("test"); List<PurchaseOrderVendorStipulation> stipulations = new ArrayList(); stipulations.add(stip); po.setPurchaseOrderVendorStipulations(stipulations); PurchaseOrderProcessVendorStipulationValidation validation = (PurchaseOrderProcessVendorStipulationValidation)validations.get("PurchaseOrder-processVendorStipulationValidation-test"); assertTrue( validation.validate(new AttributedDocumentEventBase("", "", po)) ); } public void testProcessVendorStipulationValidation_Blank() { po = new PurchaseOrderDocument(); PurchaseOrderVendorStipulation stip = new PurchaseOrderVendorStipulation(); stip.setVendorStipulationDescription(""); List<PurchaseOrderVendorStipulation> stipulations = new ArrayList(); stipulations.add(stip); po.setPurchaseOrderVendorStipulations(stipulations); PurchaseOrderProcessVendorStipulationValidation validation = (PurchaseOrderProcessVendorStipulationValidation)validations.get("PurchaseOrder-processVendorStipulationValidation-test"); assertFalse( validation.validate(new AttributedDocumentEventBase("", "", po)) ); } /* * Tests of validateSplit */ public void testValidateSplit_OneMovingOneRemaining() { po = PurchaseOrderDocumentFixture.PO_ONLY_REQUIRED_FIELDS_MULTI_ITEMS.createPurchaseOrderDocument(); ((PurchaseOrderItem)po.getItems().get(0)).setMovingToSplit(true); PurchaseOrderSplitValidation validation = (PurchaseOrderSplitValidation)validations.get("PurchaseOrder-splitValidation-test"); assertTrue( validation.validate(new AttributedDocumentEventBase("", "", po)) ); } public void testValidateSplit_NoneMovingTwoRemaining() { po = PurchaseOrderDocumentFixture.PO_ONLY_REQUIRED_FIELDS_MULTI_ITEMS.createPurchaseOrderDocument(); PurchaseOrderSplitValidation validation = (PurchaseOrderSplitValidation)validations.get("PurchaseOrder-splitValidation-test"); assertFalse( validation.validate(new AttributedDocumentEventBase("", "", po)) ); } public void testValidateSplit_TwoMovingNoneRemaining() { po = PurchaseOrderDocumentFixture.PO_ONLY_REQUIRED_FIELDS_MULTI_ITEMS.createPurchaseOrderDocument(); ((PurchaseOrderItem)po.getItems().get(0)).setMovingToSplit(true); ((PurchaseOrderItem)po.getItems().get(1)).setMovingToSplit(true); PurchaseOrderSplitValidation validation = (PurchaseOrderSplitValidation)validations.get("PurchaseOrder-splitValidation-test"); assertFalse( validation.validate(new AttributedDocumentEventBase("", "", po)) ); } }