1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
require 'spec_helper'
describe NoteObserver do
subject { NoteObserver.instance }
let(:team_without_author) { (1..2).map { |n| double :user, id: n } }
describe '#after_create' do
let(:note) { double :note }
it 'is called after a note is created' do
subject.should_receive :after_create
Note.observers.enable :note_observer do
create(:note)
end
end
it 'sends out notifications' do
subject.should_receive(:send_notify_mails).with(note)
subject.after_create(note)
end
end
describe "#send_notify_mails" do
let(:note) { double :note, notify: false, notify_author: false }
it 'notifies team of new note when flagged to notify' do
note.stub(:notify).and_return(true)
subject.should_receive(:notify_team).with(note)
subject.after_create(note)
end
it 'does not notify team of new note when not flagged to notify' do
subject.should_not_receive(:notify_team).with(note)
subject.after_create(note)
end
it 'notifies the author of a commit when flagged to notify the author' do
note.stub(:notify_author).and_return(true)
note.stub(:id).and_return(42)
author = double :user, id: 1
note.stub(:commit_author).and_return(author)
Notify.should_receive(:note_commit_email)
subject.after_create(note)
end
it 'does not notify the author of a commit when not flagged to notify the author' do
notify.should_not_receive(:note_commit_email)
subject.after_create(note)
end
it 'does nothing if no notify flags are set' do
subject.after_create(note).should be_nil
end
end
describe '#notify_team' do
let(:note) { double :note, id: 1 }
before :each do
subject.stub(:team_without_note_author).with(note).and_return(team_without_author)
end
context 'notifies team of a new note on' do
it 'a commit' do
note.stub(:noteable_type).and_return('Commit')
notify.should_receive(:note_commit_email).twice
subject.send(:notify_team, note)
end
it 'an issue' do
note.stub(:noteable_type).and_return('Issue')
notify.should_receive(:note_issue_email).twice
subject.send(:notify_team, note)
end
it 'a wiki page' do
note.stub(:noteable_type).and_return('Wiki')
notify.should_receive(:note_wiki_email).twice
subject.send(:notify_team, note)
end
it 'a merge request' do
note.stub(:noteable_type).and_return('MergeRequest')
notify.should_receive(:note_merge_request_email).twice
subject.send(:notify_team, note)
end
it 'a wall' do
# Note: wall posts have #noteable_type of nil
note.stub(:noteable_type).and_return(nil)
notify.should_receive(:note_wall_email).twice
subject.send(:notify_team, note)
end
end
it 'does nothing for a new note on a snippet' do
note.stub(:noteable_type).and_return('Snippet')
subject.send(:notify_team, note).should be_nil
end
end
describe '#team_without_note_author' do
let(:author) { double :user, id: 4 }
let(:users) { team_without_author + [author] }
let(:project) { double :project, users: users }
let(:note) { double :note, project: project, author: author }
it 'returns the projects user without the note author included' do
subject.send(:team_without_note_author, note).should == team_without_author
end
end
def notify
Notify
end
end
|