/*
* 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.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.TravelEntertainmentDocument;
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.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 TravelEntertainmentServiceTest extends KualiTestBase {
private static final int EXPENSE_AMOUNT = 100;
private TravelEntertainmentDocument ent = null;
private TravelerDetail traveler = null;
private TravelEntertainmentDocumentService entservice;
private TravelDocumentService service;
private DocumentService documentService;
private static final Logger LOG = Logger.getLogger(TravelEntertainmentServiceTest.class);
@Override
@Before
public void setUp() throws Exception {
super.setUp();
// setup services
entservice = SpringContext.getBean(TravelEntertainmentDocumentService.class);
documentService = SpringContext.getBean(DocumentService.class);
ent = DocumentTestUtils.createDocument(documentService, TravelEntertainmentDocument.class);
documentService.prepareWorkflowDocument(ent);
// setup traveler
traveler = new TravelerDetail() {
@Override
public void refreshReferenceObject(String referenceObjectName) {
// do nothing
}
};
traveler.setTravelerTypeCode(TemConstants.EMP_TRAVELER_TYP_CD);
traveler.setCustomer(new Customer());
ent.setTraveler(traveler);
ent.setHostAsPayee(true);
ent.setTravelPayment(new TravelPayment());
ent.getTravelPayment().setDocumentationLocationCode("N");
}
@Override
@After
public void tearDown() throws Exception {
entservice = null;
super.tearDown();
}
/**
* This method test {@link TravelEntertainmentDocumentService#findByTravelId(Integer)} using travelDocumentIdentifier
*/
@Test
public void testFindByTravelDocumentIdentifier() throws WorkflowException {
documentService.saveDocument(ent, AccountingDocumentSaveWithNoLedgerEntryGenerationEvent.class);
// test find for non existent travelDocumentIdentifier
List<TravelEntertainmentDocument> result = (List<TravelEntertainmentDocument>) entservice.findByTravelId("-1");
assertNotNull(result);
assertTrue(result.isEmpty());
// test find for existing travelDocument
result = (List<TravelEntertainmentDocument>) entservice.findByTravelId(ent.getTravelDocumentIdentifier());
assertNotNull(result);
assertFalse(result.isEmpty());
}
/**
* This method test {@link TravelEntertainmentDocumentService#find(String)} using documentNumber
*/
@Test
public void testFindByDocumentNumber() throws WorkflowException {
// test find for non existent documentNumber
assertNull(entservice.find(ent.getDocumentHeader().getDocumentNumber()));
// test find for existent documentNumber
documentService.saveDocument(ent, AccountingDocumentSaveWithNoLedgerEntryGenerationEvent.class);
assertNotNull(entservice.find(ent.getDocumentHeader().getDocumentNumber()));
}
/**
* This method tests {@link TravelEntertainmentDocumentService#addListenersTo(TravelEntertainmentDocument)}
*/
@Test
public void testAddListenersTo() {
boolean success = false;
try {
entservice.addListenersTo(ent);
success = true;
}
catch (NullPointerException e) {
success = false;
LOG.warn("NPE.", e);
}
assertTrue(success);
}
/**
* This method tests {@link TravelEntertainmentDocumentService#calculateTotalsFor(TravelEntertainmentDocument)}
*
* @throws WorkflowException
@Test
public void testCalculateTotalsFor() throws WorkflowException {
ent = new TravelEntertainmentDocument();
traveler.setTravelerTypeCode(TemConstants.EMP_TRAVELER_TYP_CD);
ent.setTraveler(traveler);
List<ActualExpense> oteList = new ArrayList<ActualExpense>();
ent.setActualExpenses(oteList);
ent.setPerDiemExpenses(new ArrayList<PerDiemExpense>());
// test with empty actualExpenseList
Map<String, Object> resultMap = service.calculateTotalsFor(ent);
assertTrue(((KualiDecimal) resultMap.get(TemConstants.NON_REIMBURSABLE_ATTRIBUTE)).equals(KualiDecimal.ZERO));
// Override refreshReferenceObject - setting travelExpenseTypeCode manually
ActualExpense ote = new ActualExpense() {
public void refreshReferenceObject(String referenceObjectName) {
// do nothing;
}
};
ote.setExpenseAmount(new KualiDecimal(EXPENSE_AMOUNT));
ote.setNonReimbursable(true);
//ote.setTravelExpenseTypeCode(new TemTravelExpenseTypeCode());
oteList.add(ote);
ent.setActualExpenses(oteList);
// test with non-reimbursable other expense
resultMap = service.calculateTotalsFor(ent);
assertTrue(((KualiDecimal) resultMap.get(TemConstants.NON_REIMBURSABLE_ATTRIBUTE)).equals(new KualiDecimal(EXPENSE_AMOUNT)));
}
*/
/**
* This method tests {@link TravelEntertainmentDocumentService#generateCoversheetFor(TravelEntertainmentDocument)}
*
* @throws Exception
*/
@Test
public void testGenerateCoversheetFor() throws Exception {
Coversheet cover = null;
try {
cover = entservice.generateCoversheetFor(new TravelEntertainmentDocument());
}
catch (RuntimeException e) {
LOG.warn("Workflow doc is null.", e);
}
assertNull(cover);
ent.setTripBegin(new Timestamp(new java.util.Date().getTime()));
ent.setTripEnd(new Timestamp(new java.util.Date().getTime()));
cover = entservice.generateCoversheetFor(ent);
assertNotNull(cover);
}
}