I wrote a test that looked like this:
it "increases the user's reputation" do
lambda { @comment.update_attribute(:helpful, true) }.should
change(@seller.reload,
:reputation_score).by(Event.reputation_change_for(:mark_helpful))
end
And I am getting this error:
1) Comment comments on posts marking a comment as helpful increases the
user's reputation
Failure/Error: lambda { @comment.update_attribute(:helpful, true) }.should
change(@seller.reload,
:reputation_score).by(Event.reputation_change_for(:mark_helpful))
reputation_score should have been changed by 3, but was changed by 0
--
The way the actual code works is, I have a comment observer that does:
def after_update(comment)
Event.create_for_user(comment.user, :mark_helpful)
end
And event.rb does something like:
def create_for_user(user, event_type)
create!(:user => user, :reputation_change =>
Event::SCORES[event_type])
end
The user model has an before_save callback which does:
def sum_points
self.reputation_score = events.sum(:reputation_change)
self.points = events.sum(:points_change)
end
---
Anyway, so this test fails, and I am not sure why... If I write it in a
slightly less-cool way:
it "increases the user's reputation" do
@seller.reputation_score.should == 0
@comment.update_attribute(:helpful, true)
@seller.reload.reputation_score.should ==
Event.reputation_change_for(:mark_helpful)
end
Then it passes... If I throw in a debugger statement in there and manually
call the code, the reputation_score does indeed increase...... So I am
confused why the lambda {}.change thing isn't working?
Thanks.
Patrick J. Collins
http://collinatorstudios.com
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users