Skip to content
Snippets Groups Projects
Commit 356430c3 authored by Robb Kidd's avatar Robb Kidd
Browse files

Add method for an issue to know whether it is being closed

Update IssueObserver to create a Note on the issue its being closed.
parent 02924de3
No related branches found
No related tags found
1 merge request!953Separate user and issue observation from mail observer
Loading
Loading
@@ -64,6 +64,10 @@ class Issue < ActiveRecord::Base
def is_being_reassigned?
assignee_id_changed?
end
def is_being_closed?
closed_changed? && closed
end
end
# == Schema Information
#
Loading
Loading
Loading
Loading
@@ -7,6 +7,7 @@ class IssueObserver < ActiveRecord::Observer
 
def after_change(issue)
send_reassigned_email(issue) if issue.is_being_reassigned?
Note.create_status_change_note(issue, current_user, 'closed') if issue.is_being_closed?
end
 
def send_reassigned_email(issue)
Loading
Loading
@@ -16,5 +17,4 @@ class IssueObserver < ActiveRecord::Observer
Notify.reassigned_issue_email(recipient_id, issue.id, issue.assignee_id_was)
end
end
end
Loading
Loading
@@ -26,18 +26,41 @@ describe IssueObserver do
end
 
context 'when an issue is changed' do
it 'sends a reassigned email, if the issue is being reassigned' do
issue.should_receive(:is_being_reassigned?).and_return(true)
subject.should_receive(:send_reassigned_email).with(issue)
before(:each) do
issue.stub(:is_being_reassigned?).and_return(false)
issue.stub(:is_being_closed?).and_return(false)
end
context 'a reassigned email' do
it 'is sent if the issue is being reassigned' do
issue.should_receive(:is_being_reassigned?).and_return(true)
subject.should_receive(:send_reassigned_email).with(issue)
subject.after_change(issue)
end
it 'is not sent if the issue is not being reassigned' do
issue.should_receive(:is_being_reassigned?).and_return(false)
subject.should_not_receive(:send_reassigned_email)
 
subject.after_change(issue)
subject.after_change(issue)
end
end
 
it 'does not send a reassigned email, if the issue was not reassigned' do
issue.should_receive(:is_being_reassigned?).and_return(false)
subject.should_not_receive(:send_reassigned_email)
context 'a status "closed" note' do
it '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_change(issue)
end
 
subject.after_change(issue)
it '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_change(issue)
end
end
end
 
Loading
Loading
Loading
Loading
@@ -36,6 +36,25 @@ describe Issue do
end
end
 
describe '#is_being_closed?' do
it 'returns true if the closed attribute has changed and is now true' do
subject.closed = true
subject.is_being_closed?.should be_true
end
it 'returns false if the closed attribute has changed and is now false' do
issue = Factory.create(:issue,
:closed => true,
:author => Factory(:user),
:assignee => Factory(:user),
:project => Factory.create(:project))
issue.closed = false
issue.is_being_closed?.should be_false
end
it 'returns false if the closed attribute has not changed' do
subject.is_being_closed?.should be_false
end
end
describe "plus 1" do
let(:project) { Factory(:project) }
subject {
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