Skip to content
Snippets Groups Projects
Commit 413778b6 authored by Riyad Preukschas's avatar Riyad Preukschas
Browse files

Rename NoteObserver methods and clarify things

parent 853c69c4
No related branches found
No related tags found
1 merge request!1695Code cleanup on NoteObserver and Notify
class NoteObserver < ActiveRecord::Observer
 
def after_create(note)
send_notify_mails(note)
end
protected
def send_notify_mails(note)
if note.notify
# Notify whole team except author of note
notify_team_of_new_note(note)
notify_team(note)
elsif note.notify_author
# Notify only author of resource
Notify.note_commit_email(note.commit_author.id, note.id).deliver
Loading
Loading
@@ -13,15 +18,15 @@ class NoteObserver < ActiveRecord::Observer
end
end
 
protected
def notify_team_of_new_note(note)
note_is_on = note.noteable_type || 'Wall'
notify_method = 'note_' + note_is_on.underscore + '_email'
# Notifies the whole team except the author of note
def notify_team(note)
# Note: wall posts are not "attached" to anything, so fall back to "Wall"
noteable_type = note.noteable_type || "Wall"
notify_method = "note_#{noteable_type.underscore}_email".to_sym
 
if Notify.respond_to? notify_method
team_without_note_author(note).map do |u|
Notify.send(notify_method.to_sym, u.id, note.id).deliver
Notify.send(notify_method, u.id, note.id).deliver
end
end
end
Loading
Loading
Loading
Loading
@@ -3,8 +3,11 @@ require 'spec_helper'
describe NoteObserver do
subject { NoteObserver.instance }
 
let(:team_without_author) { (1..2).map { |n| double :user, id: n } }
let(:delivery_success) { double deliver: true }
describe '#after_create' do
let(:note) { double :note, notify: false, notify_author: false }
let(:note) { double :note }
 
it 'is called after a note is created' do
subject.should_receive :after_create
Loading
Loading
@@ -14,40 +17,51 @@ describe NoteObserver do
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_of_new_note).with(note)
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_of_new_note).with(note)
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).and_return(double(deliver: true))
Notify.should_receive(:note_commit_email).and_return(delivery_success)
 
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
 
let(:team_without_author) { (1..2).map { |n| double :user, id: n } }
describe '#notify_team_of_new_note' do
describe '#notify_team' do
let(:note) { double :note, id: 1 }
 
before :each do
Loading
Loading
@@ -57,40 +71,45 @@ describe NoteObserver do
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.and_return(double(deliver: true))
Notify.should_receive(:note_commit_email).twice.and_return(delivery_success)
 
subject.send(:notify_team_of_new_note, note)
subject.send(:notify_team, note)
end
it 'an issue' do
note.stub(:noteable_type).and_return('Issue')
Notify.should_receive(:note_issue_email).twice.and_return(double(deliver: true))
Notify.should_receive(:note_issue_email).twice.and_return(delivery_success)
 
subject.send(:notify_team_of_new_note, note)
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.and_return(double(deliver: true))
Notify.should_receive(:note_wiki_email).twice.and_return(delivery_success)
 
subject.send(:notify_team_of_new_note, note)
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.and_return(double(deliver: true))
Notify.should_receive(:note_merge_request_email).twice.and_return(delivery_success)
 
subject.send(:notify_team_of_new_note, note)
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.and_return(double(deliver: true))
Notify.should_receive(:note_wall_email).twice.and_return(delivery_success)
 
subject.send(:notify_team_of_new_note, note)
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_of_new_note, note).should be_nil
subject.send(:notify_team, note).should be_nil
end
end
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment