require 'rails_helper' describe 'Vote' do describe '#for_debates' do it 'does not returns votes for other votables' do debate = create(:debate) comment = create(:comment) create(:vote, votable: comment) expect(Vote.for_debates(debate).count).to eq(0) end it 'returns votes only for debates in parameters' do debate1 = create(:debate) debate2 = create(:debate) create(:vote, votable: debate1) expect(Vote.for_debates(debate1).count).to eq(1) expect(Vote.for_debates(debate2).count).to eq(0) end it 'accepts more than 1 debate' do debate1 = create(:debate) debate2 = create(:debate) debate3 = create(:debate) create(:vote, votable: debate1) create(:vote, votable: debate3) expect(Vote.for_debates([debate1, debate2]).count).to eq(1) end end describe '#value' do it 'returns vote flag' do vote = create(:vote, vote_flag: true) expect(vote.value).to eq(true) vote = create(:vote, vote_flag: false) expect(vote.value).to eq(false) end end describe 'public_for_api scope' do it 'returns votes on debates' do debate = create(:debate) vote = create(:vote, votable: debate) expect(Vote.public_for_api).to include(vote) end it 'blocks votes on hidden debates' do debate = create(:debate, :hidden) vote = create(:vote, votable: debate) expect(Vote.public_for_api).not_to include(vote) end it 'returns votes on proposals' do proposal = create(:proposal) vote = create(:vote, votable: proposal) expect(Vote.public_for_api).to include(vote) end it 'blocks votes on hidden proposals' do proposal = create(:proposal, :hidden) vote = create(:vote, votable: proposal) expect(Vote.public_for_api).not_to include(vote) end it 'returns votes on comments' do comment = create(:comment) vote = create(:vote, votable: comment) expect(Vote.public_for_api).to include(vote) end it 'blocks votes on hidden comments' do comment = create(:comment, :hidden) vote = create(:vote, votable: comment) expect(Vote.public_for_api).not_to include(vote) end it 'blocks any other kind of votes' do spending_proposal = create(:spending_proposal) vote = create(:vote, votable: spending_proposal) expect(Vote.public_for_api).not_to include(vote) end end describe '#public_timestamp' do it "truncates created_at timestamp up to minutes" do vote = create(:vote, created_at: Time.zone.parse('2016-02-10 15:30:45')) expect(vote.public_timestamp).to eq(Time.zone.parse('2016-02-10 15:00:00')) end end end