diff options
| author | Xinhui | 2017-05-02 12:42:37 +0200 |
|---|---|---|
| committer | Robert | 2017-05-02 16:44:25 +0200 |
| commit | 0a7b3fb40b40a3ff613a11cd4936bf4cd9b2cc3a (patch) | |
| tree | 08df498eadb1960b292a8d24386e017a650a2b94 | |
| parent | 3408fc0023e1c43359a0b52e249d6ce270f2f9d4 (diff) | |
| download | chouette-core-0a7b3fb40b40a3ff613a11cd4936bf4cd9b2cc3a.tar.bz2 | |
TimeTables#edit crud periods from state
Refs #2899
| -rw-r--r-- | app/models/chouette/time_table.rb | 21 | ||||
| -rw-r--r-- | spec/models/chouette/time_table_spec.rb | 33 |
2 files changed, 53 insertions, 1 deletions
diff --git a/app/models/chouette/time_table.rb b/app/models/chouette/time_table.rb index 7285e9716..fcdc525a9 100644 --- a/app/models/chouette/time_table.rb +++ b/app/models/chouette/time_table.rb @@ -54,7 +54,6 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord time_table_date = self.dates.find(date_id) if date_id next if !checked && !time_table_date - # Destroy date if no longer checked next if !checked && time_table_date.destroy @@ -67,9 +66,29 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord time_table_date.update_attributes({in_out: in_out}) end end + + self.state_update_periods state['time_table_periods'] self.save end + def state_update_periods state_periods + state_periods.each do |item| + period = self.periods.find(item['id']) if item['id'] + next if period && item['deleted'] && period.destroy + period ||= self.periods.build + + period.period_start = Date.parse(item['period_start']) + period.period_end = Date.parse(item['period_end']) + + if period.changed? + period.save + item['id'] = period.id + end + end + + state_periods.delete_if {|item| item['deleted']} + end + def self.state_permited_attributes item item.slice('comment').to_hash end diff --git a/spec/models/chouette/time_table_spec.rb b/spec/models/chouette/time_table_spec.rb index 96f91aa03..579300b74 100644 --- a/spec/models/chouette/time_table_spec.rb +++ b/spec/models/chouette/time_table_spec.rb @@ -14,10 +14,43 @@ describe Chouette::TimeTable, :type => :model do item['current_month'] = time_table.month_inspect(Date.today.beginning_of_month) item['current_periode_range'] = Date.today.beginning_of_month.to_s item['tags'] = time_table.tags.map{ |tag| {id: tag.id, name: tag.name}} + item['time_table_periods'] = time_table.periods.map{|p| {'id': p.id, 'period_start': p.period_start.to_s, 'period_end': p.period_end.to_s}} end end let(:state) { time_table_to_state subject } + + it 'should update time table periods association' do + period = state['time_table_periods'].first + period['period_start'] = (Date.today - 1.month).to_s + period['period_end'] = (Date.today + 1.month).to_s + + subject.state_update_periods state['time_table_periods'] + ['period_end', 'period_start'].each do |prop| + expect(subject.reload.periods.first.send(prop).to_s).to eq(period[prop]) + end + end + + it 'should create time table periods association' do + state['time_table_periods'] << { + 'id' => false, + 'period_start' => (Date.today + 1.year).to_s, + 'period_end' => (Date.today + 2.year).to_s + } + + expect { + subject.state_update_periods state['time_table_periods'] + }.to change {subject.periods.count}.by(1) + expect(state['time_table_periods'].last['id']).to eq subject.reload.periods.last.id + end + + it 'should delete time table periods association' do + state['time_table_periods'].first['deleted'] = true + expect { + subject.state_update_periods state['time_table_periods'] + }.to change {subject.periods.count}.by(-1) + end + it 'should save new tags' do subject.tag_list = "awesome, great" subject.save |
