/*
* 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.tem.document.service;
import static org.kuali.kfs.sys.fixture.UserNameFixture.khuntley;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.List;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.kuali.kfs.module.ar.businessobject.Customer;
import org.kuali.kfs.module.tem.TemConstants;
import org.kuali.kfs.module.tem.businessobject.TravelPayment;
import org.kuali.kfs.module.tem.businessobject.TravelerDetail;
import org.kuali.kfs.module.tem.document.TravelReimbursementDocument;
import org.kuali.kfs.module.tem.pdf.Coversheet;
import org.kuali.kfs.sys.ConfigureContext;
import org.kuali.kfs.sys.DocumentTestUtils;
import org.kuali.kfs.sys.KFSConstants;
import org.kuali.kfs.sys.businessobject.PaymentSourceWireTransfer;
import org.kuali.kfs.sys.context.KualiTestBase;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.document.validation.event.AccountingDocumentSaveWithNoLedgerEntryGenerationEvent;
import org.kuali.rice.kew.api.exception.WorkflowException;
import org.kuali.rice.krad.service.DocumentService;
@ConfigureContext(session = khuntley)
public class TravelReimbursementServiceTest extends KualiTestBase {
private static final int EXPENSE_AMOUNT = 100;
private TravelReimbursementDocument tr = null;
private TravelerDetail traveler = null;
private TravelReimbursementService trService;
private DocumentService documentService;
private static final Logger LOG = Logger.getLogger(TravelReimbursementServiceTest.class);
@Override
@Before
public void setUp() throws Exception {
super.setUp();
// setup services
trService = SpringContext.getBean(TravelReimbursementService.class);
documentService = SpringContext.getBean(DocumentService.class);
tr = DocumentTestUtils.createDocument(documentService, TravelReimbursementDocument.class);
Calendar d = Calendar.getInstance();
d.add(Calendar.DATE, 1);
tr.setTripBegin(new java.sql.Timestamp(d.getTimeInMillis()));
d.add(Calendar.DATE, 2);
tr.setTripEnd(new java.sql.Timestamp(d.getTimeInMillis()));
documentService.prepareWorkflowDocument(tr);
// setup traveler
traveler = new TravelerDetail() {
@Override
public void refreshReferenceObject(String referenceObjectName) {
// do nothing
}
};
traveler.setTravelerTypeCode(TemConstants.EMP_TRAVELER_TYP_CD);
traveler.setCustomer(new Customer());
tr.setTraveler(traveler);
TravelPayment travelPayment = new TravelPayment();
travelPayment.setDocumentationLocationCode("T");
travelPayment.setPaymentMethodCode(KFSConstants.PaymentSourceConstants.PAYMENT_METHOD_WIRE);
tr.setTravelPayment(travelPayment);
PaymentSourceWireTransfer wireTransfer = new PaymentSourceWireTransfer();
wireTransfer.setWireTransferFeeWaiverIndicator(false);
tr.setWireTransfer(wireTransfer);
}
@Override
@After
public void tearDown() throws Exception {
trService = null;
super.tearDown();
}
/**
* This method test {@link TravelReimbursementService#findByTravelId(Integer)} using travelDocumentIdentifier
*/
@Test
public void testFindByTravelDocumentIdentifier() throws WorkflowException {
documentService.saveDocument(tr, AccountingDocumentSaveWithNoLedgerEntryGenerationEvent.class);
// test find for non existent travelDocumentIdentifier
List<TravelReimbursementDocument> result = trService.findByTravelId("-1");
assertNotNull(result);
assertTrue(result.isEmpty());
// test find for existing travelDocument
result = trService.findByTravelId(tr.getTravelDocumentIdentifier());
assertNotNull(result);
assertFalse(result.isEmpty());
}
/**
* This method test {@link TravelReimbursementService#find(String)} using documentNumber
*/
@Test
public void testFindByDocumentNumber() throws WorkflowException {
// test find for non existent documentNumber
assertNull(trService.find(tr.getDocumentHeader().getDocumentNumber()));
// test find for existent documentNumber
documentService.saveDocument(tr, AccountingDocumentSaveWithNoLedgerEntryGenerationEvent.class);
assertNotNull(trService.find(tr.getDocumentHeader().getDocumentNumber()));
}
/**
* This method tests {@link TravelReimbursementService#addListenersTo(TravelReimbursementDocument)}
*/
@Test
public void testAddListenersTo() {
boolean success = false;
try {
trService.addListenersTo(tr);
success = true;
}
catch (NullPointerException e) {
success = false;
LOG.warn("NPE.", e);
}
assertTrue(success);
}
/**
* This method tests {@link TravelReimbursementService#generateCoversheetFor(TravelReimbursementDocument)}
*
* @throws Exception
*/
@Test
public void testGenerateCoversheetFor() throws Exception {
Coversheet cover = null;
try {
cover = trService.generateCoversheetFor(new TravelReimbursementDocument());
}
catch (RuntimeException e) {
LOG.warn("Workflow doc is null.", e);
}
assertNull(cover);
tr.setTripBegin(new Timestamp(new java.util.Date().getTime()));
tr.setTripEnd(new Timestamp(new java.util.Date().getTime()));
cover = trService.generateCoversheetFor(tr);
assertNotNull(cover);
}
}