/**
* Copyright (C) 2013 Google, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onebusaway.api.actions.api.gtfs_realtime;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.onebusaway.api.model.ResponseBean;
import org.onebusaway.geospatial.model.CoordinatePoint;
import org.onebusaway.transit_data.model.ListBean;
import org.onebusaway.transit_data.model.RouteBean;
import org.onebusaway.transit_data.model.VehicleStatusBean;
import org.onebusaway.transit_data.model.trips.TripBean;
import org.onebusaway.transit_data.model.trips.TripStatusBean;
import org.onebusaway.transit_data.services.TransitDataService;
import com.google.transit.realtime.GtfsRealtime.FeedEntity;
import com.google.transit.realtime.GtfsRealtime.FeedMessage;
import com.google.transit.realtime.GtfsRealtime.VehiclePosition;
public class VehiclePositionsForAgencyActionTest {
private VehiclePositionsForAgencyAction _action;
private TransitDataService _service;
@Before
public void before() {
_action = new VehiclePositionsForAgencyAction();
_service = Mockito.mock(TransitDataService.class);
_action.setTransitDataService(_service);
}
@Test
public void test() {
long now = System.currentTimeMillis();
List<VehicleStatusBean> vehicles = new ArrayList<VehicleStatusBean>();
RouteBean.Builder routeBuilder = RouteBean.builder();
routeBuilder.setId("1_r1");
RouteBean route = routeBuilder.create();
{
VehicleStatusBean vehicle = new VehicleStatusBean();
vehicles.add(vehicle);
vehicle.setLastUpdateTime(1234 * 1000);
vehicle.setVehicleId("1_v1");
TripStatusBean tripStatus = new TripStatusBean();
vehicle.setTripStatus(tripStatus);
TripBean trip = new TripBean();
trip.setId("1_t0");
trip.setRoute(route);
tripStatus.setActiveTrip(trip);
vehicle.setLocation(new CoordinatePoint(47.0, -122.0));
}
{
VehicleStatusBean vehicle = new VehicleStatusBean();
vehicles.add(vehicle);
vehicle.setLastUpdateTime(5678 * 1000);
vehicle.setVehicleId("1_v2");
TripStatusBean tripStatus = new TripStatusBean();
vehicle.setTripStatus(tripStatus);
TripBean trip = new TripBean();
trip.setId("1_t1");
trip.setRoute(route);
tripStatus.setActiveTrip(trip);
vehicle.setLocation(new CoordinatePoint(47.1, -122.1));
}
ListBean<VehicleStatusBean> bean = new ListBean<VehicleStatusBean>();
bean.setList(vehicles);
Mockito.when(_service.getAllVehiclesForAgency("1", now)).thenReturn(bean);
_action.setId("1");
_action.setTime(new Date(now));
_action.show();
ResponseBean model = _action.getModel();
FeedMessage feed = (FeedMessage) model.getData();
assertEquals(now / 1000, feed.getHeader().getTimestamp());
assertEquals(2, feed.getEntityCount());
{
FeedEntity entity = feed.getEntity(0);
assertEquals("1", entity.getId());
VehiclePosition vehiclePosition = entity.getVehicle();
assertEquals("t0", vehiclePosition.getTrip().getTripId());
assertEquals("r1", vehiclePosition.getTrip().getRouteId());
assertEquals("v1", vehiclePosition.getVehicle().getId());
assertEquals(1234, vehiclePosition.getTimestamp());
assertEquals(47.0, vehiclePosition.getPosition().getLatitude(), 0.01);
assertEquals(-122.0, vehiclePosition.getPosition().getLongitude(), 0.01);
}
{
FeedEntity entity = feed.getEntity(1);
assertEquals("2", entity.getId());
VehiclePosition vehiclePosition = entity.getVehicle();
assertEquals("t1", vehiclePosition.getTrip().getTripId());
assertEquals("r1", vehiclePosition.getTrip().getRouteId());
assertEquals("v2", vehiclePosition.getVehicle().getId());
assertEquals(5678, vehiclePosition.getTimestamp());
assertEquals(47.1, vehiclePosition.getPosition().getLatitude(), 0.01);
assertEquals(-122.1, vehiclePosition.getPosition().getLongitude(), 0.01);
}
}
}