diff options
| author | Robb Kidd <robb@thekidds.org> | 2012-05-17 17:23:34 -0400 |
|---|---|---|
| committer | Robb Kidd <robb@thekidds.org> | 2012-06-20 14:09:46 -0400 |
| commit | f6035552e5d83b36f69e1ac7fa4b40ee5f7ab4fb (patch) | |
| tree | 12843cc8a65160cfa41ce34dbfe1a38b7820585a /spec | |
| parent | 6507c1085e02d9e59020c38ceff3308374dd1df0 (diff) | |
| download | gitlab-ce-f6035552e5d83b36f69e1ac7fa4b40ee5f7ab4fb.tar.gz | |
New IssueObserver class and spec.
Handles emails for new issues and reassigned issues.
Need to add creating a Note on Issue close.
Diffstat (limited to 'spec')
| -rw-r--r-- | spec/models/issue_observer_spec.rb | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/spec/models/issue_observer_spec.rb b/spec/models/issue_observer_spec.rb new file mode 100644 index 00000000000..166e03ce916 --- /dev/null +++ b/spec/models/issue_observer_spec.rb @@ -0,0 +1,67 @@ +require 'spec_helper' + +describe IssueObserver do + let(:some_user) { Factory.new(:user, :id => 1) } + let(:assignee) { Factory.new(:user, :id => 2) } + let(:issue) { Factory.new(:issue, :id => 42, :assignee => assignee) } + + before(:each) { subject.stub(:current_user).and_return(some_user) } + + subject { IssueObserver.instance } + + context 'when an issue is created' do + + it 'sends an email to the assignee' do + Notify.should_receive(:new_issue_email).with(issue.id) + + subject.after_create(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) + + subject.after_create(issue) + end + end + + context 'when an issue is modified' do + it 'but not reassigned, does not send a reassigned email' do + issue.stub(:assignee_id_changed?).and_return(false) + Notify.should_not_receive(:reassigned_issue_email) + + subject.after_change(issue) + end + + context 'and is reassigned' do + let(:previous_assignee) { Factory.new(:user, :id => 3) } + + before(:each) do + issue.stub(:assignee_id_changed?).and_return(true) + issue.stub(:assignee_id_was).and_return(previous_assignee.id) + end + + it 'sends a reassigned email to the previous and current assignees' do + 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) + + subject.after_change(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) + Notify.should_not_receive(:reassigned_issue_email).with(assignee.id, issue.id, previous_assignee.id) + + subject.after_change(issue) + end + it 'if the user is the previous assignee' do + subject.stub(:current_user).and_return(previous_assignee) + Notify.should_not_receive(:reassigned_issue_email).with(previous_assignee.id, issue.id, previous_assignee.id) + + subject.after_change(issue) + end + end + end + end +end |
