99 lines
2.1 KiB
Ruby
99 lines
2.1 KiB
Ruby
|
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
|