package org.croudtrip.trips; import com.google.common.base.Optional; import com.google.common.collect.Lists; import org.croudtrip.api.trips.RunningTripQuery; import org.croudtrip.api.trips.RunningTripQueryStatus; import org.croudtrip.api.trips.TripOffer; import org.croudtrip.api.trips.TripQuery; import org.croudtrip.db.RunningTripQueryDAO; import org.croudtrip.gcm.GcmManager; import org.croudtrip.utils.Pair; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import mockit.Expectations; import mockit.Mocked; import mockit.Verifications; import mockit.integration.junit4.JMockit; @RunWith(JMockit.class) public class RunningTripQueriesManagerTest { @Mocked RunningTripQueryDAO runningTripQueryDAO; @Mocked SimpleTripsMatcher simpleTripsMatcher; @Mocked GcmManager gcmManager; private RunningTripQueriesManager manager; @Before public void setpuManager() { this.manager = new RunningTripQueriesManager(runningTripQueryDAO, simpleTripsMatcher, gcmManager); } @Test @SuppressWarnings("rawTypes") public void testCheckAndUpdateRunningQueries() { TripQuery oldQuery = new TripQuery.Builder() .setCreationTimestamp(0) .build(); final TripQuery newQuery = new TripQuery.Builder() .setCreationTimestamp(System.currentTimeMillis() / 1000) .setMaxWaitingTimeInSeconds(1000) .build(); final RunningTripQuery runningQuery1 = new RunningTripQuery(0, newQuery, RunningTripQueryStatus.RUNNING); final RunningTripQuery runningQuery2 = new RunningTripQuery(0, oldQuery, RunningTripQueryStatus.RUNNING); final TripOffer offer = new TripOffer(0, null, 0, null, 0, 0, null, null, null, 0); new Expectations() {{ runningTripQueryDAO.findByStatusRunning(); result = Lists.newArrayList(runningQuery1, runningQuery2); simpleTripsMatcher.isPotentialMatch((TripOffer) any, (TripQuery) any); result = Optional.of(new SimpleTripsMatcher.PotentialMatch(offer, newQuery, null)); }}; manager.checkAndUpdateRunningQueries(offer); new Verifications() {{ gcmManager.sendGcmMessageToUser(newQuery.getPassenger(), anyString, (Pair) any); RunningTripQuery resultQuery; runningTripQueryDAO.update(resultQuery = withCapture()); Assert.assertEquals(RunningTripQueryStatus.FOUND, resultQuery.getStatus()); }}; } }