aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZog2018-05-17 11:18:13 +0200
committercedricnjanga2018-05-17 07:06:19 -0700
commit488237c48b6174873470d7b6ce3d1465df46ba20 (patch)
treec82f82ea3b7e6b74b33bd8ca6ed4f371eaebcdf8
parent3a087de30b60baad7805b9d6786776aadb43792b (diff)
downloadchouette-core-488237c48b6174873470d7b6ce3d1465df46ba20.tar.bz2
Refs #6624; Update parent's checksum on deletion
-rw-r--r--app/models/concerns/checksum_support.rb7
-rw-r--r--spec/models/chouette/vehicle_journey_spec.rb10
-rw-r--r--spec/models/route_spec.rb5
3 files changed, 21 insertions, 1 deletions
diff --git a/app/models/concerns/checksum_support.rb b/app/models/concerns/checksum_support.rb
index fe52604bb..86bbd1d00 100644
--- a/app/models/concerns/checksum_support.rb
+++ b/app/models/concerns/checksum_support.rb
@@ -10,19 +10,24 @@ module ChecksumSupport
end
module ClassMethods
+
def has_checksum_children klass, opts={}
parent_class = self
belongs_to = opts[:relation] || self.model_name.singular
has_many = opts[:relation] || self.model_name.plural
Rails.logger.debug "Define callback in #{klass} to update checksums #{self.model_name} (via #{has_many}/#{belongs_to})"
- klass.after_save do
+
+ child_update_parent = Proc.new do
parents = []
parents << self.send(belongs_to) if klass.reflections[belongs_to].present?
parents += self.send(has_many) if klass.reflections[has_many].present?
Rails.logger.debug "Request from #{klass.name} checksum updates for #{parents.count} #{parent_class} parent(s)"
parents.compact.each &:update_checksum_without_callbacks!
end
+
+ klass.after_save &child_update_parent
+ klass.after_destroy &child_update_parent
end
end
diff --git a/spec/models/chouette/vehicle_journey_spec.rb b/spec/models/chouette/vehicle_journey_spec.rb
index 0fc75bec9..05560f9e3 100644
--- a/spec/models/chouette/vehicle_journey_spec.rb
+++ b/spec/models/chouette/vehicle_journey_spec.rb
@@ -36,6 +36,16 @@ 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 vjas is deleted" do
+ vehicle_journey = create(:vehicle_journey)
+ 3.times do
+ create(:vehicle_journey_at_stop, vehicle_journey: vehicle_journey).run_callbacks(:commit)
+ end
+ vjas = vehicle_journey.vehicle_journey_at_stops.last
+ expect(vehicle_journey).to receive(:update_checksum_without_callbacks!).at_least(:once).and_call_original
+ expect{vjas.destroy; vjas.run_callbacks(:commit)}.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" }
diff --git a/spec/models/route_spec.rb b/spec/models/route_spec.rb
index 58524038b..dbf00ab0b 100644
--- a/spec/models/route_spec.rb
+++ b/spec/models/route_spec.rb
@@ -2,6 +2,11 @@ require 'spec_helper'
RSpec.describe Chouette::Route, :type => :model do
subject(:route){ create :route }
+ context "the checksum" do
+ it "should change when a stop is removed" do
+ expect{route.stop_points.last.destroy}.to change {route.reload.checksum}
+ end
+ end
context "metadatas" do
it "should be empty at first" do
expect(Chouette::Route.has_metadata?).to be_truthy