diff options
-rw-r--r-- | Gemfile | 1 | ||||
-rw-r--r-- | Gemfile.lock | 2 | ||||
-rw-r--r-- | app/observers/users_project_observer.rb | 9 | ||||
-rw-r--r-- | spec/observers/users_project_observer_spec.rb | 32 |
4 files changed, 27 insertions, 17 deletions
@@ -138,6 +138,7 @@ group :test do gem 'email_spec' gem 'resque_spec' gem "webmock" + gem 'test_after_commit' end group :production do diff --git a/Gemfile.lock b/Gemfile.lock index e517bb36f2c..f9a0128f0e0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -377,6 +377,7 @@ GEM tilt (~> 1.1, != 1.3.0) sqlite3 (1.3.6) stamp (0.1.6) + test_after_commit (0.0.1) therubyracer (0.10.1) libv8 (~> 3.3.10) thin (1.3.1) @@ -476,6 +477,7 @@ DEPENDENCIES spinach-rails sqlite3 stamp + test_after_commit therubyracer thin uglifier (= 1.0.3) diff --git a/app/observers/users_project_observer.rb b/app/observers/users_project_observer.rb index 0512e606712..0c9c2b2614a 100644 --- a/app/observers/users_project_observer.rb +++ b/app/observers/users_project_observer.rb @@ -1,7 +1,10 @@ class UsersProjectObserver < ActiveRecord::Observer - def after_create(users_project) + def after_commit(users_project) + return if users_project.destroyed? Notify.project_access_granted_email(users_project.id).deliver + end + def after_create(users_project) Event.create( project_id: users_project.project.id, action: Event::Joined, @@ -9,10 +12,6 @@ class UsersProjectObserver < ActiveRecord::Observer ) end - def after_update(users_project) - Notify.project_access_granted_email(users_project.id).deliver - end - def after_destroy(users_project) Event.create( project_id: users_project.project.id, diff --git a/spec/observers/users_project_observer_spec.rb b/spec/observers/users_project_observer_spec.rb index 07d71da8c71..a8e0834bc99 100644 --- a/spec/observers/users_project_observer_spec.rb +++ b/spec/observers/users_project_observer_spec.rb @@ -1,23 +1,27 @@ require 'spec_helper' describe UsersProjectObserver do - let(:users_project) { stub.as_null_object } + let(:user) { Factory.create :user } + let(:project) { Factory.create(:project, + code: "Fuu", + path: "Fuu" ) } + let(:users_project) { Factory.create(:users_project, + project: project, + user: user )} subject { UsersProjectObserver.instance } - describe "#after_create" do + describe "#after_commit" do it "should called when UsersProject created" do - subject.should_receive(:after_create) - + subject.should_receive(:after_commit).once UsersProject.observers.enable :users_project_observer do create(:users_project) end end it "should send email to user" do + Notify.should_receive(:project_access_granted_email).with(users_project.id).and_return(double(deliver: true)) + subject.after_commit(users_project) Event.stub(:create => true) - Notify.should_receive(:project_access_granted_email).and_return(stub(deliver: true)) - - subject.after_create(users_project) end it "should create new event" do @@ -33,17 +37,21 @@ describe UsersProjectObserver do describe "#after_update" do it "should called when UsersProject updated" do - subject.should_receive(:after_update) - + subject.should_receive(:after_commit).once UsersProject.observers.enable :users_project_observer do - create(:users_project).update_attribute(:project_access, 40) + create(:users_project).update_attribute(:project_access, UsersProject::MASTER) end end it "should send email to user" do Notify.should_receive(:project_access_granted_email).with(users_project.id).and_return(double(deliver: true)) - - subject.after_update(users_project) + subject.after_commit(users_project) + end + it "should not called after UsersProject destroyed" do + subject.should_not_receive(:after_commit) + UsersProject.observers.enable :users_project_observer do + users_project.destroy + end end end |