Skip to content
Snippets Groups Projects
Commit cf6d4dc1 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

NotificationService for resolving email notification logic

parent 448152ab
No related branches found
No related tags found
No related merge requests found
# NotificationService class
#
# Used for notifing users with emails about different events
#
# Ex.
# NotificationService.new.new_issue(issue, current_user)
#
class NotificationService
# Always notify user about ssh key added
# only if ssh key is not deploy key
def new_key(key)
if key.user
Notify.delay.new_ssh_key_email(key.id)
end
end
# TODO: When we close an issue we should send next emails:
#
# * issue author if his notification level is not Disabled
# * issue assignee if his notification level is not Disabled
# * project team members with notification level higher then Participating
#
def close_issue(issue, current_user)
[issue.author, issue.assignee].compact.uniq.each do |recipient|
Notify.delay.issue_status_changed_email(recipient.id, issue.id, issue.state, current_user.id)
end
end
# When we reassign an issue we should send next emails:
#
# * issue author if his notification level is not Disabled
# * issue assignee if his notification level is not Disabled
#
def reassigned_issue(issue, current_user)
recipient_ids = [issue.assignee_id, issue.assignee_id_was].keep_if {|id| id && id != current_user.id }
recipient_ids.each do |recipient_id|
Notify.delay.reassigned_issue_email(recipient_id, issue.id, issue.assignee_id_was)
end
end
# When we reassign an issue we should send next emails:
#
# * issue assignee if his notification level is not Disabled
#
def new_issue(issue, current_user)
if issue.assignee && issue.assignee != current_user
Notify.delay.new_issue_email(issue.id)
end
end
end
require 'spec_helper'
describe NotificationService do
# Disable observers to prevent factory trigger notification service
before { ActiveRecord::Base.observers.disable :all }
let(:notification) { NotificationService.new }
describe 'Keys' do
describe :new_key do
let(:key) { create(:personal_key) }
it { notification.new_key(key).should be_true }
it 'should sent email to key owner' do
Notify.should_receive(:new_ssh_key_email).with(key.id)
notification.new_key(key)
end
end
end
describe 'Issues' do
let(:issue) { create :issue, assignee: create(:user) }
describe :new_issue do
it 'should sent email to issue assignee' do
Notify.should_receive(:new_issue_email).with(issue.id)
notification.new_issue(issue, nil)
end
end
describe :reassigned_issue do
it 'should sent email to issue old assignee and new issue assignee' do
Notify.should_receive(:reassigned_issue_email).twice
notification.reassigned_issue(issue, issue.author)
end
end
describe :close_issue do
it 'should sent email to issue assignee and issue author' do
Notify.should_receive(:issue_status_changed_email).twice
notification.close_issue(issue, issue.author)
end
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment