diff options
| author | Teddy Wing | 2017-06-09 10:53:09 +0200 |
|---|---|---|
| committer | Teddy Wing | 2017-06-09 10:53:09 +0200 |
| commit | 75ff0d93115a3a007468b726d909e17c6995c427 (patch) | |
| tree | 4bf8651b6900a72865027d35cd560fa37603ca4e | |
| parent | 89a81c459b60391603f38cb1a477e883d3bb2403 (diff) | |
| parent | 0683fa11937480734ac1da5db993442b8481d674 (diff) | |
| download | chouette-core-75ff0d93115a3a007468b726d909e17c6995c427.tar.bz2 | |
Merge remote-tracking branch 'origin/master' into 3479-refactor-table_builder-helper
20 files changed, 336 insertions, 157 deletions
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js index aa2d208df..0ed8660d5 100644 --- a/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js +++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js @@ -22,90 +22,91 @@ class CreateModal extends Component { } if(this.props.status.fetchSuccess == true) { return ( - <div className='row mt-md'> - <div className='col-lg-12 text-right'> - <button - type='button' - className='btn btn-outline-primary' - data-toggle='modal' - data-target='#NewJourneyPatternModal' - onClick={this.props.onOpenCreateModal} - > - Ajouter une mission - </button> + <div className="select_toolbox"> + <ul> + <li className='st_action'> + <button + type='button' + data-toggle='modal' + data-target='#NewJourneyPatternModal' + onClick={this.props.onOpenCreateModal} + > + <span className="fa fa-plus"></span> + </button> - <div className={ 'modal fade ' + ((this.props.modal.type == 'create') ? 'in' : '') } id='NewJourneyPatternModal'> - <div className='modal-container'> - <div className='modal-dialog'> - <div className='modal-content'> - <div className='modal-header'> - <h4 className='modal-title'>Ajouter une mission</h4> - </div> + <div className={ 'modal fade ' + ((this.props.modal.type == 'create') ? 'in' : '') } id='NewJourneyPatternModal'> + <div className='modal-container'> + <div className='modal-dialog'> + <div className='modal-content'> + <div className='modal-header'> + <h4 className='modal-title'>Ajouter une mission</h4> + </div> - {(this.props.modal.type == 'create') && ( - <form> - <div className='modal-body'> - <div className='form-group'> - <label className='control-label is-required'>Nom</label> - <input - type='text' - ref='name' - className='form-control' - onKeyDown={(e) => actions.resetValidation(e.currentTarget)} - required - /> - </div> - <div className='row'> - <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'> - <div className='form-group'> - <label className='control-label is-required'>Nom public</label> - <input - type='text' - ref='published_name' - className='form-control' - onKeyDown={(e) => actions.resetValidation(e.currentTarget)} - required - /> - </div> + {(this.props.modal.type == 'create') && ( + <form> + <div className='modal-body'> + <div className='form-group'> + <label className='control-label is-required'>Nom</label> + <input + type='text' + ref='name' + className='form-control' + onKeyDown={(e) => actions.resetValidation(e.currentTarget)} + required + /> </div> - <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'> - <div className='form-group'> - <label className='control-label is-required'>Code mission</label> - <input - type='text' - ref='registration_number' - className='form-control' - onKeyDown={(e) => actions.resetValidation(e.currentTarget)} - required - /> + <div className='row'> + <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'> + <div className='form-group'> + <label className='control-label is-required'>Nom public</label> + <input + type='text' + ref='published_name' + className='form-control' + onKeyDown={(e) => actions.resetValidation(e.currentTarget)} + required + /> + </div> + </div> + <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'> + <div className='form-group'> + <label className='control-label is-required'>Code mission</label> + <input + type='text' + ref='registration_number' + className='form-control' + onKeyDown={(e) => actions.resetValidation(e.currentTarget)} + required + /> + </div> </div> </div> </div> - </div> - <div className='modal-footer'> - <button - className='btn btn-link' - data-dismiss='modal' - type='button' - onClick={this.props.onModalClose} - > - Annuler - </button> - <button - className='btn btn-primary' - type='button' - onClick={this.handleSubmit.bind(this)} - > - Valider - </button> - </div> - </form> - )} + <div className='modal-footer'> + <button + className='btn btn-link' + data-dismiss='modal' + type='button' + onClick={this.props.onModalClose} + > + Annuler + </button> + <button + className='btn btn-primary' + type='button' + onClick={this.handleSubmit.bind(this)} + > + Valider + </button> + </div> + </form> + )} + </div> </div> </div> </div> - </div> - </div> + </li> + </ul> </div> ) } else { diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/ConfirmModal.js b/app/assets/javascripts/es6_browserified/time_tables/components/ConfirmModal.js index c2229d991..40ae0eccf 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/components/ConfirmModal.js +++ b/app/assets/javascripts/es6_browserified/time_tables/components/ConfirmModal.js @@ -2,7 +2,7 @@ var React = require('react') var Component = require('react').Component var PropTypes = require('react').PropTypes -const ConfirmModal = ({dispatch, modal, onModalAccept, onModalCancel, journeyPatterns}) => ( +const ConfirmModal = ({dispatch, modal, onModalAccept, onModalCancel, timetable, metas}) => ( <div className={ 'modal fade ' + ((modal.type == 'confirm') ? 'in' : '') } id='ConfirmModal'> <div className='modal-container'> <div className='modal-dialog'> @@ -28,7 +28,7 @@ const ConfirmModal = ({dispatch, modal, onModalAccept, onModalCancel, journeyPat className='btn btn-primary' data-dismiss='modal' type='button' - onClick = {() => {onModalAccept(modal.confirmModal.callback, journeyPatterns)}} + onClick = {() => {onModalAccept(modal.confirmModal.callback, timetable, metas)}} > Valider </button> diff --git a/app/assets/javascripts/es6_browserified/time_tables/containers/ConfirmModal.js b/app/assets/javascripts/es6_browserified/time_tables/containers/ConfirmModal.js index 8095e1e7c..6282c1d1d 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/containers/ConfirmModal.js +++ b/app/assets/javascripts/es6_browserified/time_tables/containers/ConfirmModal.js @@ -5,13 +5,14 @@ var ConfirmModal = require('../components/ConfirmModal') const mapStateToProps = (state) => { return { modal: state.modal, - journeyPatterns: state.journeyPatterns + timetable: state.timetable, + metas: state.metas } } const mapDispatchToProps = (dispatch) => { return { - onModalAccept: (next, timetable, metas, state) =>{ + onModalAccept: (next, timetable, metas) =>{ dispatch(actions.fetchingApi()) actions.submitTimetable(dispatch, timetable, metas, next) }, diff --git a/app/assets/javascripts/es6_browserified/time_tables/reducers/metas.js b/app/assets/javascripts/es6_browserified/time_tables/reducers/metas.js index 4f1e7a528..2ce084efd 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/reducers/metas.js +++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/metas.js @@ -12,6 +12,9 @@ const metas = (state = {}, action) => { color: action.json.color, calendar: action.json.calendar ? action.json.calendar : null }) + case 'RECEIVE_MONTH': + let dt = (typeof state.day_types === 'string') ? actions.strToArrayDayTypes(state.day_types) : state.day_types + return _.assign({}, state, {day_types: dt}) case 'INCLUDE_DATE_IN_PERIOD': case 'EXCLUDE_DATE_FROM_PERIOD': case 'DELETE_PERIOD': diff --git a/app/assets/javascripts/es6_browserified/time_tables/reducers/pagination.js b/app/assets/javascripts/es6_browserified/time_tables/reducers/pagination.js index 660484c58..3d96fb7b7 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/reducers/pagination.js +++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/pagination.js @@ -5,8 +5,12 @@ const pagination = (state = {}, action) => { case 'RECEIVE_TIME_TABLES': return _.assign({}, state, { currentPage: action.json.current_periode_range, - periode_range: action.json.periode_range + periode_range: action.json.periode_range, + stateChanged: false }) + case 'RECEIVE_MONTH': + case 'RECEIVE_ERRORS': + return _.assign({}, state, {stateChanged: false}) case 'GO_TO_PREVIOUS_PAGE': case 'GO_TO_NEXT_PAGE': let nextPage = action.nextPage ? 1 : -1 @@ -22,7 +26,6 @@ const pagination = (state = {}, action) => { case 'VALIDATE_PERIOD_FORM': case 'UPDATE_COMMENT': case 'UPDATE_COLOR': - case 'UPDATE_DAY_TYPES': toggleOnConfirmModal('modal') return _.assign({}, state, {stateChanged: true}) default: diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js index ba27ca72c..97aa60526 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js @@ -8,10 +8,10 @@ var actions = require("./actions") var enableBatching = require('./batch').enableBatching // logger, DO NOT REMOVE -var applyMiddleware = require('redux').applyMiddleware -var createLogger = require('redux-logger') -var thunkMiddleware = require('redux-thunk').default -var promise = require('redux-promise') +// var applyMiddleware = require('redux').applyMiddleware +// var createLogger = require('redux-logger') +// var thunkMiddleware = require('redux-thunk').default +// var promise = require('redux-promise') var selectedJP = [] @@ -85,12 +85,12 @@ if (window.jpOrigin){ initialState.filters.queryString = actions.encodeParams(params) } -const loggerMiddleware = createLogger() +// const loggerMiddleware = createLogger() let store = createStore( enableBatching(vehicleJourneysApp), - initialState, - applyMiddleware(thunkMiddleware, promise, loggerMiddleware) + initialState + // applyMiddleware(thunkMiddleware, promise, loggerMiddleware) ) render( 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/app/views/routing_constraint_zones/_form.html.slim b/app/views/routing_constraint_zones/_form.html.slim index b1c77a44b..082e8f7f8 100644 --- a/app/views/routing_constraint_zones/_form.html.slim +++ b/app/views/routing_constraint_zones/_form.html.slim @@ -1,19 +1,14 @@ -= simple_form_for [@referential, @line, @routing_constraint_zone] do |f| - .row - .col-lg-6.col-sm-12 - = f.input :name - .row - .col-lg-6.col-sm-12 - = f.input :route_id, collection: @line.routes.select { |route| route.stop_points.count > 2 }, include_blank: false - .row - .col-lg-6.col-sm-12 - - stop_points_collection = @routing_constraint_zone.persisted? ? @routing_constraint_zone.route.stop_points : [] - = f.input :stop_point_ids, as: :select, collection: stop_points_collection, selected: @routing_constraint_zone.stop_point_ids, label: Chouette::StopPoint.model_name.human.pluralize.capitalize, label_method: :name, input_html: { 'data-select2ed': 'true', 'data-select2ed-placeholder': 'Sélection des arrêts sur séquence d\'arrêts', 'multiple': 'multiple', style: 'width: 100%' } += simple_form_for [@referential, @line, @routing_constraint_zone], html: {class: 'form-horizontal', id: 'itl_form'}, wrapper: :horizontal_form do |form| .row - .col-lg-12.text-right - = link_to 'Annuler', :back, class: 'btn btn-link' - = f.button :submit, class: 'btn btn-danger' + .col-lg-12 + = form.input :name + + = form.input :route_id, collection: @line.routes.select { |route| route.stop_points.count > 2 }, include_blank: false + + - stop_points_collection = @routing_constraint_zone.persisted? ? @routing_constraint_zone.route.stop_points : [] + = form.input :stop_point_ids, as: :select, collection: stop_points_collection, selected: @routing_constraint_zone.stop_point_ids, label: Chouette::StopPoint.model_name.human.pluralize.capitalize, label_method: :name, input_html: { 'data-select2ed': 'true', 'data-select2ed-placeholder': 'Sélection des arrêts sur séquence d\'arrêts', 'multiple': 'multiple', style: 'width: 100%' } + = form.button :submit, t('actions.submit'), class: 'btn btn-default formSubmitr', form: 'itl_form' -= hidden_field_tag 'stop_point_ids', @routing_constraint_zone.stop_point_ids.to_s, id: 'stop_point_ids' + = hidden_field_tag 'stop_point_ids', @routing_constraint_zone.stop_point_ids.to_s, id: 'stop_point_ids' diff --git a/app/views/routing_constraint_zones/edit.html.slim b/app/views/routing_constraint_zones/edit.html.slim index fcb0d08a8..d81a347e0 100644 --- a/app/views/routing_constraint_zones/edit.html.slim +++ b/app/views/routing_constraint_zones/edit.html.slim @@ -1,5 +1,12 @@ -= title_tag t('.title', routing_constraint_zone: @routing_constraint_zone.name) +/ PageHeader += pageheader 'map-marker', + t('.title'), + '', + t('last_update', time: l(@routing_constraint_zone.updated_at, format: :short)) -.row - .col-lg-8.col-lg-offset-2.col-md-8.col-md-offset-2.col-sm-8.col-sm-offset-2 - == render 'form' +/ PageContent +.page_content + .container-fluid + .row + .col-lg-8.col-lg-offset-2.col-md-8.col-md-offset-2.col-sm-10.col-sm-offset-1 + == render 'form' diff --git a/app/views/routing_constraint_zones/new.html.slim b/app/views/routing_constraint_zones/new.html.slim index fcb0d08a8..f6ae62825 100644 --- a/app/views/routing_constraint_zones/new.html.slim +++ b/app/views/routing_constraint_zones/new.html.slim @@ -1,5 +1,10 @@ -= title_tag t('.title', routing_constraint_zone: @routing_constraint_zone.name) +/ PageHeader += pageheader 'map-marker', + t('.title') -.row - .col-lg-8.col-lg-offset-2.col-md-8.col-md-offset-2.col-sm-8.col-sm-offset-2 - == render 'form' +/ PageContent +.page_content + .container-fluid + .row + .col-lg-8.col-lg-offset-2.col-md-8.col-md-offset-2.col-sm-10.col-sm-offset-1 + == render 'form' diff --git a/app/views/time_tables/index.html.slim b/app/views/time_tables/index.html.slim index c17f96c85..402b09b98 100644 --- a/app/views/time_tables/index.html.slim +++ b/app/views/time_tables/index.html.slim @@ -20,7 +20,7 @@ "Nombre de courses associées" => Proc.new{ |tt| tt.vehicle_journeys.count }, "Journées d'application" => Proc.new{ |tt| (%w(monday tuesday wednesday thursday friday saturday sunday).collect{|d| tt.send(d) ? t("calendars.days.#{d}") : '' }).reject{|a| a.empty?}.join(', ').html_safe }, :calendar => Proc.new{ |tt| tt.calendar ? tt.calendar.try(:name) : '-' }, :updated_at => Proc.new {|tt| l(tt.updated_at, format: :short)} }, - [:show, :edit, :duplicate, :delete], + [:show, :edit, :duplicate, :actualize, :delete], [], 'table has-search' diff --git a/app/views/time_tables/show.html.slim b/app/views/time_tables/show.html.slim index 1c5984a7d..2e71ebb9e 100644 --- a/app/views/time_tables/show.html.slim +++ b/app/views/time_tables/show.html.slim @@ -4,6 +4,7 @@ = pageheader 'map-marker', @time_table.comment, '', + t('last_update', time: l(@time_table.updated_at, format: :short)), (policy(@time_table).edit? ? link_to(t('actions.edit'), edit_referential_time_table_path(@referential, @time_table), class: 'btn btn-default') : '') / Below is secundary actions & optional contents (filters, ...) diff --git a/db/migrate/20170607141031_change_begin_date_from_clean_ups.rb b/db/migrate/20170607141031_change_begin_date_from_clean_ups.rb new file mode 100644 index 000000000..850616b18 --- /dev/null +++ b/db/migrate/20170607141031_change_begin_date_from_clean_ups.rb @@ -0,0 +1,9 @@ +class ChangeBeginDateFromCleanUps < ActiveRecord::Migration + def up + change_column :clean_ups, :begin_date, :date + end + + def down + change_column :clean_ups, :begin_date, :datetime + end +end diff --git a/db/migrate/20170607141317_change_end_date_from_clean_ups.rb b/db/migrate/20170607141317_change_end_date_from_clean_ups.rb new file mode 100644 index 000000000..e47197ff1 --- /dev/null +++ b/db/migrate/20170607141317_change_end_date_from_clean_ups.rb @@ -0,0 +1,9 @@ +class ChangeEndDateFromCleanUps < ActiveRecord::Migration + def up + change_column :clean_ups, :end_date, :date + end + + def down + change_column :clean_ups, :end_date, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index 251790a88..be976c3f1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170605135126) do +ActiveRecord::Schema.define(version: 20170607141317) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -108,10 +108,10 @@ ActiveRecord::Schema.define(version: 20170605135126) do t.datetime "started_at" t.datetime "ended_at" t.integer "referential_id", limit: 8 - t.datetime "begin_date" + t.date "begin_date" t.datetime "created_at" t.datetime "updated_at" - t.datetime "end_date" + t.date "end_date" t.string "date_type" 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/javascripts/time_table/reducers/pagination_spec.js b/spec/javascripts/time_table/reducers/pagination_spec.js index 740ded3ac..5da58427e 100644 --- a/spec/javascripts/time_table/reducers/pagination_spec.js +++ b/spec/javascripts/time_table/reducers/pagination_spec.js @@ -118,11 +118,4 @@ describe('pagination reducer', () => { }) ).toEqual(Object.assign({}, state, {stateChanged: true})) }) - it('should handle UPDATE_DAY_TYPES', () => { - expect( - paginationReducer(state, { - type: 'UPDATE_DAY_TYPES' - }) - ).toEqual(Object.assign({}, state, {stateChanged: true})) - }) }) 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 |
