com.javaid.bolaky.domain.pool.service.impl.DefaultPoolsServiceIntegrationTests.java Source code

Java tutorial

Introduction

Here is the source code for com.javaid.bolaky.domain.pool.service.impl.DefaultPoolsServiceIntegrationTests.java

Source

package com.javaid.bolaky.domain.pool.service.impl;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.junit.Assert.assertTrue;

import java.util.Set;

import org.apache.commons.lang.math.RandomUtils;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.jpa.JpaSystemException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.javaid.bolaky.domain.pools.entity.Passenger;
import com.javaid.bolaky.domain.pools.entity.Pool;
import com.javaid.bolaky.domain.pools.entity.enumerated.DayOfWeek;
import com.javaid.bolaky.domain.pools.entity.enumerated.Gender;
import com.javaid.bolaky.domain.pools.entity.enumerated.PoolStatus;
import com.javaid.bolaky.domain.pools.entity.enumerated.PoolType;
import com.javaid.bolaky.domain.pools.entity.enumerated.StateStatus;
import com.javaid.bolaky.domain.pools.enumerated.PoolsError;
import com.javaid.bolaky.domain.pools.service.api.PoolsService;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/default-pools-service-context.xml",
        "classpath:/default-pools-datasource-context.xml" })
@TransactionConfiguration(transactionManager = "transactionManager")
@Transactional(propagation = Propagation.REQUIRED)
public class DefaultPoolsServiceIntegrationTests {

    @Autowired
    private PoolsService poolsService;

    @Before
    public void populateUsername() {
        Authentication authentication = new UsernamePasswordAuthenticationToken("Javaid", "Jav");
        SecurityContextHolder.getContext().setAuthentication(authentication);
    }

    @Test(expected = JpaSystemException.class)
    public void testSavingAPoolInDraftState() {

        String username1 = Long.toString(RandomUtils.nextLong());
        String username2 = Long.toString(RandomUtils.nextLong());
        String username3 = Long.toString(RandomUtils.nextLong());
        String username4 = Long.toString(RandomUtils.nextLong());

        Pool pool = createPool(true, "poolname", Gender.FEMALE, username1, PoolType.CARPOOL, true, true, true, 2, 2,
                Gender.FEMALE, "No additional details", true, "A", "B", "C", new LocalDate(), new LocalTime(), "A",
                "B", new LocalDate(), "A", "B");

        pool.addAvailableSeatsForADay(DayOfWeek.SUNDAY, 1);
        pool.addAvailableSeatsForADay(DayOfWeek.MONDAY, 2);
        pool.addAvailableSeatsForADay(DayOfWeek.WEDNESDAY, 3);
        pool.addAvailableSeatsForADay(DayOfWeek.FRIDAY, 5);
        pool.addAdditionalSeatsForADay(DayOfWeek.SUNDAY, 2);

        Passenger passenger1 = createPassenger(username2, StateStatus.ACCEPTED);
        Passenger passenger2 = createPassenger(username3, StateStatus.PENDING);
        Passenger passenger3 = createPassenger(username4, StateStatus.REJECTED);

        pool.addPassengers(passenger1);
        pool.addPassengers(passenger2);
        pool.addPassengers(passenger3);

        pool = poolsService.save(pool);
    }

    @Test
    public void testSaveAndFindOneInActiveState() {

        String username1 = Long.toString(RandomUtils.nextLong());
        String username2 = Long.toString(RandomUtils.nextLong());
        String username3 = Long.toString(RandomUtils.nextLong());
        String username4 = Long.toString(RandomUtils.nextLong());

        Pool pool = createPool(true, "poolname", Gender.FEMALE, username1, PoolType.CARPOOL, true, true, true, 2, 7,
                Gender.FEMALE, "No additional details", true, "A", "B", "C", new LocalDate().plusDays(1),
                new LocalTime(), "A", "B", new LocalDate().plusDays(1), "A", "B");

        pool.addAvailableSeatsForADay(DayOfWeek.SUNDAY, 1);
        pool.addAvailableSeatsForADay(DayOfWeek.MONDAY, 2);
        pool.addAvailableSeatsForADay(DayOfWeek.WEDNESDAY, 3);
        pool.addAvailableSeatsForADay(DayOfWeek.FRIDAY, 5);
        pool.addAdditionalSeatsForADay(DayOfWeek.SUNDAY, 2);

        Passenger passenger1 = createPassenger(username2, StateStatus.ACCEPTED);
        Passenger passenger2 = createPassenger(username3, StateStatus.PENDING);
        Passenger passenger3 = createPassenger(username4, StateStatus.REJECTED);

        pool.addPassengers(passenger1);
        pool.addPassengers(passenger2);
        pool.addPassengers(passenger3);

        Set<PoolsError> poolsErrors = pool.activate();

        assertThat(poolsErrors, is(notNullValue()));
        assertTrue(poolsErrors.isEmpty());
        assertThat(pool.getPoolStatus(), is(PoolStatus.ACTIVE));

        pool = poolsService.save(pool);
        assertThat(pool.getCreationUsername(), is("Javaid"));

        Pool pool2 = poolsService.find(pool.getUsername());
        assertThat(pool.getOneWayTravel(), is(pool2.getOneWayTravel()));
        assertThat(pool.getPassengers().size(), is(3));
        assertThat(pool.getAvailableSeatsForADay(DayOfWeek.SUNDAY), is(3));
    }

    @Test
    public void testSaveAndFindOneInCompletedState() {

        String username1 = Long.toString(RandomUtils.nextLong());
        String username2 = Long.toString(RandomUtils.nextLong());
        String username3 = Long.toString(RandomUtils.nextLong());
        String username4 = Long.toString(RandomUtils.nextLong());

        Pool pool = createPool(true, "poolname", Gender.FEMALE, username1, PoolType.CARPOOL, true, true, true, 2, 2,
                Gender.FEMALE, "No additional details", true, "A", "B", "C", new LocalDate().minusDays(4),
                new LocalTime(), "A", "B", new LocalDate().minusDays(1), "A", "B");

        pool.addAvailableSeatsForADay(DayOfWeek.SUNDAY, 1);
        pool.addAvailableSeatsForADay(DayOfWeek.MONDAY, 2);
        pool.addAvailableSeatsForADay(DayOfWeek.WEDNESDAY, 3);
        pool.addAvailableSeatsForADay(DayOfWeek.FRIDAY, 5);
        pool.addAdditionalSeatsForADay(DayOfWeek.SUNDAY, 2);

        Passenger passenger1 = createPassenger(username2, StateStatus.ACCEPTED);
        Passenger passenger2 = createPassenger(username3, StateStatus.PENDING);
        Passenger passenger3 = createPassenger(username4, StateStatus.REJECTED);

        pool.addPassengers(passenger1);
        pool.addPassengers(passenger2);
        pool.addPassengers(passenger3);

        pool.completed();
        assertThat(pool.getPoolStatus(), is(PoolStatus.COMPLETED));

        pool = poolsService.save(pool);
        assertThat(pool.getCreationUsername(), is("Javaid"));

        Pool pool2 = poolsService.find(pool.getUsername());
        assertThat(pool.getOneWayTravel(), is(pool2.getOneWayTravel()));
        assertThat(pool.getPassengers().size(), is(3));
        assertThat(pool.getAvailableSeatsForADay(DayOfWeek.SUNDAY), is(3));
    }

    @Test
    public void testSaveAndFindOneInCancelledState() {

        String username1 = Long.toString(RandomUtils.nextLong());
        String username2 = Long.toString(RandomUtils.nextLong());
        String username3 = Long.toString(RandomUtils.nextLong());
        String username4 = Long.toString(RandomUtils.nextLong());

        Pool pool = createPool(true, "poolname", Gender.FEMALE, username1, PoolType.CARPOOL, true, true, true, 2, 2,
                Gender.FEMALE, "No additional details", true, "A", "B", "C", new LocalDate().plusDays(1),
                new LocalTime(), "A", "B", new LocalDate().plusDays(1), "A", "B");

        pool.addAvailableSeatsForADay(DayOfWeek.SUNDAY, 1);
        pool.addAvailableSeatsForADay(DayOfWeek.MONDAY, 2);
        pool.addAvailableSeatsForADay(DayOfWeek.WEDNESDAY, 3);
        pool.addAvailableSeatsForADay(DayOfWeek.FRIDAY, 5);
        pool.addAdditionalSeatsForADay(DayOfWeek.SUNDAY, 2);

        Passenger passenger1 = createPassenger(username2, StateStatus.ACCEPTED);
        Passenger passenger2 = createPassenger(username3, StateStatus.PENDING);
        Passenger passenger3 = createPassenger(username4, StateStatus.REJECTED);

        pool.addPassengers(passenger1);
        pool.addPassengers(passenger2);
        pool.addPassengers(passenger3);

        pool.cancelled();
        assertThat(pool.getPoolStatus(), is(PoolStatus.CANCELLED));

        pool = poolsService.save(pool);
        assertThat(pool.getCreationUsername(), is("Javaid"));

        Pool pool2 = poolsService.find(pool.getUsername());
        assertThat(pool.getOneWayTravel(), is(pool2.getOneWayTravel()));
        assertThat(pool.getPassengers().size(), is(3));
        assertThat(pool.getAvailableSeatsForADay(DayOfWeek.SUNDAY), is(3));
    }

    private Pool createPool(Boolean shareCost, String carPoolName, Gender gender, String username,
            PoolType poolType, Boolean validLicense, Boolean smoker, Boolean oneWayTravel,
            Integer numberOfCurrentPassengers, Integer vehicleSeatsNumber, Gender prefferedGenderToTravelWith,
            String userPoolAdditionalDetails, Boolean vehicleOwner, String vehicleMakeCode, String vehicleModelCode,
            String vehicleTypeCode, LocalDate startingDate, LocalTime departureTime, String fromAreaCode,
            String fromDistrictCode, LocalDate endDate, String toAreaCode, String toDistictCode) {

        Pool pool = new Pool();

        pool.setGender(gender);
        pool.setShareCost(shareCost);
        pool.setPoolName(carPoolName);
        pool.setUsername(username);
        pool.setPoolType(poolType);
        pool.setValidLicense(validLicense);
        pool.setSmoker(smoker);
        pool.setOneWayTravel(oneWayTravel);
        pool.setNumberOfCurrentPassengers(numberOfCurrentPassengers);
        pool.setPrefferedGenderToTravelWith(prefferedGenderToTravelWith);
        pool.setUserPoolAdditionalDetails(userPoolAdditionalDetails);
        pool.getVehicleInfo().setMaxNumberOfSeats(vehicleSeatsNumber);
        pool.getVehicleInfo().setOwner(vehicleOwner);
        pool.getVehicleInfo().setMakeCode(vehicleMakeCode);
        pool.getVehicleInfo().setModelCode(vehicleModelCode);
        pool.getVehicleInfo().setTypeCode(vehicleTypeCode);
        pool.getStartingPointInfo().setStartingDate(startingDate);
        pool.getStartingPointInfo().setDepartureTime(departureTime);
        pool.getStartingPointInfo().setFromAreaCode(fromAreaCode);
        pool.getStartingPointInfo().setFromDistrictCode(fromDistrictCode);
        pool.getDestinationInfo().setEndDate(endDate);
        pool.getDestinationInfo().setToAreaCode(toAreaCode);
        pool.getDestinationInfo().setToDistictCode(toDistictCode);

        return pool;
    }

    private Passenger createPassenger(String username, StateStatus stateStatus) {

        Passenger passenger = new Passenger();
        passenger.setUsername(username);
        passenger.setStateStatus(stateStatus);

        return passenger;
    }
}