diff --git a/app/models/user.rb b/app/models/user.rb index da1c3ab8d..55f70bb2e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -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 diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 80c91c2d4..77b6755dc 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -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