adds method to get user votes on specific debates

This commit is contained in:
Juanjo Bazán
2015-08-06 17:23:11 +02:00
parent 8d36487cd0
commit 6e7832957a
2 changed files with 36 additions and 0 deletions

View File

@@ -2,7 +2,17 @@ class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :confirmable, devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable :recoverable, :rememberable, :trackable, :validatable
acts_as_voter
def name def name
"#{first_name} #{last_name}" "#{first_name} #{last_name}"
end 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 end

View File

@@ -1,4 +1,30 @@
require 'rails_helper' require 'rails_helper'
describe User do 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 end