let(:closed_unassigned_issue) { create(:closed_issue, author: author) }
- before(:each) { subject.stub(:current_user).and_return(some_user) }
+ before { subject.stub(:current_user).and_return(some_user) }
+ before { subject.stub(notification: mock('NotificationService').as_null_object) }
+
subject { IssueObserver.instance }
end
end
- it 'sends an email to the assignee' do
- Notify.should_receive(:new_issue_email).with(mock_issue.id)
-
- subject.after_create(mock_issue)
- end
-
- it 'does not send an email to the assignee if assignee created the issue' do
- subject.stub(:current_user).and_return(assignee)
- Notify.should_not_receive(:new_issue_email)
+ it 'trigger notification to send emails' do
+ subject.should_receive(:notification)
subject.after_create(mock_issue)
end
assigned_issue.close
end
- it 'notification is delivered if the issue being closed' do
- Notify.should_receive(:issue_status_changed_email).twice
+ it 'trigger notification to send emails' do
+ subject.should_receive(:notification)
assigned_issue.close
end
- it 'notification is delivered only to author if the issue being closed' do
- Notify.should_receive(:issue_status_changed_email).once
+ it 'creates a note' do
Note.should_receive(:create_status_change_note).with(unassigned_issue, some_user, 'closed')
-
unassigned_issue.close
end
end
closed_assigned_issue.reopen
end
- it 'notification is delivered if the issue being reopened' do
- Notify.should_receive(:issue_status_changed_email).twice
+ it 'trigger notification to send emails' do
+ subject.should_receive(:notification)
closed_assigned_issue.reopen
end
- it 'notification is delivered only to author if the issue being reopened' do
- Notify.should_receive(:issue_status_changed_email).once
+ it 'create a note' do
Note.should_receive(:create_status_change_note).with(closed_unassigned_issue, some_user, 'reopened')
closed_unassigned_issue.reopen
end
end
- context 'a reassigned email' do
- it 'is sent if the issue is being reassigned' do
+ context 'notification' do
+ it 'triggered if the issue is being reassigned' do
mock_issue.should_receive(:is_being_reassigned?).and_return(true)
- subject.should_receive(:send_reassigned_email).with(mock_issue)
+ subject.should_receive(:notification)
subject.after_update(mock_issue)
end
- it 'is not sent if the issue is not being reassigned' do
+ it 'is not triggered if the issue is not being reassigned' do
mock_issue.should_receive(:is_being_reassigned?).and_return(false)
- subject.should_not_receive(:send_reassigned_email)
+ subject.should_not_receive(:notification)
subject.after_update(mock_issue)
end
end
end
-
- describe '#send_reassigned_email' do
- let(:previous_assignee) { double(:user, id: 3) }
-
- before(:each) do
- mock_issue.stub(:assignee_id).and_return(assignee.id)
- mock_issue.stub(:assignee_id_was).and_return(previous_assignee.id)
- end
-
- def it_sends_a_reassigned_email_to(recipient)
- Notify.should_receive(:reassigned_issue_email).with(recipient, mock_issue.id, previous_assignee.id)
- end
-
- def it_does_not_send_a_reassigned_email_to(recipient)
- Notify.should_not_receive(:reassigned_issue_email).with(recipient, mock_issue.id, previous_assignee.id)
- end
-
- it 'sends a reassigned email to the previous and current assignees' do
- it_sends_a_reassigned_email_to assignee.id
- it_sends_a_reassigned_email_to previous_assignee.id
-
- subject.send(:send_reassigned_email, mock_issue)
- end
-
- context 'does not send an email to the user who made the reassignment' do
- it 'if the user is the assignee' do
- subject.stub(:current_user).and_return(assignee)
- it_sends_a_reassigned_email_to previous_assignee.id
- it_does_not_send_a_reassigned_email_to assignee.id
-
- subject.send(:send_reassigned_email, mock_issue)
- end
- it 'if the user is the previous assignee' do
- subject.stub(:current_user).and_return(previous_assignee)
- it_sends_a_reassigned_email_to assignee.id
- it_does_not_send_a_reassigned_email_to previous_assignee.id
-
- subject.send(:send_reassigned_email, mock_issue)
- end
- end
- end
end