diff options
| author | Xinhui | 2017-06-07 17:03:37 +0200 |
|---|---|---|
| committer | Xinhui | 2017-06-08 15:41:21 +0200 |
| commit | 0683fa11937480734ac1da5db993442b8481d674 (patch) | |
| tree | 2d0650c27d88e52cde44195b2010e772a37648b7 | |
| parent | 62e45a99b39529fd478235c081f77e7511903438 (diff) | |
| download | chouette-core-0683fa11937480734ac1da5db993442b8481d674.tar.bz2 | |
Wip Cleanup time_tables time_table_dates time_table_periods
| -rw-r--r-- | app/models/chouette/time_table_date.rb | 2 | ||||
| -rw-r--r-- | app/models/clean_up.rb | 62 | ||||
| -rw-r--r-- | spec/factories/chouette_time_table.rb | 1 | ||||
| -rw-r--r-- | spec/factories/clean_ups.rb | 13 | ||||
| -rw-r--r-- | spec/models/clean_up_spec.rb | 144 |
5 files changed, 187 insertions, 35 deletions
diff --git a/app/models/chouette/time_table_date.rb b/app/models/chouette/time_table_date.rb index 4624ae88e..b881c9a5d 100644 --- a/app/models/chouette/time_table_date.rb +++ b/app/models/chouette/time_table_date.rb @@ -6,6 +6,8 @@ class Chouette::TimeTableDate < Chouette::ActiveRecord validates_presence_of :date validates_uniqueness_of :date, :scope => :time_table_id + scope :in_dates, -> { where(in_out: true) } + def self.model_name ActiveModel::Name.new Chouette::TimeTableDate, Chouette, "TimeTableDate" end diff --git a/app/models/clean_up.rb b/app/models/clean_up.rb index 457e90b65..b14067b73 100644 --- a/app/models/clean_up.rb +++ b/app/models/clean_up.rb @@ -15,25 +15,57 @@ class CleanUp < ActiveRecord::Base end def clean - result = {} - result['time_table_count'] = self.clean_time_tables - result['vehicle_journey_count'] = self.clean_vehicle_journeys - result['journey_pattern_count'] = self.clean_journey_patterns - result + {}.tap do |result| + 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) + end + end + + def destroy_time_tables_between + time_tables = Chouette::TimeTable.where('end_date <= ? AND start_date >= ?', self.end_date, self.begin_date) + self.destroy_time_tables(time_tables) + end + + def destroy_time_tables_before + time_tables = Chouette::TimeTable.where('end_date <= ?', self.begin_date) + self.destroy_time_tables(time_tables) + end + + def destroy_time_tables_after + time_tables = Chouette::TimeTable.where('start_date >= ?', self.begin_date) + self.destroy_time_tables(time_tables) + end + + def destroy_time_table_dates_before + Chouette::TimeTableDate.in_dates.where('date <= ?', self.begin_date).destroy_all + end + + def destroy_time_tables_dates_after + Chouette::TimeTableDate.in_dates.where('date >= ?', self.begin_date).destroy_all + end + + def destroy_time_tables_dates_between + Chouette::TimeTableDate.in_dates.where('date >= ? AND date <= ?', self.begin_date, self.end_date).destroy_all + end + + def destroy_time_tables_periods_before + Chouette::TimeTablePeriod.where('period_end <= ?', self.begin_date).destroy_all end - def clean_time_tables - Chouette::TimeTable.validity_out_between?(begin_date, end_date).delete_all + def destroy_time_tables_periods_after + Chouette::TimeTablePeriod.where('period_start >= ?', self.begin_date).destroy_all end - def clean_vehicle_journeys - ids = Chouette::VehicleJourney.includes(:time_tables).where(:time_tables => {id: nil}).pluck(:id) - Chouette::VehicleJourney.where(id: ids).delete_all + def destroy_time_tables_periods_between + Chouette::TimeTablePeriod.where('period_start >= ? AND period_end <= ?', self.begin_date, self.end_date).destroy_all end - def clean_journey_patterns - ids = Chouette::JourneyPattern.includes(:vehicle_journeys).where(:vehicle_journeys => {id: nil}).pluck(:id) - Chouette::JourneyPattern.where(id: ids).delete_all + def destroy_time_tables(time_tables) + time_tables.each do |time_table| + time_table.vehicle_journeys.map(&:destroy) + end + time_tables.destroy_all end aasm column: :status do @@ -61,11 +93,11 @@ class CleanUp < ActiveRecord::Base def log_successful message_attributs update_attribute(:ended_at, Time.now) - CleanUpResult.create(clean_up: self, message_key: :successfull, message_attributs: message_attributs) + CleanUpResult.create(destroy_up: self, message_key: :successfull, message_attributs: message_attributs) end def log_failed message_attributs update_attribute(:ended_at, Time.now) - CleanUpResult.create(clean_up: self, message_key: :failed, message_attributs: message_attributs) + CleanUpResult.create(destroy_up: self, message_key: :failed, message_attributs: message_attributs) end end diff --git a/spec/factories/chouette_time_table.rb b/spec/factories/chouette_time_table.rb index f462349cf..6480df79d 100644 --- a/spec/factories/chouette_time_table.rb +++ b/spec/factories/chouette_time_table.rb @@ -1,6 +1,7 @@ FactoryGirl.define do factory :time_table_date, :class => Chouette::TimeTableDate do + association :time_table, :factory => :time_table end factory :time_table_period, :class => Chouette::TimeTablePeriod do diff --git a/spec/factories/clean_ups.rb b/spec/factories/clean_ups.rb index 41165ac16..d3746c3b2 100644 --- a/spec/factories/clean_ups.rb +++ b/spec/factories/clean_ups.rb @@ -1,15 +1,6 @@ FactoryGirl.define do factory :clean_up do - status "MyString" -started_at "2016-11-14 14:45:18" -ended_at "2016-11-14 14:45:18" -referential nil -keep_lines false -keep_stops false -keep_companies false -keep_networks false -keep_group_of_lines false -expected_date "2016-11-14 14:45:18" + begin_date { Date.today} + end_date { Date.today + 1.month } end - end diff --git a/spec/models/clean_up_spec.rb b/spec/models/clean_up_spec.rb index c22d32eaa..d6aa7652c 100644 --- a/spec/models/clean_up_spec.rb +++ b/spec/models/clean_up_spec.rb @@ -1,21 +1,147 @@ require 'rails_helper' RSpec.describe CleanUp, :type => :model do - let(:cleaner) { CleanUp.new } it { should validate_presence_of(:begin_date) } it { should validate_presence_of(:date_type) } it { should belong_to(:referential) } - it 'should delete vehiclejourneys without timetables' do - create_list(:vehicle_journey, 2) - create_list(:vehicle_journey, 2, time_tables:[create(:time_table)]) - expect(cleaner.clean_vehicle_journeys).to eq 2 + context '#clean' do + let(:cleaner) { create(:clean_up, date_type: :before) } + + it 'should call destroy_time_tables_before' do + cleaner.date_type = :before + expect(cleaner).to receive(:destroy_time_tables_before) + expect(cleaner).to receive(:destroy_time_tables_dates_before) + expect(cleaner).to receive(:destroy_time_tables_periods_before) + cleaner.clean + end + + it 'should call destroy_time_tables_after' do + cleaner.date_type = :after + expect(cleaner).to receive(:destroy_time_tables_after) + expect(cleaner).to receive(:destroy_time_tables_dates_after) + expect(cleaner).to receive(:destroy_time_tables_periods_after) + cleaner.clean + end + + it 'should call destroy_time_tables_between' do + cleaner.date_type = :between + expect(cleaner).to receive(:destroy_time_tables_between) + expect(cleaner).to receive(:destroy_time_tables_dates_between) + expect(cleaner).to receive(:destroy_time_tables_periods_between) + cleaner.clean + end + end + + context '#destroy_time_tables_dates_between' do + let!(:time_table) { create(:time_table) } + let(:cleaner) { create(:clean_up, date_type: :between) } + + before do + time_table.periods.clear + time_table.save + cleaner.begin_date = time_table.start_date + cleaner.end_date = time_table.end_date + end + + it 'should destroy record' do + expect{ cleaner.destroy_time_tables_dates_between }.to change { + Chouette::TimeTableDate.count + }.by(-time_table.dates.count) + end + + it 'should not destroy record not in range' do + cleaner.begin_date = time_table.end_date + 1.day + cleaner.end_date = cleaner.begin_date + 1.day + + expect{ cleaner.destroy_time_tables_dates_between }.to_not change { + Chouette::TimeTableDate.count + } + end + end + + context '#destroy_time_tables_dates_after' do + let!(:time_table_date) { create(:time_table_date, date: Date.yesterday, in_out: true) } + let(:cleaner) { create(:clean_up, date_type: :after, begin_date: time_table_date.date) } + + it 'should destroy record' do + count = Chouette::TimeTableDate.where('date >= ?', cleaner.begin_date).count + expect{ cleaner.destroy_time_tables_dates_after }.to change { + Chouette::TimeTableDate.count + }.by(-count) + end + end + + context '#destroy_time_tables_between' do + let!(:time_table) { create(:time_table ) } + let(:cleaner) { create(:clean_up, date_type: :after, begin_date: time_table.start_date, end_date: time_table.end_date) } + + it 'should destroy time_tables with validity period in purge range' do + expect{ cleaner.destroy_time_tables_between }.to change { + Chouette::TimeTable.count + }.by(-1) + end + + it 'should not destroy time_tables if not totaly inside purge range' do + cleaner.begin_date = time_table.start_date + 1.day + expect{ cleaner.destroy_time_tables_between }.to_not change { + Chouette::TimeTable.count + } + end + end + + context '#destroy_time_tables_after' do + let!(:time_table) { create(:time_table ) } + let(:cleaner) { create(:clean_up, date_type: :after, begin_date: time_table.start_date) } + + it 'should destroy time_tables with start_date >= purge begin_date' do + expect{ cleaner.destroy_time_tables_after }.to change { + Chouette::TimeTable.count + }.by(-1) + end + + it 'should not destroy time_tables with start_date < purge begin date' do + cleaner.begin_date = time_table.end_date + expect{ cleaner.destroy_time_tables_after }.to_not change { + Chouette::TimeTable.count + } + end end - it 'should delete journeypatterns without vehicle journeys' do - create_list(:journey_pattern, 2) - create_list(:vehicle_journey, 2, journey_pattern: create(:journey_pattern)) - expect(cleaner.clean_journey_patterns).to eq 2 + context '#destroy_time_tables' do + let!(:time_table) { create(:time_table) } + let(:cleaner) { create(:clean_up, date_type: :before) } + + it 'should destroy all time_tables' do + expect{cleaner.destroy_time_tables(Chouette::TimeTable.all)}.to change { + Chouette::TimeTable.count + }.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) + end + end + + context '#destroy_time_tables_before' do + let!(:time_table) { create(:time_table ) } + let(:cleaner) { create(:clean_up, date_type: :before, begin_date: time_table.end_date) } + + it 'should destroy time_tables with end_date <= purge begin_date' do + expect{ cleaner.destroy_time_tables_before }.to change { + Chouette::TimeTable.count + }.by(-1) + end + + it 'should not destroy time_tables with end_date > purge begin date' do + cleaner.begin_date = Date.today + expect{ cleaner.destroy_time_tables_before }.to_not change { + Chouette::TimeTable.count + } + end end end |
