/* * 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.ar.document.service; import java.util.ArrayList; import java.util.List; import junit.framework.Assert; import org.kuali.kfs.module.ar.document.CustomerInvoiceDocument; import org.kuali.kfs.module.ar.fixture.CustomerFixture; import org.kuali.kfs.module.ar.fixture.CustomerInvoiceDetailFixture; import org.kuali.kfs.module.ar.fixture.CustomerInvoiceDocumentFixture; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.document.validation.event.DocumentSystemSaveEvent; import org.kuali.rice.kew.api.exception.WorkflowException; import org.kuali.rice.krad.bo.AdHocRouteRecipient; import org.kuali.rice.krad.document.Document; import org.kuali.rice.krad.service.BusinessObjectService; import org.kuali.rice.krad.service.DocumentService; import org.kuali.rice.krad.util.ErrorMessage; import org.kuali.rice.krad.util.GlobalVariables; import org.kuali.rice.krad.util.ObjectUtils; public class CustomerInvoiceDocumentTestUtil { public static final String CUSTOMER_MAINT_DOC_NAME = "CUS"; public static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(CustomerInvoiceDocumentTestUtil.class); /** * This method saves a customer BO based on the passed in customer fixture * * @param customerFixture */ public static void saveNewCustomer(CustomerFixture customerFixture) throws Exception { SpringContext.getBean(BusinessObjectService.class).save(customerFixture.createCustomer()); } /** * This method saves a customer invoice document BO based on passed in customer invoice document fixture/document detail fixtures * @param customerFixture * @param customerInvoiceDocumentFixture * @param customerInvoiceDocumentFixtures */ public static String saveNewCustomerInvoiceDocument(CustomerInvoiceDocumentFixture customerInvoiceDocumentFixture, CustomerInvoiceDetailFixture[] customerInvoiceDocumentFixtures, CustomerFixture customerFixture) throws WorkflowException { CustomerInvoiceDocument document = null; if( ObjectUtils.isNotNull( customerFixture ) ){ document = customerInvoiceDocumentFixture.createCustomerInvoiceDocument(customerFixture, customerInvoiceDocumentFixtures); } else { document = customerInvoiceDocumentFixture.createCustomerInvoiceDocument(customerInvoiceDocumentFixtures); } Document savedDocument = null; try { SpringContext.getBean(DocumentService.class).saveDocument(document, DocumentSystemSaveEvent.class); } catch (Exception e){ LOG.fatal("The Customer Invoice Document was not routed, and is not available for testing.",e); Assert.fail("The Customer Invoice Document was not routed, and is not available for testing." + e.getClass().getName() + " : " + e.getMessage()); } savedDocument = SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(document.getDocumentNumber()); return ObjectUtils.isNotNull(savedDocument)? savedDocument.getDocumentNumber() : null; } /** * This method submits a customer invoice document based on passed in customer fix * @param customerFixture * @param customerInvoiceDocumentFixture * @param customerInvoiceDocumentFixtures */ public static String submitNewCustomerInvoiceDocument(CustomerInvoiceDocumentFixture customerInvoiceDocumentFixture, CustomerInvoiceDetailFixture[] customerInvoiceDetailFixtures, CustomerFixture customerFixture) throws WorkflowException { CustomerInvoiceDocument document = null; if( ObjectUtils.isNotNull( customerFixture ) ){ document = customerInvoiceDocumentFixture.createCustomerInvoiceDocument(customerFixture, customerInvoiceDetailFixtures); } else { document = customerInvoiceDocumentFixture.createCustomerInvoiceDocument(customerInvoiceDetailFixtures); } document.getDocumentHeader().setDocumentDescription("CREATING TEST CUSTOMER INVOICE DOCUMENT"); Document routedDocument = null; try { SpringContext.getBean(DocumentService.class).routeDocument(document, "TESTING", new ArrayList()); } catch (Exception e){ LOG.fatal("The Customer Invoice Document was not routed, and is not available for testing.",e); Assert.fail("The Customer Invoice Document was not routed, and is not available for testing." + e.getClass().getName() + " : " + e.getMessage()); } routedDocument = SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(document.getDocumentNumber()); return ObjectUtils.isNotNull(routedDocument)? routedDocument.getDocumentNumber() : null; } /** * This method submits a customer invoice document based on passed in customer fix * @param customerFixture * @param customerInvoiceDocumentFixture * @param customerInvoiceDocumentFixtures */ public static CustomerInvoiceDocument submitNewCustomerInvoiceDocumentAndReturnIt(CustomerInvoiceDocumentFixture customerInvoiceDocumentFixture, CustomerInvoiceDetailFixture[] customerInvoiceDetailFixtures, CustomerFixture customerFixture) throws WorkflowException { CustomerInvoiceDocument document = null; if( ObjectUtils.isNotNull( customerFixture ) ){ document = customerInvoiceDocumentFixture.createCustomerInvoiceDocument(customerFixture, customerInvoiceDetailFixtures); } else { document = customerInvoiceDocumentFixture.createCustomerInvoiceDocument(customerInvoiceDetailFixtures); } document.getDocumentHeader().setDocumentDescription("CREATING TEST CUSTOMER INVOICE DOCUMENT"); Document routedDocument = null; try { SpringContext.getBean(DocumentService.class).routeDocument(document, "TESTING", new ArrayList<AdHocRouteRecipient>()); } catch (Exception e){ LOG.fatal("The Customer Invoice Document was not routed, and is not available for testing.",e); Assert.fail("The Customer Invoice Document was not routed, and is not available for testing." + e.getClass().getName() + " : " + e.getMessage() + "\n" + dumpMessageMapErrors() + "\n" + document); } routedDocument = SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(document.getDocumentNumber()); return (CustomerInvoiceDocument)routedDocument; } protected static String dumpMessageMapErrors() { if (GlobalVariables.getMessageMap().hasNoErrors()) { return ""; } StringBuilder message = new StringBuilder(); for ( String key : GlobalVariables.getMessageMap().getErrorMessages().keySet() ) { List<ErrorMessage> errorList = GlobalVariables.getMessageMap().getErrorMessages().get(key); for ( ErrorMessage em : errorList ) { message.append(key).append(" = ").append( em.getErrorKey() ); if (em.getMessageParameters() != null) { message.append( " : " ); String delim = ""; for ( String parm : em.getMessageParameters() ) { message.append(delim).append("'").append(parm).append("'"); if ("".equals(delim)) { delim = ", "; } } } } message.append( '\n' ); } return message.toString(); } }