diff options
| author | Xinhui | 2017-07-07 16:02:51 +0200 | 
|---|---|---|
| committer | Xinhui | 2017-07-07 16:04:38 +0200 | 
| commit | 6f06b32a423abe8fb6ae7e69589eaa72d5dfe728 (patch) | |
| tree | 183031572130e7d9ab92538f7bc503cc9ff661f4 | |
| parent | 68319d7e9866a1fa72e1b4439989d0c364dd63b2 (diff) | |
| download | chouette-core-6f06b32a423abe8fb6ae7e69589eaa72d5dfe728.tar.bz2 | |
Observer for model Calendar
| -rw-r--r-- | app/models/calendar_observer.rb | 18 | ||||
| -rw-r--r-- | config/application.rb | 2 | ||||
| -rw-r--r-- | spec/models/calendar_observer_spec.rb | 43 | 
3 files changed, 62 insertions, 1 deletions
| diff --git a/app/models/calendar_observer.rb b/app/models/calendar_observer.rb new file mode 100644 index 000000000..789805356 --- /dev/null +++ b/app/models/calendar_observer.rb @@ -0,0 +1,18 @@ +class CalendarObserver < ActiveRecord::Observer + +  def after_update calendar +    return unless calendar.shared + +    User.with_organisation.each do |user| +      MailerJob.perform_later('CalendarMailer', 'updated', [calendar, user]) +    end +  end + +  def after_create calendar +    return unless calendar.shared + +    User.with_organisation.each do |user| +      MailerJob.perform_later('CalendarMailer', 'created', [calendar, user]) +    end +  end +end diff --git a/config/application.rb b/config/application.rb index 6c8de781d..02d2b4fc2 100644 --- a/config/application.rb +++ b/config/application.rb @@ -30,7 +30,7 @@ module ChouetteIhm      # Configure Browserify to use babelify to compile ES6      config.browserify_rails.commandline_options = "-t [ babelify --presets [ react es2015 ] ]" -    config.active_record.observers = :route_observer +    config.active_record.observers = [:route_observer, :calendar_observer]      config.active_record.raise_in_transactional_callbacks = true      unless Rails.env.production? diff --git a/spec/models/calendar_observer_spec.rb b/spec/models/calendar_observer_spec.rb new file mode 100644 index 000000000..abb462d25 --- /dev/null +++ b/spec/models/calendar_observer_spec.rb @@ -0,0 +1,43 @@ +require 'rails_helper' + +RSpec.describe CalendarObserver, type: :observer do +  let(:calendar) { create(:calendar, shared: true) } +  let(:user)     { create(:user, organisation: create(:organisation)) } + +  context 'after_update' do +    it 'should observe calendar updates' do +      expect(CalendarObserver.instance).to receive(:after_update).with calendar +      calendar.update_attribute(:name, 'edited_name') +    end + +    it 'should schedule mailer on calendar update' do +      calendar.name = 'edited_name' +      expect(MailerJob).to receive(:perform_later).with 'CalendarMailer', 'updated', [calendar, user] +      calendar.save +    end + +    it 'should not schedule mailer for none shared calendar on update' do +      calendar = create(:calendar, shared: false) +      calendar.name = 'edited_name' +      expect(MailerJob).to_not receive(:perform_later).with 'CalendarMailer', 'updated', [calendar, user] +      calendar.save +    end +  end + +  context 'after_create' do +    it 'should observe calendar create' do +      expect(CalendarObserver.instance).to receive(:after_create) +      build(:calendar).save +    end + +    it 'should schedule mailer on calendar create' do +      expect(MailerJob).to receive(:perform_later).with 'CalendarMailer', 'created', [anything, user] +      build(:calendar, shared: true).save +    end + +    it 'should not schedule mailer for none shared calendar on create' do +      expect(MailerJob).to_not receive(:perform_later).with 'CalendarMailer', 'created', [anything, user] +      build(:calendar, shared: false).save +    end +  end +end | 
