Skip to content

Commit

Permalink
Extract event delete logic to Event.batch_delete
Browse files Browse the repository at this point in the history
  • Loading branch information
tszolar authored and jirutka committed Oct 16, 2015
1 parent 5ad56ff commit 9d864f9
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 1 deletion.
4 changes: 4 additions & 0 deletions app/models/event.rb
Expand Up @@ -21,6 +21,10 @@ def self.with_teacher(username)
filter(:teacher_ids.pg_array.contains([username]))
end

def self.batch_delete(ids)
where(id: ids, deleted: false).update(deleted: true, applied_schedule_exception_ids: nil)
end

def period
Period.new(starts_at, ends_at)
end
Expand Down
2 changes: 1 addition & 1 deletion app/roles/planned_timetable_slot.rb
Expand Up @@ -19,7 +19,7 @@ def generate_events(faculty_semester, semester_period)
def clear_extra_events(planned_events)
all_events = Event.where(timetable_slot_id: id, deleted: false)
extra_events = filter_extra_events(all_events, planned_events)
Event.where(id: extra_events.map(&:id), deleted: false).update(deleted: true, applied_schedule_exception_ids: nil)
Event.batch_delete(extra_events.map(&:id))
end

private
Expand Down
25 changes: 25 additions & 0 deletions spec/models/event_spec.rb
Expand Up @@ -73,4 +73,29 @@ def with_teacher(person_id)

end

describe '.batch_delete' do
let!(:event) { Fabricate(:event, applied_schedule_exception_ids: [42]) }

it 'sets deleted flag for given events' do
expect {
described_class.batch_delete([event.id])
event.refresh
}.to change(event, :deleted).from(false).to(true)
end

it 'does not mark other events' do
expect {
described_class.batch_delete([])
event.refresh
}.not_to change(event, :deleted).from(false)
end

it 'cleans applied_schedule_exception_ids for given events' do
expect {
described_class.batch_delete([event.id])
event.refresh
}.to change(event, :applied_schedule_exception_ids).from([42]).to(nil)
end
end

end

0 comments on commit 9d864f9

Please sign in to comment.