org.openlmis.core.domain.ProcessingPeriodTest.java Source code

Java tutorial

Introduction

Here is the source code for org.openlmis.core.domain.ProcessingPeriodTest.java

Source

/*
 * This program is part of the OpenLMIS logistics management information system platform software.
 * Copyright  2013 VillageReach
 *
 * 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. For additional information contact info@OpenLMIS.org.
 */

package org.openlmis.core.domain;

import org.apache.commons.lang.time.DateUtils;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.ExpectedException;
import org.openlmis.db.categories.UnitTests;

import java.util.Calendar;
import java.util.Date;

import static com.natpryce.makeiteasy.MakeItEasy.*;
import static junit.framework.Assert.fail;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import static org.openlmis.core.builder.ProcessingPeriodBuilder.defaultProcessingPeriod;
import static org.openlmis.core.builder.ProcessingPeriodBuilder.endDate;
import static org.openlmis.core.matchers.Matchers.dataExceptionMatcher;

@Category(UnitTests.class)
public class ProcessingPeriodTest {

    @Rule
    public ExpectedException exException = ExpectedException.none();

    @Test
    public void shouldNotThrowErrorOnValidateForAValidPeriod() {

        ProcessingPeriod processingPeriod = make(a(defaultProcessingPeriod));
        try {
            processingPeriod.validate();
        } catch (Exception e) {
            fail("Processing Period Validation failed where unexpected");
        }
    }

    @Test
    public void shouldNotThrowErrorOnValidateForAPeriodWithNoName() {
        ProcessingPeriod processingPeriod = make(a(defaultProcessingPeriod));
        processingPeriod.setName(null);

        exException.expect(dataExceptionMatcher("error.period.without.name"));

        processingPeriod.validate();
    }

    @Test
    public void shouldNotThrowErrorOnValidateForAPeriodWithNoScheduleId() {
        ProcessingPeriod processingPeriod = make(a(defaultProcessingPeriod));
        processingPeriod.setScheduleId(null);

        exException.expect(dataExceptionMatcher("error.period.without.schedule"));

        processingPeriod.validate();
    }

    @Test
    public void shouldNotThrowErrorOnValidateForAPeriodWithNoStartDate() {
        ProcessingPeriod processingPeriod = make(a(defaultProcessingPeriod));
        processingPeriod.setStartDate(null);

        exException.expect(dataExceptionMatcher("error.period.without.start.date"));

        processingPeriod.validate();
    }

    @Test
    public void shouldNotThrowErrorOnValidateForAPeriodWithNoEndDate() {
        ProcessingPeriod processingPeriod = make(a(defaultProcessingPeriod));
        processingPeriod.setEndDate(null);

        exException.expect(dataExceptionMatcher("error.period.without.end.date"));

        processingPeriod.validate();
    }

    @Test
    public void shouldNotThrowErrorOnValidateForAPeriodWithEndDateEarlierToStartDate() {
        ProcessingPeriod processingPeriod = make(a(defaultProcessingPeriod));
        processingPeriod.setStartDate(oneMonthPast(processingPeriod.getEndDate()));

        exException.expect(dataExceptionMatcher("error.period.invalid.dates"));

        processingPeriod.validate();
    }

    @Test
    public void shouldIncludeEndDateInPeriod() throws Exception {
        ProcessingPeriod processingPeriod = make(a(defaultProcessingPeriod));
        processingPeriod.includeEntireDuration();

        assertThat(processingPeriod.getStartDate(),
                is(DateUtils.parseDate("01-01-12 00:00:00", new String[] { "dd-MM-yy HH:mm:ss" })));
        assertThat(processingPeriod.getEndDate(),
                is(DateUtils.parseDate("01-02-12 23:59:59", new String[] { "dd-MM-yy HH:mm:ss" })));
    }

    @Test
    public void shouldGetNextPeriodStartDate() throws Exception {
        ProcessingPeriod processingPeriod = make(a(defaultProcessingPeriod,
                with(endDate, DateUtils.parseDate("01-01-12 00:00:00", new String[] { "dd-MM-yy HH:mm:ss" }))));

        assertThat(processingPeriod.getNextStartDate(), is("2012-01-02"));
    }

    private Date oneMonthPast(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime((Date) date.clone());
        calendar.add(Calendar.MONTH, 1);
        return calendar.getTime();
    }
}