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 | 108 | Notify.delay.note_commit_email(note.commit_author.id, note.id) |
| 109 | 109 | end |
| 110 | 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 | 119 | end | ... | ... |
spec/observers/merge_request_observer_spec.rb
| ... | ... | @@ -43,22 +43,21 @@ describe MergeRequestObserver do |
| 43 | 43 | end |
| 44 | 44 | end |
| 45 | 45 | |
| 46 | - context 'a reassigned email' do | |
| 46 | + context 'a notification' do | |
| 47 | 47 | it 'is sent if the merge request is being reassigned' do |
| 48 | 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 | 51 | subject.after_update(mr_mock) |
| 52 | 52 | end |
| 53 | 53 | |
| 54 | 54 | it 'is not sent if the merge request is not being reassigned' do |
| 55 | 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 | 58 | subject.after_update(mr_mock) |
| 59 | 59 | end |
| 60 | 60 | end |
| 61 | - | |
| 62 | 61 | end |
| 63 | 62 | |
| 64 | 63 | context '#after_close' do |
| ... | ... | @@ -92,45 +91,4 @@ describe MergeRequestObserver do |
| 92 | 91 | end |
| 93 | 92 | end |
| 94 | 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 | 94 | end | ... | ... |
spec/observers/note_observer_spec.rb
| ... | ... | @@ -2,6 +2,7 @@ require 'spec_helper' |
| 2 | 2 | |
| 3 | 3 | describe NoteObserver do |
| 4 | 4 | subject { NoteObserver.instance } |
| 5 | + before { subject.stub(notification: mock('NotificationService').as_null_object) } | |
| 5 | 6 | |
| 6 | 7 | let(:team_without_author) { (1..2).map { |n| double :user, id: n } } |
| 7 | 8 | |
| ... | ... | @@ -17,116 +18,9 @@ describe NoteObserver do |
| 17 | 18 | end |
| 18 | 19 | |
| 19 | 20 | it 'sends out notifications' do |
| 20 | - subject.should_receive(:send_notify_mails).with(note) | |
| 21 | + subject.should_receive(:notification) | |
| 21 | 22 | |
| 22 | 23 | subject.after_create(note) |
| 23 | 24 | end |
| 24 | 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 | 26 | end | ... | ... |
spec/observers/user_observer_spec.rb
| ... | ... | @@ -2,6 +2,7 @@ require 'spec_helper' |
| 2 | 2 | |
| 3 | 3 | describe UserObserver do |
| 4 | 4 | subject { UserObserver.instance } |
| 5 | + before { subject.stub(notification: mock('NotificationService').as_null_object) } | |
| 5 | 6 | |
| 6 | 7 | it 'calls #after_create when new users are created' do |
| 7 | 8 | new_user = build(:user) |
| ... | ... | @@ -11,15 +12,10 @@ describe UserObserver do |
| 11 | 12 | |
| 12 | 13 | context 'when a new user is created' do |
| 13 | 14 | it 'sends an email' do |
| 14 | - Notify.should_receive(:new_user_email) | |
| 15 | + subject.should_receive(:notification) | |
| 15 | 16 | create(:user) |
| 16 | 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 | 19 | it 'trigger logger' do |
| 24 | 20 | user = double(:user, id: 42, password: 'P@ssword!', name: 'John', email: 'u@mail.local', extern_uid?: false) |
| 25 | 21 | Gitlab::AppLogger.should_receive(:info) | ... | ... |
spec/observers/users_project_observer_spec.rb
| ... | ... | @@ -4,6 +4,7 @@ describe UsersProjectObserver do |
| 4 | 4 | let(:user) { create(:user) } |
| 5 | 5 | let(:project) { create(:project) } |
| 6 | 6 | subject { UsersProjectObserver.instance } |
| 7 | + before { subject.stub(notification: mock('NotificationService').as_null_object) } | |
| 7 | 8 | |
| 8 | 9 | describe "#after_commit" do |
| 9 | 10 | it "should called when UsersProject created" do |
| ... | ... | @@ -12,7 +13,7 @@ describe UsersProjectObserver do |
| 12 | 13 | end |
| 13 | 14 | |
| 14 | 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 | 17 | Event.stub(:create => true) |
| 17 | 18 | |
| 18 | 19 | create(:users_project) |
| ... | ... | @@ -36,7 +37,7 @@ describe UsersProjectObserver do |
| 36 | 37 | end |
| 37 | 38 | |
| 38 | 39 | it "should send email to user" do |
| 39 | - Notify.should_receive(:project_access_granted_email) | |
| 40 | + subject.should_receive(:notification) | |
| 40 | 41 | @users_project.update_attribute(:project_access, UsersProject::MASTER) |
| 41 | 42 | end |
| 42 | 43 | ... | ... |