Commit 88964132edaec721e256449579c032ca731781bc

Authored by Robb Kidd
1 parent 97ca4f5d

Extract observation of User to a UserObserver

app/models/mailer_observer.rb
1 1 class MailerObserver < ActiveRecord::Observer
2   - observe :issue, :user, :note, :merge_request
  2 + observe :issue, :note, :merge_request
3 3 cattr_accessor :current_user
4 4  
5 5 def after_create(model)
6   - new_user(model) if model.kind_of?(User)
7 6 new_note(model) if model.kind_of?(Note)
8 7 new_merge_request(model) if model.kind_of?(MergeRequest)
9 8 end
... ... @@ -14,10 +13,6 @@ class MailerObserver &lt; ActiveRecord::Observer
14 13  
15 14 protected
16 15  
17   - def new_user(user)
18   - Notify.new_user_email(user.id, user.password).deliver
19   - end
20   -
21 16 def new_note(note)
22 17 if note.notify
23 18 # Notify whole team except author of note
... ...
app/models/user_observer.rb 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +class UserObserver < ActiveRecord::Observer
  2 + def after_create(user)
  3 + Notify.new_user_email(user.id, user.password).deliver
  4 + end
  5 +end
... ...
config/application.rb
... ... @@ -23,7 +23,7 @@ module Gitlab
23 23 # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
24 24  
25 25 # Activate observers that should always be running.
26   - config.active_record.observers = :mailer_observer, :activity_observer, :project_observer, :key_observer, :issue_observer
  26 + config.active_record.observers = :mailer_observer, :activity_observer, :project_observer, :key_observer, :issue_observer, :user_observer
27 27  
28 28 # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
29 29 # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
... ...
spec/models/user_observer_spec.rb 0 → 100644
... ... @@ -0,0 +1,26 @@
  1 +require 'spec_helper'
  2 +
  3 +describe UserObserver do
  4 + subject { UserObserver.instance }
  5 +
  6 + it 'calls #after_create when new users are created' do
  7 + new_user = Factory.new(:user)
  8 + subject.should_receive(:after_create).with(new_user)
  9 +
  10 + User.observers.enable :user_observer do
  11 + new_user.save
  12 + end
  13 + end
  14 +
  15 + context 'when a new user is created' do
  16 + let(:user) { double(:user, id: 42, password: 'P@ssword!') }
  17 + let(:notification) { double :notification }
  18 +
  19 + it 'sends an email' do
  20 + notification.should_receive(:deliver)
  21 + Notify.should_receive(:new_user_email).with(user.id, user.password).and_return(notification)
  22 +
  23 + subject.after_create(user)
  24 + end
  25 + end
  26 +end
... ...
spec/requests/admin/admin_users_spec.rb
... ... @@ -40,14 +40,15 @@ describe &quot;Admin::Users&quot; do
40 40 end
41 41  
42 42 it "should call send mail" do
43   - User.observers.enable :mailer_observer do
44   - Notify.should_receive(:new_user_email).and_return(stub(:deliver => true))
  43 + Notify.should_receive(:new_user_email).and_return(stub(:deliver => true))
  44 +
  45 + User.observers.enable :user_observer do
45 46 click_button "Save"
46 47 end
47 48 end
48 49  
49 50 it "should send valid email to user with email & password" do
50   - User.observers.enable :mailer_observer do
  51 + User.observers.enable :user_observer do
51 52 with_resque do
52 53 click_button "Save"
53 54 end
... ...