Package org.libreplan.business.test.calendars.entities

Source Code of org.libreplan.business.test.calendars.entities.CapacityTest

/*
* This file is part of LibrePlan
*
* Copyright (C) 2011 Igalia, S.L.
*
* 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.libreplan.business.test.calendars.entities;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.libreplan.business.workingday.EffortDuration.hours;
import static org.libreplan.business.workingday.EffortDuration.zero;

import org.junit.Test;
import org.libreplan.business.calendars.entities.Capacity;
import org.libreplan.business.workingday.EffortDuration;

/**
* @author Óscar González Fernández <ogonzalez@igalia.com>
*/
public class CapacityTest {

    @Test
    public void itHasStandardEffortAndAllowedExtraEffort() {
        Capacity capacity = Capacity.create(hours(8)).withAllowedExtraEffort(hours(2));
        assertThat(capacity.getStandardEffort(),
                equalTo(EffortDuration.hours(8)));
        assertThat(capacity.getAllowedExtraEffort(), equalTo(hours(2)));
    }

    @Test
    public void ifOnlyTheStandardCapacitySpecifiedIsOverAssignableWithoutLimit() {
        Capacity capacity = Capacity.create(hours(8));
        assertTrue(capacity.isOverAssignableWithoutLimit());
    }

    @Test
    public void ifOnlyTheStandardCapacitySpecifiedTheExtraHoursAreNull() {
        Capacity capacity = Capacity.create(hours(8));
        assertThat(capacity.getAllowedExtraEffort(), nullValue());
    }

    @Test
    public void ifHasAllowedExtraEffortItsNotOverassignableWithoutLimit() {
        Capacity capacity = Capacity.create(hours(8)).withAllowedExtraEffort(hours(0));
        assertFalse(capacity.isOverAssignableWithoutLimit());
    }

    @Test
    public void hasAnEqualsAndHashCodeBasedOnStandardEffortAndExtraHours() {
        Capacity a1 = Capacity.create(hours(8)).withAllowedExtraEffort(hours(2));
        Capacity a2 = Capacity.create(hours(8)).withAllowedExtraEffort(hours(2));

        Capacity b1 = Capacity.create(hours(8));

        assertThat(a1, equalTo(a2));
        assertThat(a1.hashCode(), equalTo(a2.hashCode()));
        assertThat(a1, not(equalTo(b1)));
    }

    @Test
    public void aZeroCapacityIsNotOverAssignable() {
        assertFalse(Capacity.zero().isOverAssignableWithoutLimit());
    }

    @Test
    public void albeitTheCapacityIsCreatedFromHibernateAndTheFieldsAreNullDontReturnANullExtraEffort() {
        Capacity capacity = new Capacity();
        assertThat(capacity.getStandardEffort(), equalTo(EffortDuration.zero()));
    }

    @Test
    public void aInitiallyZeroCapacityDoesNotAllowWorking() {
        Capacity zero = Capacity.zero();
        assertFalse(zero.allowsWorking());
    }

    @Test
    public void aNonZeroCapacityAllowsWorking() {
        Capacity capacity = Capacity.create(EffortDuration.minutes(1));
        assertTrue(capacity.allowsWorking());
    }

    @Test
    public void aCapacityWithExtraHoursAndZeroEffortAllowsWorking() {
        Capacity capacity = Capacity.create(EffortDuration.zero()).withAllowedExtraEffort(
                EffortDuration.minutes(1));
        assertTrue(capacity.allowsWorking());
    }

    @Test
    public void aCapacityWithZeroHoursAndOverAssignableWithoutLimitAllowsWorking() {
        Capacity capacity = Capacity.zero().overAssignableWithoutLimit();
        assertTrue(capacity.allowsWorking());
    }

    @Test(expected = IllegalArgumentException.class)
    public void aCapacityCannotBeMultipliedByANegativeNumber() {
        Capacity.create(hours(8)).multiplyBy(-1);
    }

    @Test
    public void aCapacityMultipliedByZero() {
        Capacity[] originals = {
                Capacity.create(hours(8)).overAssignableWithoutLimit(),
                Capacity.create(hours(8)).notOverAssignableWithoutLimit() };
        for (Capacity original : originals) {
            Capacity multipliedByZero = original.multiplyBy(0);
            assertThat(multipliedByZero.getStandardEffort(), equalTo(zero()));
            assertEquals(original.isOverAssignableWithoutLimit(),
                    multipliedByZero.isOverAssignableWithoutLimit());
        }
    }

    @Test
    public void multiplyingMultipliesTheStandardEffortAndTheOverTimeEffort() {
        Capacity capacity = Capacity.create(hours(8)).withAllowedExtraEffort(hours(2));
        Capacity multiplied = capacity.multiplyBy(2);
        assertThat(multiplied.getStandardEffort(), equalTo(hours(16)));
        assertThat(multiplied.getAllowedExtraEffort(), equalTo(hours(4)));
    }

    private Capacity a = Capacity.create(hours(8));

    private Capacity b = Capacity.create(hours(4));

    @Test
    public void theMinOfTwoCapacitiesReturnsTheMinimumStandardEffort() {
        Capacity min = Capacity.min(a, b);
        assertThat(min.getStandardEffort(), equalTo(b.getStandardEffort()));

        Capacity max = Capacity.max(a, b);
        assertThat(max.getStandardEffort(), equalTo(a.getStandardEffort()));
    }

    @Test
    public void theMaxOfTwoCapacitiesReturnsTheMaximumStandardEffort() {
        Capacity max = Capacity.max(a, b);
        assertThat(max.getStandardEffort(), equalTo(a.getStandardEffort()));
    }

    @Test
    public void theExtraEffortIsAlsoMinimized() {
        assertThat(
                Capacity.min(a.withAllowedExtraEffort(hours(2)),
                        b.overAssignableWithoutLimit())
                        .getAllowedExtraEffort(), equalTo(hours(2)));

        assertThat(
                Capacity.min(a.withAllowedExtraEffort(hours(2)),
                        a.withAllowedExtraEffort(hours(4)))
                        .getAllowedExtraEffort(), equalTo(hours(2)));
    }

    @Test
    public void theExtraEffortIsMaximized() {
        assertThat(
                Capacity.max(a.withAllowedExtraEffort(hours(2)),
                        b.overAssignableWithoutLimit())
                        .getAllowedExtraEffort(), nullValue());

        assertThat(
                Capacity.max(a.withAllowedExtraEffort(hours(2)),
                        a.withAllowedExtraEffort(hours(4)))
                        .getAllowedExtraEffort(), equalTo(hours(4)));
    }

    @Test
    public void testThereIsCapacityForMoreAllocations() {
        assertThat(Capacity.create(hours(8)).overAssignableWithoutLimit()
                .hasSpareSpaceForMoreAllocations(hours(10)), is(true));

        Capacity notOverassignable = Capacity.create(hours(8))
                .notOverAssignableWithoutLimit();

        assertFalse(notOverassignable
                .hasSpareSpaceForMoreAllocations(hours(10)));
        assertTrue(notOverassignable
                .hasSpareSpaceForMoreAllocations(hours(7)));
        assertFalse(notOverassignable
                .hasSpareSpaceForMoreAllocations(hours(8)));

        Capacity withSomeExtraHours = notOverassignable
                .withAllowedExtraEffort(hours(2));

        assertFalse(withSomeExtraHours
                .hasSpareSpaceForMoreAllocations(hours(10)));
        assertTrue(withSomeExtraHours
                .hasSpareSpaceForMoreAllocations(hours(7)));
        assertTrue(withSomeExtraHours
                .hasSpareSpaceForMoreAllocations(hours(8)));
    }

    @Test
    public void testMinusWithZeroExtraHours() {
        Capacity c = Capacity.create(hours(8)).notOverAssignableWithoutLimit();

        assertThat(c.minus(hours(6)).getStandardEffort(), equalTo(hours(2)));
        assertThat(c.minus(hours(8)).getStandardEffort(), equalTo(hours(0)));
        assertThat(c.minus(hours(10)).getStandardEffort(), equalTo(hours(0)));
        assertFalse(c.minus(hours(6)).isOverAssignableWithoutLimit());

    }

    @Test
    public void testMinusWithExtraHours() {
        Capacity c = Capacity.create(hours(8)).withAllowedExtraEffort(hours(2));

        assertThat(c.minus(hours(6)).getStandardEffort(), equalTo(hours(2)));
        assertThat(c.minus(hours(6)).getAllowedExtraEffort(), equalTo(hours(2)));
        assertThat(c.minus(hours(8)).getStandardEffort(), equalTo(hours(0)));
        assertThat(c.minus(hours(8)).getAllowedExtraEffort(), equalTo(hours(2)));
        assertThat(c.minus(hours(10)).getStandardEffort(), equalTo(hours(0)));
        assertThat(c.minus(hours(10)).getAllowedExtraEffort(),
                equalTo(hours(0)));
        assertThat(c.minus(hours(12)).getAllowedExtraEffort(),
                equalTo(hours(0)));
        assertFalse(c.minus(hours(10)).isOverAssignableWithoutLimit());
    }

    @Test
    public void testMinusWithUnlimitedExtraHours() {
        Capacity c = Capacity.create(hours(8)).overAssignableWithoutLimit();

        assertThat(c.minus(hours(6)).getStandardEffort(), equalTo(hours(2)));
        assertTrue(c.minus(hours(6)).isOverAssignableWithoutLimit());
        assertThat(c.minus(hours(8)).getStandardEffort(), equalTo(hours(0)));
        assertTrue(c.minus(hours(8)).isOverAssignableWithoutLimit());
        assertThat(c.minus(hours(10)).getStandardEffort(), equalTo(hours(0)));
        assertTrue(c.minus(hours(10)).isOverAssignableWithoutLimit());
    }

    @Test
    public void capacitiesCanBeSummed() {
        Capacity result = Capacity.sum(
                Capacity.create(hours(8)).withAllowedExtraEffort(hours(2)),
                Capacity.create(hours(8)).notOverAssignableWithoutLimit());

        assertThat(result.getStandardEffort(), equalTo(hours(16)));
        assertThat(result.getAllowedExtraEffort(), equalTo(hours(2)));
    }

    @Test
    public void ifSomeOfTheSumandsHasUnlimitedExtraHoursTheSumToo() {
        Capacity result = Capacity.sum(Capacity.create(hours(8))
                .withAllowedExtraEffort(hours(2)), Capacity.create(hours(8))
                .overAssignableWithoutLimit());

        assertThat(result.getStandardEffort(), equalTo(hours(16)));
        assertTrue(result.isOverAssignableWithoutLimit());
    }
}
TOP

Related Classes of org.libreplan.business.test.calendars.entities.CapacityTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.