Commit 3728c4904e61e47d23b6454754451bd716f4f422
1 parent
ce0945ef
Exists in
master
and in
4 other branches
refactor observers test since email logic moved to service
Showing
7 changed files
with
19 additions
and
164 deletions
Show diff stats
app/observers/activity_observer.rb
app/observers/base_observer.rb
app/services/notification_service.rb
@@ -108,4 +108,12 @@ class NotificationService | @@ -108,4 +108,12 @@ class NotificationService | ||
108 | Notify.delay.note_commit_email(note.commit_author.id, note.id) | 108 | Notify.delay.note_commit_email(note.commit_author.id, note.id) |
109 | end | 109 | end |
110 | end | 110 | end |
111 | + | ||
112 | + def new_team_member(users_project) | ||
113 | + Notify.delay.project_access_granted_email(users_project.id) | ||
114 | + end | ||
115 | + | ||
116 | + def update_team_member(users_project) | ||
117 | + Notify.delay.project_access_granted_email(users_project.id) | ||
118 | + end | ||
111 | end | 119 | end |
spec/observers/merge_request_observer_spec.rb
@@ -43,22 +43,21 @@ describe MergeRequestObserver do | @@ -43,22 +43,21 @@ describe MergeRequestObserver do | ||
43 | end | 43 | end |
44 | end | 44 | end |
45 | 45 | ||
46 | - context 'a reassigned email' do | 46 | + context 'a notification' do |
47 | it 'is sent if the merge request is being reassigned' do | 47 | it 'is sent if the merge request is being reassigned' do |
48 | mr_mock.should_receive(:is_being_reassigned?).and_return(true) | 48 | mr_mock.should_receive(:is_being_reassigned?).and_return(true) |
49 | - subject.should_receive(:send_reassigned_email).with(mr_mock) | 49 | + subject.should_receive(:notification) |
50 | 50 | ||
51 | subject.after_update(mr_mock) | 51 | subject.after_update(mr_mock) |
52 | end | 52 | end |
53 | 53 | ||
54 | it 'is not sent if the merge request is not being reassigned' do | 54 | it 'is not sent if the merge request is not being reassigned' do |
55 | mr_mock.should_receive(:is_being_reassigned?).and_return(false) | 55 | mr_mock.should_receive(:is_being_reassigned?).and_return(false) |
56 | - subject.should_not_receive(:send_reassigned_email) | 56 | + subject.should_not_receive(:notification) |
57 | 57 | ||
58 | subject.after_update(mr_mock) | 58 | subject.after_update(mr_mock) |
59 | end | 59 | end |
60 | end | 60 | end |
61 | - | ||
62 | end | 61 | end |
63 | 62 | ||
64 | context '#after_close' do | 63 | context '#after_close' do |
@@ -92,45 +91,4 @@ describe MergeRequestObserver do | @@ -92,45 +91,4 @@ describe MergeRequestObserver do | ||
92 | end | 91 | end |
93 | end | 92 | end |
94 | end | 93 | end |
95 | - | ||
96 | - describe '#send_reassigned_email' do | ||
97 | - let(:previous_assignee) { double(:user, id: 3) } | ||
98 | - | ||
99 | - before(:each) do | ||
100 | - mr_mock.stub(:assignee_id).and_return(assignee.id) | ||
101 | - mr_mock.stub(:assignee_id_was).and_return(previous_assignee.id) | ||
102 | - end | ||
103 | - | ||
104 | - def it_sends_a_reassigned_email_to(recipient) | ||
105 | - Notify.should_receive(:reassigned_merge_request_email).with(recipient, mr_mock.id, previous_assignee.id) | ||
106 | - end | ||
107 | - | ||
108 | - def it_does_not_send_a_reassigned_email_to(recipient) | ||
109 | - Notify.should_not_receive(:reassigned_merge_request_email).with(recipient, mr_mock.id, previous_assignee.id) | ||
110 | - end | ||
111 | - | ||
112 | - it 'sends a reassigned email to the previous and current assignees' do | ||
113 | - it_sends_a_reassigned_email_to assignee.id | ||
114 | - it_sends_a_reassigned_email_to previous_assignee.id | ||
115 | - | ||
116 | - subject.send(:send_reassigned_email, mr_mock) | ||
117 | - end | ||
118 | - | ||
119 | - context 'does not send an email to the user who made the reassignment' do | ||
120 | - it 'if the user is the assignee' do | ||
121 | - subject.stub(:current_user).and_return(assignee) | ||
122 | - it_sends_a_reassigned_email_to previous_assignee.id | ||
123 | - it_does_not_send_a_reassigned_email_to assignee.id | ||
124 | - | ||
125 | - subject.send(:send_reassigned_email, mr_mock) | ||
126 | - end | ||
127 | - it 'if the user is the previous assignee' do | ||
128 | - subject.stub(:current_user).and_return(previous_assignee) | ||
129 | - it_sends_a_reassigned_email_to assignee.id | ||
130 | - it_does_not_send_a_reassigned_email_to previous_assignee.id | ||
131 | - | ||
132 | - subject.send(:send_reassigned_email, mr_mock) | ||
133 | - end | ||
134 | - end | ||
135 | - end | ||
136 | end | 94 | end |
spec/observers/note_observer_spec.rb
@@ -2,6 +2,7 @@ require 'spec_helper' | @@ -2,6 +2,7 @@ require 'spec_helper' | ||
2 | 2 | ||
3 | describe NoteObserver do | 3 | describe NoteObserver do |
4 | subject { NoteObserver.instance } | 4 | subject { NoteObserver.instance } |
5 | + before { subject.stub(notification: mock('NotificationService').as_null_object) } | ||
5 | 6 | ||
6 | let(:team_without_author) { (1..2).map { |n| double :user, id: n } } | 7 | let(:team_without_author) { (1..2).map { |n| double :user, id: n } } |
7 | 8 | ||
@@ -17,116 +18,9 @@ describe NoteObserver do | @@ -17,116 +18,9 @@ describe NoteObserver do | ||
17 | end | 18 | end |
18 | 19 | ||
19 | it 'sends out notifications' do | 20 | it 'sends out notifications' do |
20 | - subject.should_receive(:send_notify_mails).with(note) | 21 | + subject.should_receive(:notification) |
21 | 22 | ||
22 | subject.after_create(note) | 23 | subject.after_create(note) |
23 | end | 24 | end |
24 | end | 25 | end |
25 | - | ||
26 | - describe "#send_notify_mails" do | ||
27 | - let(:note) { double :note, notify: false, notify_author: false } | ||
28 | - | ||
29 | - it 'notifies team of new note when flagged to notify' do | ||
30 | - note.stub(:notify).and_return(true) | ||
31 | - subject.should_receive(:notify_team).with(note) | ||
32 | - | ||
33 | - subject.after_create(note) | ||
34 | - end | ||
35 | - | ||
36 | - it 'does not notify team of new note when not flagged to notify' do | ||
37 | - subject.should_not_receive(:notify_team).with(note) | ||
38 | - | ||
39 | - subject.after_create(note) | ||
40 | - end | ||
41 | - | ||
42 | - it 'notifies the author of a commit when flagged to notify the author' do | ||
43 | - note.stub(:notify_author).and_return(true) | ||
44 | - note.stub(:noteable).and_return(double(author_email: 'test@test.com')) | ||
45 | - note.stub(:id).and_return(42) | ||
46 | - author = double :user, id: 1, email: 'test@test.com' | ||
47 | - note.stub(:commit_author).and_return(author) | ||
48 | - Notify.should_receive(:note_commit_email) | ||
49 | - | ||
50 | - subject.after_create(note) | ||
51 | - end | ||
52 | - | ||
53 | - it 'does not notify the author of a commit when not flagged to notify the author' do | ||
54 | - notify.should_not_receive(:note_commit_email) | ||
55 | - | ||
56 | - subject.after_create(note) | ||
57 | - end | ||
58 | - | ||
59 | - it 'does nothing if no notify flags are set' do | ||
60 | - subject.after_create(note).should be_nil | ||
61 | - end | ||
62 | - end | ||
63 | - | ||
64 | - describe '#notify_team' do | ||
65 | - let(:note) { double :note, id: 1 } | ||
66 | - | ||
67 | - before :each do | ||
68 | - subject.stub(:team_without_note_author).with(note).and_return(team_without_author) | ||
69 | - end | ||
70 | - | ||
71 | - context 'notifies team of a new note on' do | ||
72 | - it 'a commit' do | ||
73 | - note.stub(:noteable_type).and_return('Commit') | ||
74 | - notify.should_receive(:note_commit_email).twice | ||
75 | - | ||
76 | - subject.send(:notify_team, note) | ||
77 | - end | ||
78 | - | ||
79 | - it 'an issue' do | ||
80 | - note.stub(:noteable_type).and_return('Issue') | ||
81 | - notify.should_receive(:note_issue_email).twice | ||
82 | - | ||
83 | - subject.send(:notify_team, note) | ||
84 | - end | ||
85 | - | ||
86 | - it 'a wiki page' do | ||
87 | - note.stub(:noteable_type).and_return('Wiki') | ||
88 | - notify.should_receive(:note_wiki_email).twice | ||
89 | - | ||
90 | - subject.send(:notify_team, note) | ||
91 | - end | ||
92 | - | ||
93 | - it 'a merge request' do | ||
94 | - note.stub(:noteable_type).and_return('MergeRequest') | ||
95 | - notify.should_receive(:note_merge_request_email).twice | ||
96 | - | ||
97 | - subject.send(:notify_team, note) | ||
98 | - end | ||
99 | - | ||
100 | - it 'a wall' do | ||
101 | - # Note: wall posts have #noteable_type of nil | ||
102 | - note.stub(:noteable_type).and_return(nil) | ||
103 | - notify.should_receive(:note_wall_email).twice | ||
104 | - | ||
105 | - subject.send(:notify_team, note) | ||
106 | - end | ||
107 | - end | ||
108 | - | ||
109 | - it 'does nothing for a new note on a snippet' do | ||
110 | - note.stub(:noteable_type).and_return('Snippet') | ||
111 | - | ||
112 | - subject.send(:notify_team, note).should be_nil | ||
113 | - end | ||
114 | - end | ||
115 | - | ||
116 | - | ||
117 | - describe '#team_without_note_author' do | ||
118 | - let(:author) { double :user, id: 4 } | ||
119 | - | ||
120 | - let(:users) { team_without_author + [author] } | ||
121 | - let(:project) { double :project, users: users } | ||
122 | - let(:note) { double :note, project: project, author: author } | ||
123 | - | ||
124 | - it 'returns the projects user without the note author included' do | ||
125 | - subject.send(:team_without_note_author, note).should == team_without_author | ||
126 | - end | ||
127 | - end | ||
128 | - | ||
129 | - def notify | ||
130 | - Notify | ||
131 | - end | ||
132 | end | 26 | end |
spec/observers/user_observer_spec.rb
@@ -2,6 +2,7 @@ require 'spec_helper' | @@ -2,6 +2,7 @@ require 'spec_helper' | ||
2 | 2 | ||
3 | describe UserObserver do | 3 | describe UserObserver do |
4 | subject { UserObserver.instance } | 4 | subject { UserObserver.instance } |
5 | + before { subject.stub(notification: mock('NotificationService').as_null_object) } | ||
5 | 6 | ||
6 | it 'calls #after_create when new users are created' do | 7 | it 'calls #after_create when new users are created' do |
7 | new_user = build(:user) | 8 | new_user = build(:user) |
@@ -11,15 +12,10 @@ describe UserObserver do | @@ -11,15 +12,10 @@ describe UserObserver do | ||
11 | 12 | ||
12 | context 'when a new user is created' do | 13 | context 'when a new user is created' do |
13 | it 'sends an email' do | 14 | it 'sends an email' do |
14 | - Notify.should_receive(:new_user_email) | 15 | + subject.should_receive(:notification) |
15 | create(:user) | 16 | create(:user) |
16 | end | 17 | end |
17 | 18 | ||
18 | - it 'no email for external' do | ||
19 | - Notify.should_not_receive(:new_user_email) | ||
20 | - create(:user, extern_uid: '32442eEfsafada') | ||
21 | - end | ||
22 | - | ||
23 | it 'trigger logger' do | 19 | it 'trigger logger' do |
24 | user = double(:user, id: 42, password: 'P@ssword!', name: 'John', email: 'u@mail.local', extern_uid?: false) | 20 | user = double(:user, id: 42, password: 'P@ssword!', name: 'John', email: 'u@mail.local', extern_uid?: false) |
25 | Gitlab::AppLogger.should_receive(:info) | 21 | Gitlab::AppLogger.should_receive(:info) |
spec/observers/users_project_observer_spec.rb
@@ -4,6 +4,7 @@ describe UsersProjectObserver do | @@ -4,6 +4,7 @@ describe UsersProjectObserver do | ||
4 | let(:user) { create(:user) } | 4 | let(:user) { create(:user) } |
5 | let(:project) { create(:project) } | 5 | let(:project) { create(:project) } |
6 | subject { UsersProjectObserver.instance } | 6 | subject { UsersProjectObserver.instance } |
7 | + before { subject.stub(notification: mock('NotificationService').as_null_object) } | ||
7 | 8 | ||
8 | describe "#after_commit" do | 9 | describe "#after_commit" do |
9 | it "should called when UsersProject created" do | 10 | it "should called when UsersProject created" do |
@@ -12,7 +13,7 @@ describe UsersProjectObserver do | @@ -12,7 +13,7 @@ describe UsersProjectObserver do | ||
12 | end | 13 | end |
13 | 14 | ||
14 | it "should send email to user" do | 15 | it "should send email to user" do |
15 | - Notify.should_receive(:project_access_granted_email).and_return(double(deliver: true)) | 16 | + subject.should_receive(:notification) |
16 | Event.stub(:create => true) | 17 | Event.stub(:create => true) |
17 | 18 | ||
18 | create(:users_project) | 19 | create(:users_project) |
@@ -36,7 +37,7 @@ describe UsersProjectObserver do | @@ -36,7 +37,7 @@ describe UsersProjectObserver do | ||
36 | end | 37 | end |
37 | 38 | ||
38 | it "should send email to user" do | 39 | it "should send email to user" do |
39 | - Notify.should_receive(:project_access_granted_email) | 40 | + subject.should_receive(:notification) |
40 | @users_project.update_attribute(:project_access, UsersProject::MASTER) | 41 | @users_project.update_attribute(:project_access, UsersProject::MASTER) |
41 | end | 42 | end |
42 | 43 |