From bbf96259fc764b3ee18c0940006da80fc57c676b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Mon, 31 Aug 2015 14:51:46 +0200 Subject: [PATCH] adds controller check for anonymous votes --- app/controllers/debates_controller.rb | 2 +- app/models/debate.rb | 1 + spec/controllers/debates_controller_spec.rb | 23 ++++++++++++++++++++- spec/features/votes_spec.rb | 2 +- spec/models/debate_spec.rb | 2 +- spec/spec_helper.rb | 1 - 6 files changed, 26 insertions(+), 5 deletions(-) diff --git a/app/controllers/debates_controller.rb b/app/controllers/debates_controller.rb index 87df13d37..63b1bb34f 100644 --- a/app/controllers/debates_controller.rb +++ b/app/controllers/debates_controller.rb @@ -53,7 +53,7 @@ class DebatesController < ApplicationController end def vote - @debate.vote_by(voter: current_user, vote: params[:value]) + @debate.vote_by(voter: current_user, vote: params[:value]) if @debate.votable_by?(current_user) set_debate_votes(@debate) end diff --git a/app/models/debate.rb b/app/models/debate.rb index 60f672d4e..3f88eaff1 100644 --- a/app/models/debate.rb +++ b/app/models/debate.rb @@ -72,6 +72,7 @@ class Debate < ActiveRecord::Base end def anonymous_votes_ratio + return 0 if cached_votes_total == 0 (cached_anonymous_votes_total.to_f / cached_votes_total) * 100 end diff --git a/spec/controllers/debates_controller_spec.rb b/spec/controllers/debates_controller_spec.rb index 9ab4f7544..1628c9bcf 100644 --- a/spec/controllers/debates_controller_spec.rb +++ b/spec/controllers/debates_controller_spec.rb @@ -12,7 +12,6 @@ describe DebatesController do end describe 'POST create' do - it 'should create an ahoy event' do sign_in create(:user) @@ -22,4 +21,26 @@ describe DebatesController do expect(Ahoy::Event.last.properties['debate_id']).to eq Debate.last.id end end + + describe "Vote with too many anonymous votes" do + it 'should allow vote if user is allowed' do + Setting.find_by(key: "max_ratio_anon_votes_on_debates").update(value: 100) + debate = create(:debate) + sign_in create(:user) + + expect do + xhr :post, :vote, id: debate.id, value: 'yes' + end.to change { debate.reload.votes_for.size }.by(1) + end + + it 'should not allow vote if user is not allowed' do + Setting.find_by(key: "max_ratio_anon_votes_on_debates").update(value: 0) + debate = create(:debate) + sign_in create(:user) + + expect do + xhr :post, :vote, id: debate.id, value: 'yes' + end.to_not change { debate.reload.votes_for.size } + end + end end diff --git a/spec/features/votes_spec.rb b/spec/features/votes_spec.rb index 548c7e308..ea9761bde 100644 --- a/spec/features/votes_spec.rb +++ b/spec/features/votes_spec.rb @@ -5,7 +5,7 @@ feature 'Votes' do feature 'Debates' do background do - @manuela = create(:user) + @manuela = create(:user, verified_at: Time.now) @pablo = create(:user) @debate = create(:debate) diff --git a/spec/models/debate_spec.rb b/spec/models/debate_spec.rb index ac0c62570..f94bb02c6 100644 --- a/spec/models/debate_spec.rb +++ b/spec/models/debate_spec.rb @@ -81,7 +81,7 @@ describe Debate do describe "#votable_by?" do let(:debate) { create(:debate) } - before(:all) do + before(:each) do Setting.find_by(key: "max_ratio_anon_votes_on_debates").update(value: 50) end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index ef39ce84e..cb6b56d42 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -21,7 +21,6 @@ RSpec.configure do |config| config.before(:each) do |example| DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction DatabaseCleaner.start - load "#{Rails.root}/db/seeds.rb" end