aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXinhui2017-05-02 12:42:37 +0200
committerRobert2017-05-02 16:44:25 +0200
commit0a7b3fb40b40a3ff613a11cd4936bf4cd9b2cc3a (patch)
tree08df498eadb1960b292a8d24386e017a650a2b94
parent3408fc0023e1c43359a0b52e249d6ce270f2f9d4 (diff)
downloadchouette-core-0a7b3fb40b40a3ff613a11cd4936bf4cd9b2cc3a.tar.bz2
TimeTables#edit crud periods from state
Refs #2899
-rw-r--r--app/models/chouette/time_table.rb21
-rw-r--r--spec/models/chouette/time_table_spec.rb33
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