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?
end
def send_reassigned_email(issue)
recipient_ids = [issue.assignee_id, issue.assignee_id_was].keep_if {|id| id != current_user.id } 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,19 +25,27 @@ describe IssueObserver do ...@@ -25,19 +25,27 @@ 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)
subject.after_change(issue)
end
end
describe '#send_reassigned_email' do
let(:previous_assignee) { double(:user, :id => 3) }
before(:each) do before(:each) do
issue.stub(:assignee_id_changed?).and_return(true) issue.stub(:assignee_id).and_return(assignee.id)
issue.stub(:assignee_id_was).and_return(previous_assignee.id) issue.stub(:assignee_id_was).and_return(previous_assignee.id)
end end
...@@ -45,7 +53,7 @@ describe IssueObserver do ...@@ -45,7 +53,7 @@ describe IssueObserver do
Notify.should_receive(:reassigned_issue_email).with(assignee.id, issue.id, previous_assignee.id) 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) Notify.should_receive(:reassigned_issue_email).with(previous_assignee.id, issue.id, previous_assignee.id)
subject.after_change(issue) subject.send_reassigned_email(issue)
end end
context 'does not send an email to the user who made the reassignment' do context 'does not send an email to the user who made the reassignment' do
...@@ -53,14 +61,13 @@ describe IssueObserver do ...@@ -53,14 +61,13 @@ describe IssueObserver do
subject.stub(:current_user).and_return(assignee) subject.stub(:current_user).and_return(assignee)
Notify.should_not_receive(:reassigned_issue_email).with(assignee.id, issue.id, previous_assignee.id) Notify.should_not_receive(:reassigned_issue_email).with(assignee.id, issue.id, previous_assignee.id)
subject.after_change(issue) subject.send_reassigned_email(issue)
end end
it 'if the user is the previous assignee' do it 'if the user is the previous assignee' do
subject.stub(:current_user).and_return(previous_assignee) subject.stub(:current_user).and_return(previous_assignee)
Notify.should_not_receive(:reassigned_issue_email).with(previous_assignee.id, issue.id, previous_assignee.id) 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