Commit f49a2ac0df978eaf897a8c8b28a202ae9a01165f

Authored by Dmitriy Zaporozhets
1 parent 9e616459

Add close issue/mr methods to Notify. Refactored Notificationservice

app/mailers/emails/issues.rb
@@ -13,6 +13,14 @@ module Emails @@ -13,6 +13,14 @@ module Emails
13 mail(to: recipient(recipient_id), subject: subject("changed issue ##{@issue.id}", @issue.title)) 13 mail(to: recipient(recipient_id), subject: subject("changed issue ##{@issue.id}", @issue.title))
14 end 14 end
15 15
  16 + def close_issue_email(recipient_id, issue_id, updated_by_user_id)
  17 + @issue = Issue.find issue_id
  18 + @project = @issue.project
  19 + @updated_by = User.find updated_by_user_id
  20 + mail(to: recipient(recipient_id),
  21 + subject: subject("Closed issue ##{@issue.id}", @issue.title))
  22 + end
  23 +
16 def issue_status_changed_email(recipient_id, issue_id, status, updated_by_user_id) 24 def issue_status_changed_email(recipient_id, issue_id, status, updated_by_user_id)
17 @issue = Issue.find issue_id 25 @issue = Issue.find issue_id
18 @issue_status = status 26 @issue_status = status
app/mailers/emails/merge_requests.rb
@@ -12,5 +12,18 @@ module Emails @@ -12,5 +12,18 @@ module Emails
12 @project = @merge_request.project 12 @project = @merge_request.project
13 mail(to: recipient(recipient_id), subject: subject("changed merge request !#{@merge_request.id}", @merge_request.title)) 13 mail(to: recipient(recipient_id), subject: subject("changed merge request !#{@merge_request.id}", @merge_request.title))
14 end 14 end
  15 +
  16 + def closed_merge_request_email(recipient_id, merge_request_id, updated_by_user_id)
  17 + @merge_request = MergeRequest.find(merge_request_id)
  18 + @project = @merge_request.project
  19 + @updated_by = User.find updated_by_user_id
  20 + mail(to: recipient(recipient_id), subject: subject("Closed merge request !#{@merge_request.id}", @merge_request.title))
  21 + end
  22 +
  23 + def merged_merge_request_email(recipient_id, merge_request_id)
  24 + @merge_request = MergeRequest.find(merge_request_id)
  25 + @project = @merge_request.project
  26 + mail(to: recipient(recipient_id), subject: subject("Accepted merge request !#{@merge_request.id}", @merge_request.title))
  27 + end
15 end 28 end
16 end 29 end
app/observers/merge_request_observer.rb
@@ -12,7 +12,7 @@ class MergeRequestObserver < BaseObserver @@ -12,7 +12,7 @@ class MergeRequestObserver < BaseObserver
12 end 12 end
13 13
14 def after_merge(merge_request, transition) 14 def after_merge(merge_request, transition)
15 - notification.merge_mr(merge_request, current_user) 15 + notification.merge_mr(merge_request)
16 end 16 end
17 17
18 def after_reopen(merge_request, transition) 18 def after_reopen(merge_request, transition)
app/services/notification_service.rb
@@ -23,12 +23,7 @@ class NotificationService @@ -23,12 +23,7 @@ class NotificationService
23 # * project team members with notification level higher then Participating 23 # * project team members with notification level higher then Participating
24 # 24 #
25 def new_issue(issue, current_user) 25 def new_issue(issue, current_user)
26 - recipients = reject_muted_users([issue.assignee])  
27 - recipients = recipients.concat(project_watchers(issue.project)).uniq  
28 -  
29 - recipients.each do |recipient|  
30 - Notify.delay.new_issue_email(recipient.id, issue.id)  
31 - end 26 + new_resource_email(issue, 'new_issue_email')
32 end 27 end
33 28
34 # When we close an issue we should send next emails: 29 # When we close an issue we should send next emails:
@@ -38,17 +33,7 @@ class NotificationService @@ -38,17 +33,7 @@ class NotificationService
38 # * project team members with notification level higher then Participating 33 # * project team members with notification level higher then Participating
39 # 34 #
40 def close_issue(issue, current_user) 35 def close_issue(issue, current_user)
41 - recipients = reject_muted_users([issue.author, issue.assignee])  
42 -  
43 - # Add watchers to email list  
44 - recipients = recipients.concat(project_watchers(issue.project)).uniq  
45 -  
46 - # Dont send email to me when I close an issue  
47 - recipients.delete(current_user)  
48 -  
49 - recipients.each do |recipient|  
50 - Notify.delay.issue_status_changed_email(recipient.id, issue.id, issue.state, current_user.id)  
51 - end 36 + close_resource_email(issue, current_user, 'close_issue_email')
52 end 37 end
53 38
54 # When we reassign an issue we should send next emails: 39 # When we reassign an issue we should send next emails:
@@ -57,7 +42,7 @@ class NotificationService @@ -57,7 +42,7 @@ class NotificationService
57 # * issue new assignee if his notification level is not Disabled 42 # * issue new assignee if his notification level is not Disabled
58 # 43 #
59 def reassigned_issue(issue, current_user) 44 def reassigned_issue(issue, current_user)
60 - reassign_email(issue, current_user, 'reassigned_issue_email') 45 + reassign_resource_email(issue, current_user, 'reassigned_issue_email')
61 end 46 end
62 47
63 48
@@ -66,12 +51,7 @@ class NotificationService @@ -66,12 +51,7 @@ class NotificationService
66 # * mr assignee if his notification level is not Disabled 51 # * mr assignee if his notification level is not Disabled
67 # 52 #
68 def new_merge_request(merge_request, current_user) 53 def new_merge_request(merge_request, current_user)
69 - recipients = reject_muted_users([merge_request.assignee])  
70 - recipients = recipients.concat(project_watchers(merge_request.project)).uniq  
71 -  
72 - recipients.each do |recipient|  
73 - Notify.delay.new_merge_request_email(recipient.id, merge_request.id)  
74 - end 54 + new_resource_email(merge_request, 'new_merge_request_email')
75 end 55 end
76 56
77 # When we reassign a merge_request we should send next emails: 57 # When we reassign a merge_request we should send next emails:
@@ -80,7 +60,7 @@ class NotificationService @@ -80,7 +60,7 @@ class NotificationService
80 # * merge_request assignee if his notification level is not Disabled 60 # * merge_request assignee if his notification level is not Disabled
81 # 61 #
82 def reassigned_merge_request(merge_request, current_user) 62 def reassigned_merge_request(merge_request, current_user)
83 - reassign_email(merge_request, current_user, 'reassigned_merge_request_email') 63 + reassign_resource_email(merge_request, current_user, 'reassigned_merge_request_email')
84 end 64 end
85 65
86 # When we close a merge request we should send next emails: 66 # When we close a merge request we should send next emails:
@@ -89,13 +69,8 @@ class NotificationService @@ -89,13 +69,8 @@ class NotificationService
89 # * merge_request assignee if his notification level is not Disabled 69 # * merge_request assignee if his notification level is not Disabled
90 # * project team members with notification level higher then Participating 70 # * project team members with notification level higher then Participating
91 # 71 #
92 - def close_mr(merge_request)  
93 - recipients = reject_muted_users([merge_request.author, merge_request.assignee])  
94 - recipients = recipients.concat(project_watchers(merge_request.project)).uniq  
95 -  
96 - recipients.each do |recipient|  
97 - Notify.delay.closed_merge_request_email(recipient.id, merge_request.id)  
98 - end 72 + def close_mr(merge_request, current_user)
  73 + close_resource_email(merge_request, current_user, 'closed_merge_request_email')
99 end 74 end
100 75
101 # When we merge a merge request we should send next emails: 76 # When we merge a merge request we should send next emails:
@@ -166,7 +141,27 @@ class NotificationService @@ -166,7 +141,27 @@ class NotificationService
166 end 141 end
167 end 142 end
168 143
169 - def reassign_email(target, current_user, method) 144 + def new_resource_email(target, method)
  145 + recipients = reject_muted_users([target.assignee])
  146 + recipients = recipients.concat(project_watchers(target.project)).uniq
  147 + recipients.delete(target.author)
  148 +
  149 + recipients.each do |recipient|
  150 + Notify.delay.send(method, recipient.id, target.id)
  151 + end
  152 + end
  153 +
  154 + def close_resource_email(target, current_user, method)
  155 + recipients = reject_muted_users([target.author, target.assignee])
  156 + recipients = recipients.concat(project_watchers(target.project)).uniq
  157 + recipients.delete(current_user)
  158 +
  159 + recipients.each do |recipient|
  160 + Notify.delay.send(method, recipient.id, target.id, current_user.id)
  161 + end
  162 + end
  163 +
  164 + def reassign_resource_email(target, current_user, method)
170 recipients = User.where(id: [target.assignee_id, target.assignee_id_was]) 165 recipients = User.where(id: [target.assignee_id, target.assignee_id_was])
171 166
172 # Add watchers to email list 167 # Add watchers to email list
app/views/notify/closed_issue_email.html.haml 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +%p
  2 + = "Issue was closed by #{@updated_by.name}"
  3 +%p
  4 + = "Issue ##{@issue.id}"
  5 + = link_to_gfm truncate(@issue.title, length: 45), project_issue_url(@issue.project, @issue), title: @issue.title
app/views/notify/closed_merge_request_email.html.haml
1 %p 1 %p
2 - = "Merge Request #{@merge_request.id} was closed" 2 + = "Merge Request #{@merge_request.id} was closed by #{@updated_by.name}"
3 %p 3 %p
4 = link_to_gfm truncate(@merge_request.title, length: 40), project_merge_request_url(@merge_request.project, @merge_request) 4 = link_to_gfm truncate(@merge_request.title, length: 40), project_merge_request_url(@merge_request.project, @merge_request)
5 %p 5 %p
spec/services/notification_service_spec.rb
@@ -65,11 +65,11 @@ describe NotificationService do @@ -65,11 +65,11 @@ describe NotificationService do
65 end 65 end
66 66
67 def should_email(user_id) 67 def should_email(user_id)
68 - Notify.should_receive(:issue_status_changed_email).with(user_id, issue.id, issue.assignee_id) 68 + Notify.should_receive(:closed_issue_email).with(user_id, issue.id, issue.assignee_id)
69 end 69 end
70 70
71 def should_not_email(user_id) 71 def should_not_email(user_id)
72 - Notify.should_not_receive(:issue_status_changed_email).with(user_id, issue.id, issue.assignee_id) 72 + Notify.should_not_receive(:closed_issue_email).with(user_id, issue.id, issue.assignee_id)
73 end 73 end
74 end 74 end
75 end 75 end
@@ -123,7 +123,7 @@ describe NotificationService do @@ -123,7 +123,7 @@ describe NotificationService do
123 should_email(@u_watcher.id) 123 should_email(@u_watcher.id)
124 should_not_email(@u_participating.id) 124 should_not_email(@u_participating.id)
125 should_not_email(@u_disabled.id) 125 should_not_email(@u_disabled.id)
126 - notification.close_mr(merge_request) 126 + notification.close_mr(merge_request, @u_disabled)
127 end 127 end
128 128
129 def should_email(user_id) 129 def should_email(user_id)