aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXinhui2017-07-07 16:02:51 +0200
committerXinhui2017-07-07 16:04:38 +0200
commit6f06b32a423abe8fb6ae7e69589eaa72d5dfe728 (patch)
tree183031572130e7d9ab92538f7bc503cc9ff661f4
parent68319d7e9866a1fa72e1b4439989d0c364dd63b2 (diff)
downloadchouette-core-6f06b32a423abe8fb6ae7e69589eaa72d5dfe728.tar.bz2
Observer for model Calendar
-rw-r--r--app/models/calendar_observer.rb18
-rw-r--r--config/application.rb2
-rw-r--r--spec/models/calendar_observer_spec.rb43
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