aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXinhui2017-06-28 15:28:35 +0200
committerXinhui2017-06-28 15:28:41 +0200
commitd704f6433672dbdddc1bdad9ed9bb48a61aaa00b (patch)
tree7b8bf12195634f6ad6a70b723f9c34e9d5316ed5
parentf64246b8272a35731b3edba243b8d8e1898df1de (diff)
downloadchouette-core-d704f6433672dbdddc1bdad9ed9bb48a61aaa00b.tar.bz2
Fix cleanup should only destroy vj without any time_table
Refs #3917
-rw-r--r--app/models/clean_up.rb10
-rw-r--r--spec/factories/clean_ups.rb1
-rw-r--r--spec/models/clean_up_spec.rb27
3 files changed, 31 insertions, 7 deletions
diff --git a/app/models/clean_up.rb b/app/models/clean_up.rb
index a791065aa..e39928a17 100644
--- a/app/models/clean_up.rb
+++ b/app/models/clean_up.rb
@@ -19,6 +19,7 @@ class CleanUp < ActiveRecord::Base
result['time_table'] = send("destroy_time_tables_#{self.date_type}").try(:count)
result['time_table_date'] = send("destroy_time_tables_dates_#{self.date_type}").try(:count)
result['time_table_period'] = send("destroy_time_tables_periods_#{self.date_type}").try(:count)
+ result['vehicle_journey'] = destroy_vehicle_journey_without_time_table.try(:count)
self.overlapping_periods.each do |period|
exclude_dates_in_overlapping_period(period)
end
@@ -100,9 +101,16 @@ class CleanUp < ActiveRecord::Base
end
end
+ def destroy_vehicle_journey_without_time_table
+ Chouette::VehicleJourney.without_any_time_table.destroy_all
+ end
+
def destroy_time_tables(time_tables)
+ # Delete vehicle_journey time_table association
time_tables.each do |time_table|
- time_table.vehicle_journeys.map(&:destroy)
+ time_table.vehicle_journeys.each do |vj|
+ vj.time_tables.delete(time_table)
+ end
end
time_tables.destroy_all
end
diff --git a/spec/factories/clean_ups.rb b/spec/factories/clean_ups.rb
index d3746c3b2..7107769ff 100644
--- a/spec/factories/clean_ups.rb
+++ b/spec/factories/clean_ups.rb
@@ -2,5 +2,6 @@ FactoryGirl.define do
factory :clean_up do
begin_date { Date.today}
end_date { Date.today + 1.month }
+ date_type { :before }
end
end
diff --git a/spec/models/clean_up_spec.rb b/spec/models/clean_up_spec.rb
index 4b1bf4da9..ee88ca773 100644
--- a/spec/models/clean_up_spec.rb
+++ b/spec/models/clean_up_spec.rb
@@ -191,7 +191,7 @@ RSpec.describe CleanUp, :type => :model do
context '#destroy_time_tables' do
let!(:time_table) { create(:time_table) }
- let(:cleaner) { create(:clean_up, date_type: :before) }
+ let(:cleaner) { create(:clean_up) }
it 'should destroy all time_tables' do
expect{cleaner.destroy_time_tables(Chouette::TimeTable.all)}.to change {
@@ -199,11 +199,26 @@ RSpec.describe CleanUp, :type => :model do
}.by(-1)
end
- it 'should destroy associated vehicle_journeys' do
- create(:vehicle_journey, time_tables: [time_table])
- expect{cleaner.destroy_time_tables(Chouette::TimeTable.all)}.to change {
- Chouette::VehicleJourney.count
- }.by(-1)
+ it 'should destroy time_table vehicle_journey association' do
+ vj = create(:vehicle_journey, time_tables: [time_table])
+ cleaner.destroy_time_tables(Chouette::TimeTable.all)
+ expect(vj.reload.time_tables).to be_empty
+ end
+ end
+
+ context '#destroy_vehicle_journey_without_time_table' do
+ let(:cleaner) { create(:clean_up) }
+
+ it 'should destroy vehicle_journey' do
+ vj = create(:vehicle_journey)
+ expect{cleaner.destroy_vehicle_journey_without_time_table
+ }.to change { Chouette::VehicleJourney.count }.by(-1)
+ end
+
+ it 'should not destroy vehicle_journey with time_table' do
+ create(:vehicle_journey, time_tables: [create(:time_table)])
+ expect{cleaner.destroy_vehicle_journey_without_time_table
+ }.to_not change { Chouette::VehicleJourney.count }
end
end