Commit b6d0dd871c7c8caa4809e1e8b60f6e4bb66f38c2

Authored by Dmitriy Zaporozhets
2 parents efd1b69f 669ada92

Merge pull request #4618 from jacargentina/notification-on-commits

Fix notifications to handle participants and mentions on commits too
app/services/notification_service.rb
... ... @@ -106,15 +106,15 @@ class NotificationService
106 106  
107 107 if note.commit_id.present?
108 108 opts.merge!(commit_id: note.commit_id)
109   - recipients = [note.commit_author]
110 109 else
111 110 opts.merge!(noteable_id: note.noteable_id)
112   - target = note.noteable
113   - if target.respond_to?(:participants)
114   - recipients = target.participants
115   - else
116   - recipients = []
117   - end
  111 + end
  112 +
  113 + target = note.noteable
  114 + if target.respond_to?(:participants)
  115 + recipients = target.participants
  116 + else
  117 + recipients = note.mentioned_users
118 118 end
119 119  
120 120 # Get users who left comment in thread
... ...
spec/services/notification_service_spec.rb
... ... @@ -48,7 +48,7 @@ describe NotificationService do
48 48 end
49 49  
50 50 context 'commit note' do
51   - let(:note) { create :note_on_commit }
  51 + let(:note) { create(:note_on_commit) }
52 52  
53 53 before do
54 54 build_team(note.project)
... ... @@ -56,32 +56,35 @@ describe NotificationService do
56 56  
57 57 describe :new_note do
58 58 it do
59   - should_email(@u_watcher.id)
60   - should_not_email(note.author_id)
61   - should_not_email(@u_participating.id)
62   - should_not_email(@u_disabled.id)
  59 + should_email(@u_watcher.id, note)
  60 + should_not_email(@u_mentioned.id, note)
  61 + should_not_email(note.author_id, note)
  62 + should_not_email(@u_participating.id, note)
  63 + should_not_email(@u_disabled.id, note)
63 64 notification.new_note(note)
64 65 end
65 66  
66 67 it do
67   - create(:note_on_commit,
  68 + new_note = create(:note_on_commit,
68 69 author: @u_participating,
69 70 project_id: note.project_id,
70   - commit_id: note.commit_id)
71   -
72   - should_email(@u_watcher.id)
73   - should_email(@u_participating.id)
74   - should_not_email(note.author_id)
75   - should_not_email(@u_disabled.id)
76   - notification.new_note(note)
  71 + commit_id: note.commit_id,
  72 + note: '@mention referenced')
  73 +
  74 + should_email(@u_watcher.id, new_note)
  75 + should_email(@u_mentioned.id, new_note)
  76 + should_not_email(new_note.author_id, new_note)
  77 + should_not_email(@u_participating.id, new_note)
  78 + should_not_email(@u_disabled.id, new_note)
  79 + notification.new_note(new_note)
77 80 end
78 81  
79   - def should_email(user_id)
80   - Notify.should_receive(:note_commit_email).with(user_id, note.id)
  82 + def should_email(user_id, n)
  83 + Notify.should_receive(:note_commit_email).with(user_id, n.id)
81 84 end
82 85  
83   - def should_not_email(user_id)
84   - Notify.should_not_receive(:note_commit_email).with(user_id, note.id)
  86 + def should_not_email(user_id, n)
  87 + Notify.should_not_receive(:note_commit_email).with(user_id, n.id)
85 88 end
86 89 end
87 90 end
... ... @@ -236,7 +239,7 @@ describe NotificationService do
236 239 @u_watcher = create(:user, notification_level: Notification::N_WATCH)
237 240 @u_participating = create(:user, notification_level: Notification::N_PARTICIPATING)
238 241 @u_disabled = create(:user, notification_level: Notification::N_DISABLED)
239   - @u_mentioned = create(:user, username: 'mention', notification_level: Notification::N_WATCH)
  242 + @u_mentioned = create(:user, username: 'mention', notification_level: Notification::N_PARTICIPATING)
240 243  
241 244 project.team << [@u_watcher, :master]
242 245 project.team << [@u_participating, :master]
... ...