aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZog2018-04-25 12:15:49 +0200
committerZog2018-04-25 12:15:49 +0200
commit99f63c55d74845db77c1488a191778bf642c6e44 (patch)
treede53678f1701f97f18ad708724748a0f02b5e1b5
parenteb51cf0aa62a96c552c1a32778aa84e64df458a6 (diff)
downloadchouette-core-99f63c55d74845db77c1488a191778bf642c6e44.tar.bz2
Refs #6711; Update checksums on parents
When a StopPoint is updated
-rw-r--r--app/models/chouette/journey_pattern.rb2
-rw-r--r--app/models/chouette/stop_point.rb1
-rw-r--r--app/models/chouette/vehicle_journey.rb3
-rw-r--r--app/models/concerns/checksum_support.rb9
-rw-r--r--spec/models/chouette/journey_pattern_spec.rb8
-rw-r--r--spec/models/chouette/vehicle_journey_spec.rb9
6 files changed, 28 insertions, 4 deletions
diff --git a/app/models/chouette/journey_pattern.rb b/app/models/chouette/journey_pattern.rb
index 4b4cc2c73..8bdf72dfb 100644
--- a/app/models/chouette/journey_pattern.rb
+++ b/app/models/chouette/journey_pattern.rb
@@ -29,6 +29,8 @@ module Chouette
values.flatten
end
+ has_checksum_children StopPoint
+
def self.state_update route, state
transaction do
state.each do |item|
diff --git a/app/models/chouette/stop_point.rb b/app/models/chouette/stop_point.rb
index b0906d65f..edb0e81fd 100644
--- a/app/models/chouette/stop_point.rb
+++ b/app/models/chouette/stop_point.rb
@@ -11,6 +11,7 @@ module Chouette
belongs_to :stop_area
belongs_to :route, inverse_of: :stop_points
+ has_many :journey_patterns, through: :route
has_many :vehicle_journey_at_stops, :dependent => :destroy
has_many :vehicle_journeys, -> {uniq}, :through => :vehicle_journey_at_stops
diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb
index 814eeb388..dd7d75731 100644
--- a/app/models/chouette/vehicle_journey.rb
+++ b/app/models/chouette/vehicle_journey.rb
@@ -143,13 +143,14 @@ module Chouette
vjas = self.vehicle_journey_at_stops
vjas += VehicleJourneyAtStop.where(vehicle_journey_id: self.id) unless self.new_record?
- attrs << vjas.uniq.sort_by { |s| s.stop_point&.position }.map(&:checksum).sort
+ attrs << vjas.uniq.sort_by { |s| s.stop_point&.position }.map(&:checksum)
attrs << self.purchase_windows.map(&:checksum).sort if purchase_windows.present?
end
end
has_checksum_children VehicleJourneyAtStop
+ has_checksum_children StopPoint
def set_default_values
if number.nil?
diff --git a/app/models/concerns/checksum_support.rb b/app/models/concerns/checksum_support.rb
index de3a6e16b..97209f810 100644
--- a/app/models/concerns/checksum_support.rb
+++ b/app/models/concerns/checksum_support.rb
@@ -12,10 +12,13 @@ module ChecksumSupport
module ClassMethods
def has_checksum_children klass, opts={}
parent_class = self
- relation = opts[:relation] || self.model_name.singular
+ belongs_to = opts[:relation] || self.model_name.singular
+ has_many = opts[:relation] || self.model_name.plural
klass.after_save do
- parent = self.send(relation)
- parent&.update_checksum_without_callbacks!
+ parents = []
+ parents << self.send(belongs_to) if klass.reflections[belongs_to].present?
+ parents += self.send(has_many) if klass.reflections[has_many].present?
+ parents.each &:update_checksum_without_callbacks!
end
end
end
diff --git a/spec/models/chouette/journey_pattern_spec.rb b/spec/models/chouette/journey_pattern_spec.rb
index 57ee5ab4e..fbc48c95a 100644
--- a/spec/models/chouette/journey_pattern_spec.rb
+++ b/spec/models/chouette/journey_pattern_spec.rb
@@ -6,6 +6,14 @@ describe Chouette::JourneyPattern, :type => :model do
describe 'checksum' do
it_behaves_like 'checksum support'
+
+ context "when a stop_point is updated" do
+ it "should update checksum" do
+ expect do
+ subject.stop_points.first.update position: subject.stop_points.size
+ end.to change{subject.reload.checksum}
+ end
+ end
end
# context 'validate minimum stop_points size' do
diff --git a/spec/models/chouette/vehicle_journey_spec.rb b/spec/models/chouette/vehicle_journey_spec.rb
index 8682d59a2..e0d4309d2 100644
--- a/spec/models/chouette/vehicle_journey_spec.rb
+++ b/spec/models/chouette/vehicle_journey_spec.rb
@@ -35,6 +35,15 @@ describe Chouette::VehicleJourney, :type => :model do
expect{create(:vehicle_journey_at_stop, vehicle_journey: vehicle_journey)}.to change{vehicle_journey.checksum}
end
+ it "changes when a stop_point is updated" do
+ vehicle_journey = create(:vehicle_journey)
+ stop_point = vehicle_journey.vehicle_journey_at_stops.first.stop_point
+ expect(stop_point.vehicle_journeys).to include vehicle_journey
+ expect do
+ stop_point.update position: stop_point.route.stop_points.size
+ end.to change{vehicle_journey.reload.checksum}
+ end
+
context "when custom_field_values change" do
let(:vehicle_journey){ create(:vehicle_journey, custom_field_values: {custom_field.code.to_s => former_value}) }
let(:custom_field){ create :custom_field, field_type: :string, code: :energy, name: :energy, resource_type: "VehicleJourney" }