Commit 38ffb8220c8d8ae030b762f7b2d244eabe8cc0bf

Authored by Dmitriy Zaporozhets
1 parent 58a1ed6d

use NotificationService for handle notify logic when MR created

app/observers/merge_request_observer.rb
@@ -2,9 +2,7 @@ class MergeRequestObserver < ActiveRecord::Observer @@ -2,9 +2,7 @@ class MergeRequestObserver < ActiveRecord::Observer
2 cattr_accessor :current_user 2 cattr_accessor :current_user
3 3
4 def after_create(merge_request) 4 def after_create(merge_request)
5 - if merge_request.assignee && merge_request.assignee != current_user  
6 - Notify.delay.new_merge_request_email(merge_request.id)  
7 - end 5 + notification.new_merge_request(merge_request, current_user)
8 end 6 end
9 7
10 def after_close(merge_request, transition) 8 def after_close(merge_request, transition)
app/services/notification_service.rb
@@ -47,7 +47,7 @@ class NotificationService @@ -47,7 +47,7 @@ class NotificationService
47 end 47 end
48 end 48 end
49 49
50 - # When we reassign an issue we should send next emails: 50 + # When create an issue we should send next emails:
51 # 51 #
52 # * issue assignee if his notification level is not Disabled 52 # * issue assignee if his notification level is not Disabled
53 # 53 #
@@ -56,4 +56,14 @@ class NotificationService @@ -56,4 +56,14 @@ class NotificationService
56 Notify.delay.new_issue_email(issue.id) 56 Notify.delay.new_issue_email(issue.id)
57 end 57 end
58 end 58 end
  59 +
  60 + # When create a merge request we should send next emails:
  61 + #
  62 + # * mr assignee if his notification level is not Disabled
  63 + #
  64 + def new_merge_request(merge_request, current_user)
  65 + if merge_request.assignee && merge_request.assignee != current_user
  66 + Notify.delay.new_merge_request_email(merge_request.id)
  67 + end
  68 + end
59 end 69 end
spec/observers/merge_request_observer_spec.rb
@@ -10,7 +10,8 @@ describe MergeRequestObserver do @@ -10,7 +10,8 @@ describe MergeRequestObserver do
10 let(:closed_assigned_mr) { create(:closed_merge_request, assignee: assignee, author: author) } 10 let(:closed_assigned_mr) { create(:closed_merge_request, assignee: assignee, author: author) }
11 let(:closed_unassigned_mr) { create(:closed_merge_request, author: author) } 11 let(:closed_unassigned_mr) { create(:closed_merge_request, author: author) }
12 12
13 - before(:each) { subject.stub(:current_user).and_return(some_user) } 13 + before { subject.stub(:current_user).and_return(some_user) }
  14 + before { subject.stub(notification: mock('NotificationService').as_null_object) }
14 15
15 subject { MergeRequestObserver.instance } 16 subject { MergeRequestObserver.instance }
16 17
@@ -18,21 +19,11 @@ describe MergeRequestObserver do @@ -18,21 +19,11 @@ describe MergeRequestObserver do
18 19
19 it 'is called when a merge request is created' do 20 it 'is called when a merge request is created' do
20 subject.should_receive(:after_create) 21 subject.should_receive(:after_create)
21 -  
22 - MergeRequest.observers.enable :merge_request_observer do  
23 - create(:merge_request, project: create(:project))  
24 - end 22 + create(:merge_request, project: create(:project))
25 end 23 end
26 24
27 - it 'sends an email to the assignee' do  
28 - Notify.should_receive(:new_merge_request_email).with(mr_mock.id)  
29 - subject.after_create(mr_mock)  
30 - end  
31 -  
32 - it 'does not send an email to the assignee if assignee created the merge request' do  
33 - subject.stub(:current_user).and_return(assignee)  
34 - Notify.should_not_receive(:new_merge_request_email)  
35 - 25 + it 'trigger notification service' do
  26 + subject.should_receive(:notification)
36 subject.after_create(mr_mock) 27 subject.after_create(mr_mock)
37 end 28 end
38 end 29 end
spec/services/notification_service_spec.rb
@@ -44,4 +44,20 @@ describe NotificationService do @@ -44,4 +44,20 @@ describe NotificationService do
44 end 44 end
45 end 45 end
46 end 46 end
  47 +
  48 + describe 'Merge Requests' do
  49 + let(:merge_request) { create :merge_request, assignee: create(:user) }
  50 +
  51 + describe :new_merge_request do
  52 + it 'should send email to merge_request assignee' do
  53 + Notify.should_receive(:new_merge_request_email).with(merge_request.id)
  54 + notification.new_merge_request(merge_request, merge_request.author)
  55 + end
  56 +
  57 + it 'should not send email to merge_request assignee if he is current_user' do
  58 + Notify.should_not_receive(:new_merge_request_email).with(merge_request.id)
  59 + notification.new_merge_request(merge_request, merge_request.assignee)
  60 + end
  61 + end
  62 + end
47 end 63 end