001    /**
002     * Copyright 2005-2014 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package edu.sampleu.travel.dataobject;
017    
018    import edu.sampleu.travel.options.PostalCountryCode;
019    import edu.sampleu.travel.options.PostalStateCode;
020    import org.junit.Test;
021    import org.kuali.rice.krad.UserSession;
022    import org.kuali.rice.krad.data.PersistenceOption;
023    import org.kuali.rice.krad.document.Document;
024    import org.kuali.rice.krad.service.KRADServiceLocator;
025    import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
026    import org.kuali.rice.krad.test.KRADTestCase;
027    import org.kuali.rice.krad.util.GlobalVariables;
028    import org.kuali.rice.krad.util.MessageMap;
029    import org.kuali.rice.test.BaselineTestCase;
030    
031    import java.math.BigDecimal;
032    import java.text.SimpleDateFormat;
033    
034    import static org.junit.Assert.assertEquals;
035    import static org.junit.Assert.assertNotNull;
036    import static org.junit.Assert.assertTrue;
037    
038    /**
039     * Tests basic {@code TravelPerDiemExpense} persistence.
040     *
041     * @author Kuali Rice Team (rice.collab@kuali.org)
042     */
043    @BaselineTestCase.BaselineMode(BaselineTestCase.Mode.ROLLBACK_CLEAR_DB)
044    public class TravelPerDiemExpenseTest extends KRADTestCase {
045    
046        private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
047    
048        private static String DOCUMENT_NUMBER;
049        private static final String DOCUMENT_DESCRIPTION = "Test Travel Authorization Document";
050        private static final String CELL_PHONE_NUMBER = "555-555-5555";
051    
052        private static String TRAVEL_DESTINATION_ID;
053        private static final String DESTINATION_NAME = PostalStateCode.CA.getLabel();
054        private static final String COUNTRY_CODE = PostalCountryCode.US.getCode();
055        private static final String STATE_CODE = PostalStateCode.CA.getCode();
056    
057        private static String MILEAGE_RATE_ID;
058        private static final String MILEAGE_RATE_CODE = "DO";
059        private static final String MILEAGE_RATE_NAME = "Domestic";
060        private static final BigDecimal MILEAGE_RATE = new BigDecimal("30");
061    
062        private static final String PER_DIEM_DATE = "2010-01-01";
063        private static final BigDecimal BREAKFAST_VALUE = new BigDecimal("15.00");
064        private static final BigDecimal LUNCH_VALUE = new BigDecimal("30.00");
065        private static final BigDecimal DINNER_VALUE = new BigDecimal("45.00");
066        private static final BigDecimal INCIDENTALS_VALUE = new BigDecimal("15.00");
067        private static final BigDecimal ESTIMATED_MILEAGE = new BigDecimal("50");
068    
069        @Override
070        public void setUp() throws Exception {
071            super.setUp();
072            GlobalVariables.setMessageMap(new MessageMap());
073            GlobalVariables.setUserSession(new UserSession("admin"));
074    
075            TravelDestination newTravelDestination = new TravelDestination();
076            newTravelDestination.setTravelDestinationName(DESTINATION_NAME);
077            newTravelDestination.setCountryCd(COUNTRY_CODE);
078            newTravelDestination.setStateCd(STATE_CODE);
079            TRAVEL_DESTINATION_ID = KRADServiceLocator.getDataObjectService().save(
080                    newTravelDestination, PersistenceOption.FLUSH).getTravelDestinationId();
081    
082            TravelMileageRate newTravelMileageRate = new TravelMileageRate();
083            newTravelMileageRate.setMileageRateCd(MILEAGE_RATE_CODE);
084            newTravelMileageRate.setMileageRateName(MILEAGE_RATE_NAME);
085            newTravelMileageRate.setMileageRate(MILEAGE_RATE);
086            MILEAGE_RATE_ID = KRADServiceLocator.getDataObjectService().save(
087                    newTravelMileageRate, PersistenceOption.FLUSH).getMileageRateId();
088    
089            Document newDocument = KRADServiceLocatorWeb.getDocumentService().getNewDocument(TravelAuthorizationDocument.class);
090            newDocument.getDocumentHeader().setDocumentDescription(DOCUMENT_DESCRIPTION);
091            TravelAuthorizationDocument newTravelAuthorizationDocument = (TravelAuthorizationDocument) newDocument;
092            newTravelAuthorizationDocument.setCellPhoneNumber(CELL_PHONE_NUMBER);
093            newTravelAuthorizationDocument.setTripDestinationId(TRAVEL_DESTINATION_ID);
094            DOCUMENT_NUMBER = KRADServiceLocatorWeb.getDocumentService().saveDocument(
095                    newTravelAuthorizationDocument).getDocumentNumber();
096        }
097    
098        @Override
099        public void tearDown() throws Exception {
100            GlobalVariables.setMessageMap(new MessageMap());
101            GlobalVariables.setUserSession(null);
102            super.tearDown();
103        }
104    
105        /**
106         * Tests basic {@code TravelPerDiemExpense} persistence by saving it, reloading it, and checking the data.
107         *
108         * @throws java.lang.Exception for any exceptions occurring during creation
109         */
110        @Test
111        public void testTravelPerDiemExpense() throws Exception {
112            assertTrue(TravelPerDiemExpense.class.getName() + " is not mapped in JPA",
113                    KRADServiceLocator.getDataObjectService().supports(TravelPerDiemExpense.class));
114    
115            String id = createTravelPerDiemExpense();
116    
117            TravelPerDiemExpense travelPerDiemExpense = KRADServiceLocator.getDataObjectService().find(TravelPerDiemExpense.class, id);
118    
119            assertNotNull("Travel Per Diem Expense ID is null", travelPerDiemExpense.getTravelPerDiemExpenseId());
120            assertEquals("Travel Per Diem Expense document ID is incorrect", DOCUMENT_NUMBER, travelPerDiemExpense.getTravelAuthorizationDocumentId());
121            assertEquals("Travel Per Diem Expense destination ID is incorrect", TRAVEL_DESTINATION_ID, travelPerDiemExpense.getTravelDestinationId());
122            assertEquals("Travel Per Diem Expense date is incorrect", DATE_FORMAT.parse(PER_DIEM_DATE), travelPerDiemExpense.getPerDiemDate());
123            assertEquals("Travel Per Diem Expense breakfast value is incorrect", BREAKFAST_VALUE, travelPerDiemExpense.getBreakfastValue());
124            assertEquals("Travel Per Diem Expense lunch value is incorrect", LUNCH_VALUE, travelPerDiemExpense.getLunchValue());
125            assertEquals("Travel Per Diem Expense dinner value is incorrect", DINNER_VALUE, travelPerDiemExpense.getDinnerValue());
126            assertEquals("Travel Per Diem Expense incidentals value is incorrect", INCIDENTALS_VALUE, travelPerDiemExpense.getIncidentalsValue());
127            assertEquals("Travel Per Diem Expense mileage rate ID is incorrect", MILEAGE_RATE_ID, travelPerDiemExpense.getMileageRateId());
128            assertEquals("Travel Per Diem Expense estimated mileage is incorrect", ESTIMATED_MILEAGE, travelPerDiemExpense.getEstimatedMileage());
129        }
130    
131        private String createTravelPerDiemExpense() throws Exception {
132            TravelPerDiemExpense travelPerDiemExpense = new TravelPerDiemExpense();
133            travelPerDiemExpense.setTravelAuthorizationDocumentId(DOCUMENT_NUMBER);
134            travelPerDiemExpense.setTravelDestinationId(TRAVEL_DESTINATION_ID);
135            travelPerDiemExpense.setPerDiemDate(DATE_FORMAT.parse(PER_DIEM_DATE));
136            travelPerDiemExpense.setBreakfastValue(BREAKFAST_VALUE);
137            travelPerDiemExpense.setLunchValue(LUNCH_VALUE);
138            travelPerDiemExpense.setDinnerValue(DINNER_VALUE);
139            travelPerDiemExpense.setIncidentalsValue(INCIDENTALS_VALUE);
140            travelPerDiemExpense.setMileageRateId(MILEAGE_RATE_ID);
141            travelPerDiemExpense.setEstimatedMileage(ESTIMATED_MILEAGE);
142    
143            return KRADServiceLocator.getDataObjectService().save(travelPerDiemExpense, PersistenceOption.FLUSH).getTravelPerDiemExpenseId();
144        }
145    }