aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXinhui2017-06-07 17:03:37 +0200
committerXinhui2017-06-08 15:41:21 +0200
commit0683fa11937480734ac1da5db993442b8481d674 (patch)
tree2d0650c27d88e52cde44195b2010e772a37648b7
parent62e45a99b39529fd478235c081f77e7511903438 (diff)
downloadchouette-core-0683fa11937480734ac1da5db993442b8481d674.tar.bz2
Wip Cleanup time_tables time_table_dates time_table_periods
-rw-r--r--app/models/chouette/time_table_date.rb2
-rw-r--r--app/models/clean_up.rb62
-rw-r--r--spec/factories/chouette_time_table.rb1
-rw-r--r--spec/factories/clean_ups.rb13
-rw-r--r--spec/models/clean_up_spec.rb144
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