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 13 mail(to: recipient(recipient_id), subject: subject("changed issue ##{@issue.id}", @issue.title))
14 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 24 def issue_status_changed_email(recipient_id, issue_id, status, updated_by_user_id)
17 25 @issue = Issue.find issue_id
18 26 @issue_status = status
... ...
app/mailers/emails/merge_requests.rb
... ... @@ -12,5 +12,18 @@ module Emails
12 12 @project = @merge_request.project
13 13 mail(to: recipient(recipient_id), subject: subject("changed merge request !#{@merge_request.id}", @merge_request.title))
14 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 28 end
16 29 end
... ...
app/observers/merge_request_observer.rb
... ... @@ -12,7 +12,7 @@ class MergeRequestObserver < BaseObserver
12 12 end
13 13  
14 14 def after_merge(merge_request, transition)
15   - notification.merge_mr(merge_request, current_user)
  15 + notification.merge_mr(merge_request)
16 16 end
17 17  
18 18 def after_reopen(merge_request, transition)
... ...
app/services/notification_service.rb
... ... @@ -23,12 +23,7 @@ class NotificationService
23 23 # * project team members with notification level higher then Participating
24 24 #
25 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 27 end
33 28  
34 29 # When we close an issue we should send next emails:
... ... @@ -38,17 +33,7 @@ class NotificationService
38 33 # * project team members with notification level higher then Participating
39 34 #
40 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 37 end
53 38  
54 39 # When we reassign an issue we should send next emails:
... ... @@ -57,7 +42,7 @@ class NotificationService
57 42 # * issue new assignee if his notification level is not Disabled
58 43 #
59 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 46 end
62 47  
63 48  
... ... @@ -66,12 +51,7 @@ class NotificationService
66 51 # * mr assignee if his notification level is not Disabled
67 52 #
68 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 55 end
76 56  
77 57 # When we reassign a merge_request we should send next emails:
... ... @@ -80,7 +60,7 @@ class NotificationService
80 60 # * merge_request assignee if his notification level is not Disabled
81 61 #
82 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 64 end
85 65  
86 66 # When we close a merge request we should send next emails:
... ... @@ -89,13 +69,8 @@ class NotificationService
89 69 # * merge_request assignee if his notification level is not Disabled
90 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 74 end
100 75  
101 76 # When we merge a merge request we should send next emails:
... ... @@ -166,7 +141,27 @@ class NotificationService
166 141 end
167 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 165 recipients = User.where(id: [target.assignee_id, target.assignee_id_was])
171 166  
172 167 # Add watchers to email list
... ...
app/views/notify/closed_issue_email.html.haml 0 → 100644
... ... @@ -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 1 %p
2   - = "Merge Request #{@merge_request.id} was closed"
  2 + = "Merge Request #{@merge_request.id} was closed by #{@updated_by.name}"
3 3 %p
4 4 = link_to_gfm truncate(@merge_request.title, length: 40), project_merge_request_url(@merge_request.project, @merge_request)
5 5 %p
... ...
spec/services/notification_service_spec.rb
... ... @@ -65,11 +65,11 @@ describe NotificationService do
65 65 end
66 66  
67 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 69 end
70 70  
71 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 73 end
74 74 end
75 75 end
... ... @@ -123,7 +123,7 @@ describe NotificationService do
123 123 should_email(@u_watcher.id)
124 124 should_not_email(@u_participating.id)
125 125 should_not_email(@u_disabled.id)
126   - notification.close_mr(merge_request)
  126 + notification.close_mr(merge_request, @u_disabled)
127 127 end
128 128  
129 129 def should_email(user_id)
... ...