Commit 16e67fd8be71cfda57ca19250781a9e0f800d619

Authored by Dmitriy Zaporozhets
2 parents 9270b6c3 965b6701

Merge pull request #1364 from AlexDenisov/fix_project_access_notification

Project access notifications fixed
Gemfile
... ... @@ -138,6 +138,7 @@ group :test do
138 138 gem 'email_spec'
139 139 gem 'resque_spec'
140 140 gem "webmock"
  141 + gem 'test_after_commit'
141 142 end
142 143  
143 144 group :production do
... ...
Gemfile.lock
... ... @@ -377,6 +377,7 @@ GEM
377 377 tilt (~> 1.1, != 1.3.0)
378 378 sqlite3 (1.3.6)
379 379 stamp (0.1.6)
  380 + test_after_commit (0.0.1)
380 381 therubyracer (0.10.1)
381 382 libv8 (~> 3.3.10)
382 383 thin (1.3.1)
... ... @@ -476,6 +477,7 @@ DEPENDENCIES
476 477 spinach-rails
477 478 sqlite3
478 479 stamp
  480 + test_after_commit
479 481 therubyracer
480 482 thin
481 483 uglifier (= 1.0.3)
... ...
app/observers/users_project_observer.rb
1 1 class UsersProjectObserver < ActiveRecord::Observer
2   - def after_create(users_project)
  2 + def after_commit(users_project)
  3 + return if users_project.destroyed?
3 4 Notify.project_access_granted_email(users_project.id).deliver
  5 + end
4 6  
  7 + def after_create(users_project)
5 8 Event.create(
6 9 project_id: users_project.project.id,
7 10 action: Event::Joined,
... ... @@ -9,10 +12,6 @@ class UsersProjectObserver &lt; ActiveRecord::Observer
9 12 )
10 13 end
11 14  
12   - def after_update(users_project)
13   - Notify.project_access_granted_email(users_project.id).deliver
14   - end
15   -
16 15 def after_destroy(users_project)
17 16 Event.create(
18 17 project_id: users_project.project.id,
... ...
spec/observers/users_project_observer_spec.rb
1 1 require 'spec_helper'
2 2  
3 3 describe UsersProjectObserver do
4   - let(:users_project) { stub.as_null_object }
  4 + let(:user) { Factory.create :user }
  5 + let(:project) { Factory.create(:project,
  6 + code: "Fuu",
  7 + path: "Fuu" ) }
  8 + let(:users_project) { Factory.create(:users_project,
  9 + project: project,
  10 + user: user )}
5 11 subject { UsersProjectObserver.instance }
6 12  
7   - describe "#after_create" do
  13 + describe "#after_commit" do
8 14 it "should called when UsersProject created" do
9   - subject.should_receive(:after_create)
10   -
  15 + subject.should_receive(:after_commit).once
11 16 UsersProject.observers.enable :users_project_observer do
12 17 create(:users_project)
13 18 end
14 19 end
15 20  
16 21 it "should send email to user" do
  22 + Notify.should_receive(:project_access_granted_email).with(users_project.id).and_return(double(deliver: true))
  23 + subject.after_commit(users_project)
17 24 Event.stub(:create => true)
18   - Notify.should_receive(:project_access_granted_email).and_return(stub(deliver: true))
19   -
20   - subject.after_create(users_project)
21 25 end
22 26  
23 27 it "should create new event" do
... ... @@ -33,17 +37,21 @@ describe UsersProjectObserver do
33 37  
34 38 describe "#after_update" do
35 39 it "should called when UsersProject updated" do
36   - subject.should_receive(:after_update)
37   -
  40 + subject.should_receive(:after_commit).once
38 41 UsersProject.observers.enable :users_project_observer do
39   - create(:users_project).update_attribute(:project_access, 40)
  42 + create(:users_project).update_attribute(:project_access, UsersProject::MASTER)
40 43 end
41 44 end
42 45  
43 46 it "should send email to user" do
44 47 Notify.should_receive(:project_access_granted_email).with(users_project.id).and_return(double(deliver: true))
45   -
46   - subject.after_update(users_project)
  48 + subject.after_commit(users_project)
  49 + end
  50 + it "should not called after UsersProject destroyed" do
  51 + subject.should_not_receive(:after_commit)
  52 + UsersProject.observers.enable :users_project_observer do
  53 + users_project.destroy
  54 + end
47 55 end
48 56 end
49 57  
... ...