Skip to content
Snippets Groups Projects
Commit 2cb0a62f authored by Alex Denisov's avatar Alex Denisov
Browse files

Notification sends to issue author and assignee if issue being reopened or closed

parent 4d655321
No related branches found
No related tags found
1 merge request!1326Issue status changed notifications
Loading
Loading
@@ -9,8 +9,20 @@ class IssueObserver < ActiveRecord::Observer
 
def after_update(issue)
send_reassigned_email(issue) if issue.is_being_reassigned?
Note.create_status_change_note(issue, current_user, 'closed') if issue.is_being_closed?
Note.create_status_change_note(issue, current_user, 'reopened') if issue.is_being_reopened?
if issue.is_being_closed?
Note.create_status_change_note(issue, current_user, 'closed')
[issue.author, issue.assignee].compact.each do |recipient|
Notify.issue_status_changed_email(recipient.id, issue.id, 'closed', current_user)
end
end
if issue.is_being_reopened?
Note.create_status_change_note(issue, current_user, 'reopened')
[issue.author, issue.assignee].compact.each do |recipient|
Notify.issue_status_changed_email(recipient.id, issue.id, 'reopened', current_user)
end
end
end
 
protected
Loading
Loading
Loading
Loading
@@ -3,7 +3,8 @@ require 'spec_helper'
describe IssueObserver do
let(:some_user) { double(:user, id: 1) }
let(:assignee) { double(:user, id: 2) }
let(:issue) { double(:issue, id: 42, assignee: assignee) }
let(:author) { double(:user, id: 3) }
let(:issue) { double(:issue, id: 42, assignee: assignee, author: author) }
 
before(:each) { subject.stub(:current_user).and_return(some_user) }
 
Loading
Loading
@@ -67,36 +68,90 @@ describe IssueObserver do
end
end
 
context 'a status "closed" note' do
it 'is created if the issue is being closed' do
context 'a status "closed"' do
it 'note is created if the issue is being closed' do
issue.should_receive(:is_being_closed?).and_return(true)
Note.should_receive(:create_status_change_note).with(issue, some_user, 'closed')
 
subject.after_update(issue)
end
 
it 'is not created if the issue is not being closed' do
it 'note is not created if the issue is not being closed' do
issue.should_receive(:is_being_closed?).and_return(false)
Note.should_not_receive(:create_status_change_note).with(issue, some_user, 'closed')
 
subject.after_update(issue)
end
it 'notification is delivered if the issue being closed' do
issue.stub(:is_being_closed?).and_return(true)
Notify.should_receive(:issue_status_changed_email).twice
Note.should_receive(:create_status_change_note).with(issue, some_user, 'closed')
subject.after_update(issue)
end
it 'notification is not delivered if the issue not being closed' do
issue.stub(:is_being_closed?).and_return(false)
Notify.should_not_receive(:issue_status_changed_email)
Note.should_not_receive(:create_status_change_note).with(issue, some_user, 'closed')
subject.after_update(issue)
end
it 'notification is delivered only to author if the issue being closed' do
issue_without_assignee = double(:issue, id: 42, author: author, assignee: nil)
issue_without_assignee.stub(:is_being_reassigned?).and_return(false)
issue_without_assignee.stub(:is_being_closed?).and_return(true)
issue_without_assignee.stub(:is_being_reopened?).and_return(false)
Notify.should_receive(:issue_status_changed_email).once
Note.should_receive(:create_status_change_note).with(issue_without_assignee, some_user, 'closed')
subject.after_update(issue_without_assignee)
end
end
 
context 'a status "reopened" note' do
it 'is created if the issue is being reopened' do
context 'a status "reopened"' do
it 'note is created if the issue is being reopened' do
issue.should_receive(:is_being_reopened?).and_return(true)
Note.should_receive(:create_status_change_note).with(issue, some_user, 'reopened')
 
subject.after_update(issue)
end
 
it 'is not created if the issue is not being reopened' do
it 'note is not created if the issue is not being reopened' do
issue.should_receive(:is_being_reopened?).and_return(false)
Note.should_not_receive(:create_status_change_note).with(issue, some_user, 'reopened')
 
subject.after_update(issue)
end
it 'notification is delivered if the issue being reopened' do
issue.stub(:is_being_reopened?).and_return(true)
Notify.should_receive(:issue_status_changed_email).twice
Note.should_receive(:create_status_change_note).with(issue, some_user, 'reopened')
subject.after_update(issue)
end
it 'notification is not delivered if the issue not being reopened' do
issue.stub(:is_being_reopened?).and_return(false)
Notify.should_not_receive(:issue_status_changed_email)
Note.should_not_receive(:create_status_change_note).with(issue, some_user, 'reopened')
subject.after_update(issue)
end
it 'notification is delivered only to author if the issue being reopened' do
issue_without_assignee = double(:issue, id: 42, author: author, assignee: nil)
issue_without_assignee.stub(:is_being_reassigned?).and_return(false)
issue_without_assignee.stub(:is_being_closed?).and_return(false)
issue_without_assignee.stub(:is_being_reopened?).and_return(true)
Notify.should_receive(:issue_status_changed_email).once
Note.should_receive(:create_status_change_note).with(issue_without_assignee, some_user, 'reopened')
subject.after_update(issue_without_assignee)
end
end
end
 
Loading
Loading
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