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
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to