Skip to content
Snippets Groups Projects
Commit dfb5da9d authored by Robb Kidd's avatar Robb Kidd
Browse files

Disable observers in specs. Enable only when observer is under test.

Used the built-in observer enable/disable feature in ActiveModel[1].
ActiveRecord::Base includes ActiveModel::Observing which provides this
behavior.

Simple wraps to enable the observer under test were added to the specs
for: ActivityObserver, IssueObserver, Admin::Users and Issues.

The spec for Project.last_activity was refactored to separate the tests
for #last_activity and #last_activity_date. Each had doubles added to
isolate the spec from the hidden dependency on the ActivityObserver
action to create an Event for the project when an Issue is created. This
ActivityObserver behavior is already tested by its spec.

[1] http://api.rubyonrails.org/classes/ActiveModel/ObserverArray.html
parent 5303cc28
No related branches found
No related tags found
1 merge request!953Separate user and issue observation from mail observer
Loading
Loading
@@ -9,9 +9,11 @@ describe ActivityObserver do
end
 
describe "Merge Request created" do
before do
@merge_request = Factory :merge_request, :project => project
@event = Event.last
before do
MergeRequest.observers.enable :activity_observer do
@merge_request = Factory :merge_request, :project => project
@event = Event.last
end
end
 
it_should_be_valid_event
Loading
Loading
@@ -20,9 +22,11 @@ describe ActivityObserver do
end
 
describe "Issue created" do
before do
@issue = Factory :issue, :project => project
@event = Event.last
before do
Issue.observers.enable :activity_observer do
@issue = Factory :issue, :project => project
@event = Event.last
end
end
 
it_should_be_valid_event
Loading
Loading
Loading
Loading
@@ -13,7 +13,10 @@ describe IssueObserver do
 
it 'is called when an issue is created' do
subject.should_receive(:after_create)
Factory.create(:issue, :project => Factory.create(:project))
Issue.observers.enable :issue_observer do
Factory.create(:issue, :project => Factory.create(:project))
end
end
 
it 'sends an email to the assignee' do
Loading
Loading
@@ -40,8 +43,11 @@ describe IssueObserver do
it 'is called when an issue is changed' do
changed = Factory.create(:issue, :project => Factory.create(:project))
subject.should_receive(:after_update)
changed.description = 'I changed'
changed.save
Issue.observers.enable :issue_observer do
changed.description = 'I changed'
changed.save
end
end
 
context 'a reassigned email' do
Loading
Loading
Loading
Loading
@@ -72,16 +72,29 @@ describe Project do
end
 
describe "last_activity" do
let(:project) { Factory :project }
let(:project) { Factory :project }
let(:last_event) { double }
 
before do
@issue = Factory :issue, :project => project
project.stub(:events).and_return( [ double, double, last_event ] )
end
 
it { project.last_activity.should == Event.last }
it { project.last_activity_date.to_s.should == Event.last.created_at.to_s }
it { project.last_activity.should == last_event }
end
 
describe 'last_activity_date' do
let(:project) { Factory :project }
it 'returns the creation date of the project\'s last event if present' do
last_event = double(:created_at => 'now')
project.stub(:events).and_return( [double, double, last_event] )
project.last_activity_date.should == last_event.created_at
end
it 'returns the project\'s last update date if it has no events' do
project.last_activity_date.should == project.updated_at
end
end
describe "fresh commits" do
let(:project) { Factory :project }
 
Loading
Loading
Loading
Loading
@@ -40,19 +40,23 @@ describe "Admin::Users" do
end
 
it "should call send mail" do
Notify.should_receive(:new_user_email).and_return(stub(:deliver => true))
click_button "Save"
User.observers.enable :mailer_observer do
Notify.should_receive(:new_user_email).and_return(stub(:deliver => true))
click_button "Save"
end
end
 
it "should send valid email to user with email & password" do
with_resque do
click_button "Save"
User.observers.enable :mailer_observer do
with_resque do
click_button "Save"
end
user = User.last
email = ActionMailer::Base.deliveries.last
email.subject.should have_content("Account was created")
email.body.should have_content(user.email)
email.body.should have_content(@password)
end
user = User.last
email = ActionMailer::Base.deliveries.last
email.subject.should have_content("Account was created")
email.body.should have_content(user.email)
email.body.should have_content(@password)
end
end
 
Loading
Loading
Loading
Loading
@@ -128,18 +128,22 @@ describe "Issues" do
end
 
it "should call send mail" do
Notify.should_receive(:new_issue_email).and_return(stub(:deliver => true))
click_button "Submit new issue"
Issue.observers.enable :issue_observer do
Notify.should_receive(:new_issue_email).and_return(stub(:deliver => true))
click_button "Submit new issue"
end
end
 
it "should send valid email to user" do
with_resque do
click_button "Submit new issue"
Issue.observers.enable :issue_observer do
with_resque do
click_button "Submit new issue"
end
issue = Issue.last
email = ActionMailer::Base.deliveries.last
email.subject.should have_content("New Issue was created")
email.body.should have_content(issue.title)
end
issue = Issue.last
email = ActionMailer::Base.deliveries.last
email.subject.should have_content("New Issue was created")
email.body.should have_content(issue.title)
end
 
end
Loading
Loading
Loading
Loading
@@ -52,6 +52,7 @@ RSpec.configure do |config|
DatabaseCleaner.start
 
WebMock.disable_net_connect!(allow_localhost: true)
ActiveRecord::Base.observers.disable :all
end
 
config.after do
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