Commit 00ec81ea authored by Robb Kidd's avatar Robb Kidd

Update IssueObserver to send reassigned emails when an issue is reassigned.

parent 2416e3cb
...@@ -6,12 +6,15 @@ class IssueObserver < ActiveRecord::Observer ...@@ -6,12 +6,15 @@ class IssueObserver < ActiveRecord::Observer
end end
def after_change(issue) def after_change(issue)
if issue.assignee_id_changed? send_reassigned_email(issue) if issue.is_being_reassigned?
recipient_ids = [issue.assignee_id, issue.assignee_id_was].keep_if {|id| id != current_user.id } end
def send_reassigned_email(issue)
recipient_ids = [issue.assignee_id, issue.assignee_id_was].keep_if {|id| id != current_user.id }
recipient_ids.each do |recipient_id| recipient_ids.each do |recipient_id|
Notify.reassigned_issue_email(recipient_id, issue.id, issue.assignee_id_was) Notify.reassigned_issue_email(recipient_id, issue.id, issue.assignee_id_was)
end
end end
end end
end end
require 'spec_helper' require 'spec_helper'
describe IssueObserver do describe IssueObserver do
let(:some_user) { Factory.new(:user, :id => 1) } let(:some_user) { double(:user, :id => 1) }
let(:assignee) { Factory.new(:user, :id => 2) } let(:assignee) { double(:user, :id => 2) }
let(:issue) { Factory.new(:issue, :id => 42, :assignee => assignee) } let(:issue) { double(:issue, :id => 42, :assignee => assignee) }
before(:each) { subject.stub(:current_user).and_return(some_user) } before(:each) { subject.stub(:current_user).and_return(some_user) }
...@@ -25,42 +25,49 @@ describe IssueObserver do ...@@ -25,42 +25,49 @@ describe IssueObserver do
end end
end end
context 'when an issue is modified' do context 'when an issue is changed' do
it 'but not reassigned, does not send a reassigned email' do it 'sends a reassigned email, if the issue is being reassigned' do
issue.stub(:assignee_id_changed?).and_return(false) issue.should_receive(:is_being_reassigned?).and_return(true)
Notify.should_not_receive(:reassigned_issue_email) subject.should_receive(:send_reassigned_email).with(issue)
subject.after_change(issue) subject.after_change(issue)
end end
context 'and is reassigned' do it 'does not send a reassigned email, if the issue was not reassigned' do
let(:previous_assignee) { Factory.new(:user, :id => 3) } issue.should_receive(:is_being_reassigned?).and_return(false)
subject.should_not_receive(:send_reassigned_email)
before(:each) do subject.after_change(issue)
issue.stub(:assignee_id_changed?).and_return(true) end
issue.stub(:assignee_id_was).and_return(previous_assignee.id) end
end
it 'sends a reassigned email to the previous and current assignees' do describe '#send_reassigned_email' do
Notify.should_receive(:reassigned_issue_email).with(assignee.id, issue.id, previous_assignee.id) let(:previous_assignee) { double(:user, :id => 3) }
Notify.should_receive(:reassigned_issue_email).with(previous_assignee.id, issue.id, previous_assignee.id)
subject.after_change(issue) before(:each) do
end issue.stub(:assignee_id).and_return(assignee.id)
issue.stub(:assignee_id_was).and_return(previous_assignee.id)
end
it 'sends a reassigned email to the previous and current assignees' do
Notify.should_receive(:reassigned_issue_email).with(assignee.id, issue.id, previous_assignee.id)
Notify.should_receive(:reassigned_issue_email).with(previous_assignee.id, issue.id, previous_assignee.id)
context 'does not send an email to the user who made the reassignment' do subject.send_reassigned_email(issue)
it 'if the user is the assignee' do end
subject.stub(:current_user).and_return(assignee)
Notify.should_not_receive(:reassigned_issue_email).with(assignee.id, issue.id, previous_assignee.id)
subject.after_change(issue) context 'does not send an email to the user who made the reassignment' do
end it 'if the user is the assignee' do
it 'if the user is the previous assignee' do subject.stub(:current_user).and_return(assignee)
subject.stub(:current_user).and_return(previous_assignee) Notify.should_not_receive(:reassigned_issue_email).with(assignee.id, issue.id, previous_assignee.id)
Notify.should_not_receive(:reassigned_issue_email).with(previous_assignee.id, issue.id, previous_assignee.id)
subject.send_reassigned_email(issue)
end
it 'if the user is the previous assignee' do
subject.stub(:current_user).and_return(previous_assignee)
Notify.should_not_receive(:reassigned_issue_email).with(previous_assignee.id, issue.id, previous_assignee.id)
subject.after_change(issue) subject.send_reassigned_email(issue)
end
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment