journalduhacker/spec/models/vote_spec.rb

99 lines
2.1 KiB
Ruby
Raw Permalink Normal View History

require "spec_helper"
describe Vote do
it "applies a story upvote and karma properly" do
s = Story.make!
s.upvotes.should == 1
s.downvotes.should == 0
s.user.karma.should == 0
u = User.make!
Vote.vote_thusly_on_story_or_comment_for_user_because(1, s.id,
nil, u.id, nil)
s.reload
s.upvotes.should == 2
s.user.karma.should == 1
end
it "does nothing when upvoting an existing upvote" do
s = Story.make!
u = User.make!
2.times do
Vote.vote_thusly_on_story_or_comment_for_user_because(1, s.id,
nil, u.id, nil)
s.reload
s.upvotes.should == 2
s.user.karma.should == 1
end
end
it "has no effect on a story score when casting a hide vote" do
s = Story.make!
s.upvotes.should == 1
u = User.make!
Vote.vote_thusly_on_story_or_comment_for_user_because(0, s.id,
nil, u.id, "H")
s.reload
s.user.karma.should == 0
s.upvotes.should == 1
s.downvotes.should == 0
end
it "removes karma and upvote when downvoting an upvote" do
s = Story.make!
c = Comment.make!(:story_id => s.id)
c.user.karma.should == 0
u = User.make!
Vote.vote_thusly_on_story_or_comment_for_user_because(1, s.id,
c.id, u.id, nil)
c.reload
c.user.karma.should == 1
# initial poster upvote plus new user's vote
c.upvotes.should == 2
c.downvotes.should == 0
# flip vote
Vote.vote_thusly_on_story_or_comment_for_user_because(-1, s.id,
c.id, u.id, Vote::COMMENT_REASONS.keys.first)
c.reload
c.user.karma.should == -1
c.upvotes.should == 1
c.downvotes.should == 1
end
it "neutralizes karma and upvote when unvoting an upvote" do
s = Story.make!
c = Comment.make!(:story_id => s.id)
u = User.make!
Vote.vote_thusly_on_story_or_comment_for_user_because(1, s.id,
c.id, u.id, nil)
c.reload
c.user.karma.should == 1
c.upvotes.should == 2
c.downvotes.should == 0
Vote.vote_thusly_on_story_or_comment_for_user_because(0, s.id,
c.id, u.id, nil)
c.reload
c.user.karma.should == 0
c.upvotes.should == 1
c.downvotes.should == 0
end
end