aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXinhui2017-03-10 13:00:48 +0100
committerXinhui2017-03-10 13:00:48 +0100
commitbbeee45fbba338eeb857f9967a3c79519bf499bc (patch)
tree8c4e95530ab7ac962a4395f0cc33d2ed61a743f2
parent9a0e95969b9afaf6b5c63752d3963a96f4e50fb0 (diff)
downloadchouette-core-bbeee45fbba338eeb857f9967a3c79519bf499bc.tar.bz2
Refactoring vehicle_journey_at_stops_matrix
-rw-r--r--app/models/chouette/vehicle_journey.rb6
-rw-r--r--spec/models/chouette/vehicle_journey_spec.rb26
2 files changed, 28 insertions, 4 deletions
diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb
index d03b52e83..9853acafb 100644
--- a/app/models/chouette/vehicle_journey.rb
+++ b/app/models/chouette/vehicle_journey.rb
@@ -48,10 +48,10 @@ module Chouette
end
def vehicle_journey_at_stops_matrix
- fill = route.stop_points.count - self.vehicle_journey_at_stops.count
at_stops = self.vehicle_journey_at_stops.to_a.dup
- fill.times do
- at_stops << Chouette::VehicleJourneyAtStop.new
+ filling = route.stop_points.map(&:id) - at_stops.map(&:stop_point_id)
+ filling.each do |id|
+ at_stops.insert(route.stop_points.map(&:id).index(id), Chouette::VehicleJourneyAtStop.new())
end
at_stops
end
diff --git a/spec/models/chouette/vehicle_journey_spec.rb b/spec/models/chouette/vehicle_journey_spec.rb
index 4f55ba774..a6569d011 100644
--- a/spec/models/chouette/vehicle_journey_spec.rb
+++ b/spec/models/chouette/vehicle_journey_spec.rb
@@ -24,9 +24,33 @@ describe Chouette::VehicleJourney, :type => :model do
end
let(:route) { create :route }
- let(:vehicle_journey) { create :vehicle_journey, route: route }
+ let(:journey_pattern) { create :journey_pattern, route: route }
+ let(:vehicle_journey) { create :vehicle_journey, route: route, journey_pattern: journey_pattern }
+
let(:state) { vehicle_journey_to_state(vehicle_journey) }
+ describe '.vehicle_journey_at_stops_matrix' do
+ it 'should fill missing VehicleJourneyAtStop with dummy' do
+ vehicle_journey.vehicle_journey_at_stops.last.destroy
+ expect(vehicle_journey.reload.vehicle_journey_at_stops.map(&:id).count).to eq(route.stop_points.map(&:id).count - 1)
+
+ at_stops = vehicle_journey.reload.vehicle_journey_at_stops_matrix
+ expect(at_stops.last.id).to be_nil
+ expect(at_stops.count).to eq route.stop_points.count
+ end
+
+ it 'should keep index order of VehicleJourneyAtStop' do
+ vehicle_journey.vehicle_journey_at_stops[3].destroy
+ at_stops = vehicle_journey.reload.vehicle_journey_at_stops_matrix
+
+ expect(at_stops[3].id).to be_nil
+ at_stops.delete_at(3)
+ at_stops.each do |stop|
+ expect(stop.id).not_to be_nil
+ end
+ end
+ end
+
it 'should update arrival_time' do
stop = state['vehicle_journey_at_stops'].first
stop['arrival_time']['hour'] = "10"