diff options
| -rw-r--r-- | app/models/chouette/vehicle_journey.rb | 5 | ||||
| -rw-r--r-- | spec/models/chouette/vehicle_journey_spec.rb | 58 |
2 files changed, 37 insertions, 26 deletions
diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb index 23a5bdd56..3531a18e8 100644 --- a/app/models/chouette/vehicle_journey.rb +++ b/app/models/chouette/vehicle_journey.rb @@ -79,6 +79,8 @@ module Chouette state.each do |item| item.delete('errors') vj = find_by(objectid: item['objectid']) + next if item['deletable'] && vj.persisted? && vj.destroy + vj.update_vehicle_journey_at_stops_state(item['vehicle_journey_at_stops']) item['errors'] = vj.errors if vj.errors.any? end @@ -87,6 +89,9 @@ module Chouette raise ActiveRecord::Rollback end end + + # Cleanup + state.delete_if {|item| item['deletable']} end def increasing_times diff --git a/spec/models/chouette/vehicle_journey_spec.rb b/spec/models/chouette/vehicle_journey_spec.rb index 0578ff4b1..b437bb577 100644 --- a/spec/models/chouette/vehicle_journey_spec.rb +++ b/spec/models/chouette/vehicle_journey_spec.rb @@ -1,5 +1,4 @@ require 'spec_helper' - describe Chouette::VehicleJourney, :type => :model do describe "state_update" do def vehicle_journey_to_state vj @@ -28,26 +27,23 @@ describe Chouette::VehicleJourney, :type => :model do 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) + it 'should delete vj with deletable set to true from state' do + state['deletable'] = true + collection = [state] + Chouette::VehicleJourney.state_update(route, collection) + expect(collection).to be_empty + end - 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 update departure_time' do + item = state['vehicle_journey_at_stops'].first + item['departure_time']['hour'] = (Time.now - 1.hour).strftime('%H') + item['departure_time']['minute'] = (Time.now - 1.hour).strftime('%M') - 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 + vehicle_journey.update_vehicle_journey_at_stops_state(state['vehicle_journey_at_stops']) + stop = vehicle_journey.vehicle_journey_at_stops.find(item['id']) - 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 + expect(stop.departure_time.strftime('%H')).to eq item['departure_time']['hour'] + expect(stop.departure_time.strftime('%M')).to eq item['departure_time']['minute'] end it 'should update arrival_time' do @@ -71,16 +67,26 @@ describe Chouette::VehicleJourney, :type => :model do expect(item['errors'][:arrival_time].size).to eq 1 end - it 'should update departure_time' do - item = state['vehicle_journey_at_stops'].first - item['departure_time']['hour'] = (Time.now - 1.hour).strftime('%H') - item['departure_time']['minute'] = (Time.now - 1.hour).strftime('%M') + 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) - vehicle_journey.update_vehicle_journey_at_stops_state(state['vehicle_journey_at_stops']) - stop = vehicle_journey.vehicle_journey_at_stops.find(item['id']) + 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 - expect(stop.departure_time.strftime('%H')).to eq item['departure_time']['hour'] - expect(stop.departure_time.strftime('%M')).to eq item['departure_time']['minute'] + 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 end |
