adds method to get user votes on specific debates
This commit is contained in:
@@ -2,7 +2,17 @@ class User < ActiveRecord::Base
|
||||
devise :database_authenticatable, :registerable, :confirmable,
|
||||
:recoverable, :rememberable, :trackable, :validatable
|
||||
|
||||
acts_as_voter
|
||||
|
||||
def name
|
||||
"#{first_name} #{last_name}"
|
||||
end
|
||||
|
||||
def votes_on_debates(debates_ids = [])
|
||||
debates_ids = debates_ids.flatten.compact.uniq
|
||||
return {} if debates_ids.empty?
|
||||
|
||||
voted = votes.where("votable_type = ? AND votable_id IN (?)", "Debate", debates_ids)
|
||||
voted.each_with_object({}){ |v,_| _[v.votable_id] = v.vote_flag }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,4 +1,30 @@
|
||||
require 'rails_helper'
|
||||
|
||||
describe User do
|
||||
|
||||
before(:each) do
|
||||
@user = create(:user)
|
||||
end
|
||||
|
||||
describe "#votes_on_debates" do
|
||||
it "should return {} if no debate" do
|
||||
expect(@user.votes_on_debates()).to eq({})
|
||||
expect(@user.votes_on_debates([])).to eq({})
|
||||
expect(@user.votes_on_debates([nil, nil])).to eq({})
|
||||
end
|
||||
|
||||
it "should return a hash of debates ids and votes" do
|
||||
debate1 = create(:debate)
|
||||
debate2 = create(:debate)
|
||||
debate3 = create(:debate)
|
||||
create(:vote, voter: @user, votable: debate1, vote_flag: true)
|
||||
create(:vote, voter: @user, votable: debate3, vote_flag: false)
|
||||
|
||||
voted = @user.votes_on_debates([debate1.id, debate2.id, debate3.id])
|
||||
|
||||
expect(voted[debate1.id]).to eq(true)
|
||||
expect(voted[debate2.id]).to eq(nil)
|
||||
expect(voted[debate3.id]).to eq(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user