package org.croudtrip.trips;
import org.croudtrip.api.trips.SuperTripReservation;
import org.croudtrip.api.trips.SuperTripSubQuery;
import org.croudtrip.api.trips.TripQuery;
import org.croudtrip.api.trips.TripReservation;
import org.croudtrip.db.SuperTripReservationDAO;
import org.croudtrip.logs.LogManager;
import org.hibernate.SessionFactory;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.ArrayList;
import java.util.List;
import mockit.Expectations;
import mockit.Mocked;
import mockit.Verifications;
import mockit.integration.junit4.JMockit;
@RunWith(JMockit.class)
public class TripReservationGarbageCollectionExecutorTest {
@Mocked
SuperTripReservationDAO superTripReservationDAO;
@Mocked SessionFactory sessionFactory;
@Mocked LogManager logManager;
private TripReservationGarbageCollectionExecutor collector;
@Before
public void setupCollector() {
collector = new TripReservationGarbageCollectionExecutor(superTripReservationDAO, sessionFactory, logManager);
}
@Test
public void testDoRun() {
long currentTimestamp = System.currentTimeMillis() / 1000;
final List<SuperTripReservation> reservations = new ArrayList<>();
final SuperTripReservation newReservation = createReservation(currentTimestamp - 10, 1000);
final SuperTripReservation oldReservation = createReservation(currentTimestamp - 10000, 10);
reservations.add(newReservation);
reservations.add(oldReservation);
new Expectations() {{
superTripReservationDAO.findAll();
result = reservations;
}};
collector.doRun();
new Verifications() {{
superTripReservationDAO.delete(oldReservation); times = 1;
superTripReservationDAO.delete(newReservation); times = 0;
}};
}
private SuperTripReservation createReservation(long creationTimestamp, long maxWaitingTime) {
TripQuery query = new TripQuery.Builder().setMaxWaitingTimeInSeconds(maxWaitingTime).setCreationTimestamp(creationTimestamp).build();
return new SuperTripReservation.Builder()
.setQuery(query)
.addReservation(new TripReservation( new SuperTripSubQuery(query), 0, 0, 0, 0, null))
.build();
}
}