From c7bd99b04053421726012d77f85919b1d6fc0387 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 26 Mar 2013 14:41:57 +0200 Subject: [PATCH] refactor issue observer spec --- spec/observers/issue_observer_spec.rb | 81 ++++++------------------------ spec/services/notification_service_spec.rb | 1 - 2 files changed, 16 insertions(+), 66 deletions(-) diff --git a/spec/observers/issue_observer_spec.rb b/spec/observers/issue_observer_spec.rb index e4e66917e..539c65507 100644 --- a/spec/observers/issue_observer_spec.rb +++ b/spec/observers/issue_observer_spec.rb @@ -11,7 +11,9 @@ describe IssueObserver do 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 } @@ -25,15 +27,8 @@ describe IssueObserver do 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 @@ -47,16 +42,14 @@ describe IssueObserver do 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 @@ -68,14 +61,13 @@ describe IssueObserver do 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 @@ -98,61 +90,20 @@ describe IssueObserver do 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 diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb index eea2a2df7..a802d50f1 100644 --- a/spec/services/notification_service_spec.rb +++ b/spec/services/notification_service_spec.rb @@ -44,4 +44,3 @@ describe NotificationService do end end end - -- 2.11.0