/* * 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.service; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.kuali.kfs.module.tem.businessobject.ExpenseTypeObjectCode; import org.kuali.kfs.module.tem.dataaccess.ExpenseTypeObjectCodeDao; import org.kuali.kfs.module.tem.dataaccess.impl.ExpenseTypeObjectCodeDaoOjb; import org.kuali.kfs.module.tem.service.impl.TravelExpenseServiceImpl; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.context.KualiTestBase; import org.kuali.kfs.sys.context.SpringContext; @ConfigureContext public class TravelExpenseServiceTest extends KualiTestBase { protected static final String MONKEY_EXPENSE_TYPE_CODE = "M"; protected static final String GIRAFFE_EXPENSE_TYPE_CODE = "G"; protected TravelExpenseService travelExpenseService; protected enum MockExpenseTypeObjectCode { MONKEY("M","TT", "All", "All", "6000"), GIRAFFE_TT("G", "TT", "All", "All", "6001"), GIRAFFE_TA("G", "TA", "All", "All", "6002"), GIRAFFE_EMP_IN("G", "TA", "EMP", "IN", "6003"), GIRAFFE_TRIP_ALL("G", "TA", "EMP", "All", "6004"), GIRAFFE_TRAVELER_ALL("G", "TA", "All", "IN", "6005"); private String expenseTypeCode; private String documentTypeName; private String travelerType; private String tripType; private String financialObjectCode; MockExpenseTypeObjectCode(String expenseTypeCode, String documentTypeName, String travelerType, String tripType, String financialObjectCode) { this.expenseTypeCode = expenseTypeCode; this.documentTypeName = documentTypeName; this.travelerType = travelerType; this.tripType = tripType; this.financialObjectCode = financialObjectCode; } protected ExpenseTypeObjectCode buildExpenseTypeObjectCode() { ExpenseTypeObjectCode etoc = new ExpenseTypeObjectCode(); etoc.setExpenseTypeObjectCodeId(1L); etoc.setExpenseTypeCode(expenseTypeCode); etoc.setDocumentTypeName(documentTypeName); etoc.setTravelerTypeCode(travelerType); etoc.setTripTypeCode(tripType); etoc.setFinancialObjectCode(financialObjectCode); return etoc; } } @Override public void setUp() { travelExpenseService = new TravelExpenseServiceImpl() { @Override public ExpenseTypeObjectCodeDao getExpenseTypeObjectCodeDao() { ExpenseTypeObjectCodeDao expenseTypeObjectCodeDao = new ExpenseTypeObjectCodeDaoOjb() { @Override public List<ExpenseTypeObjectCode> findMatchingExpenseTypeObjectCodes(String expenseTypeCode, Set<String> documentTypes, String tripType, String travelerType) { List<ExpenseTypeObjectCode> results = new ArrayList<ExpenseTypeObjectCode>(); if (MONKEY_EXPENSE_TYPE_CODE.equals(expenseTypeCode)) { results.add(MockExpenseTypeObjectCode.MONKEY.buildExpenseTypeObjectCode()); } else if (GIRAFFE_EXPENSE_TYPE_CODE.equals(expenseTypeCode)) { if ("IN".equals(tripType) && documentTypes.contains("TA")) { results.add(MockExpenseTypeObjectCode.GIRAFFE_TRAVELER_ALL.buildExpenseTypeObjectCode()); } if (documentTypes.contains("TA")) { results.add(MockExpenseTypeObjectCode.GIRAFFE_TA.buildExpenseTypeObjectCode()); } results.add(MockExpenseTypeObjectCode.GIRAFFE_TT.buildExpenseTypeObjectCode()); if ("IN".equals(tripType) && "EMP".equals(travelerType) && documentTypes.contains("TA")) { results.add(MockExpenseTypeObjectCode.GIRAFFE_EMP_IN.buildExpenseTypeObjectCode()); } if ("EMP".equals(travelerType) && documentTypes.contains("TA")) { results.add(MockExpenseTypeObjectCode.GIRAFFE_TRIP_ALL.buildExpenseTypeObjectCode()); } } else { throw new UnsupportedOperationException("Hey, I'm just a mock interface. I only know about monkeys and giraffes, not an expense type code like: "+expenseTypeCode); } return results; } @Override public List<ExpenseTypeObjectCode> findMatchingExpenseTypesObjectCodes(Set<String> documentTypes, String tripType, String travelerType) { List<ExpenseTypeObjectCode> results = new ArrayList<ExpenseTypeObjectCode>(); results.add(MockExpenseTypeObjectCode.MONKEY.buildExpenseTypeObjectCode()); results.add(MockExpenseTypeObjectCode.GIRAFFE_EMP_IN.buildExpenseTypeObjectCode()); results.add(MockExpenseTypeObjectCode.GIRAFFE_TT.buildExpenseTypeObjectCode()); results.add(MockExpenseTypeObjectCode.GIRAFFE_TA.buildExpenseTypeObjectCode()); results.add(MockExpenseTypeObjectCode.GIRAFFE_TRAVELER_ALL.buildExpenseTypeObjectCode()); results.add(MockExpenseTypeObjectCode.GIRAFFE_TRIP_ALL.buildExpenseTypeObjectCode()); return results; } }; return expenseTypeObjectCodeDao; } @Override public TravelService getTravelService() { return SpringContext.getBean(TravelService.class); } }; } public void testGetExpenseType() { // monkeys are easy. let's try monkeys first final ExpenseTypeObjectCode monkeyETOC1 = travelExpenseService.getExpenseType("M", "TA", "IN", "EMP"); assertEquals("M-TA-EMP-IN found correct monkey expense type object code", "6000", monkeyETOC1.getFinancialObjectCode()); final ExpenseTypeObjectCode monkeyETOC2 = travelExpenseService.getExpenseType("M", "ENT", "IN", "EMP"); assertEquals("M-ENT-EMP-IN found correct monkey expense type object code", "6000", monkeyETOC2.getFinancialObjectCode()); final ExpenseTypeObjectCode monkeyETOC3 = travelExpenseService.getExpenseType("M", "TA", "OUT", "EMP"); assertEquals("M-TA-EMP-OUT found correct monkey expense type object code", "6000", monkeyETOC3.getFinancialObjectCode()); final ExpenseTypeObjectCode monkeyETOC4 = travelExpenseService.getExpenseType("M", "TA", "OUT", "NON"); assertEquals("M-TA-NON-OUT found correct monkey expense type object code", "6000", monkeyETOC4.getFinancialObjectCode()); // giraffes are a bit harder final ExpenseTypeObjectCode giraffeETOC1 = travelExpenseService.getExpenseType("G", "TA", "OUT", "NON"); assertEquals("G-TA-NON-OUT found correct giraffe expense type object code", "6002", giraffeETOC1.getFinancialObjectCode()); final ExpenseTypeObjectCode giraffeETOC2 = travelExpenseService.getExpenseType("G", "ENT", "OUT", "NON"); assertEquals("G-ENT-NON-OUT found correct giraffe expense type object code", "6001", giraffeETOC2.getFinancialObjectCode()); final ExpenseTypeObjectCode giraffeETOC3 = travelExpenseService.getExpenseType("G", "TA", "IN", "EMP"); assertEquals("G-TA-EMP-IN found correct giraffe expense type object code", "6003", giraffeETOC3.getFinancialObjectCode()); final ExpenseTypeObjectCode giraffeETOC4 = travelExpenseService.getExpenseType("G", "TA", "IN", "NON"); assertEquals("G-TA-NON-IN found correct giraffe expense type object code", "6005", giraffeETOC4.getFinancialObjectCode()); final ExpenseTypeObjectCode giraffeETOC5 = travelExpenseService.getExpenseType("G", "TA", "OUT", "EMP"); assertEquals("G-TA-EMP-OUT found correct giraffe expense type object code", "6004", giraffeETOC5.getFinancialObjectCode()); final ExpenseTypeObjectCode giraffeETOC6 = travelExpenseService.getExpenseType("G", "ENT", "IN", "EMP"); assertEquals("G-ENT-EMP-IN found correct giraffe expense type object code", "6001", giraffeETOC6.getFinancialObjectCode()); } }