diff --git a/app/models/debate.rb b/app/models/debate.rb index fdf939b2f..60f672d4e 100644 --- a/app/models/debate.rb +++ b/app/models/debate.rb @@ -31,7 +31,6 @@ class Debate < ActiveRecord::Base scope :sort_by_total_votes, -> { reorder(cached_votes_total: :desc) } scope :sort_by_likes , -> { reorder(cached_votes_up: :desc) } scope :sort_by_created_at, -> { reorder(created_at: :desc) } - # Ahoy setup visitable # Ahoy will automatically assign visit_id on create @@ -56,6 +55,10 @@ class Debate < ActiveRecord::Base cached_votes_total end + def total_anonymous_votes + cached_anonymous_votes_total + end + def editable? total_votes == 0 end @@ -64,6 +67,14 @@ class Debate < ActiveRecord::Base editable? && author == user end + def votable_by?(user) + user.level_three_verified? || user.level_two_verified? || anonymous_votes_ratio < Setting.value_for('max_ratio_anon_votes_on_debates').to_i + end + + def anonymous_votes_ratio + (cached_anonymous_votes_total.to_f / cached_votes_total) * 100 + end + def description super.try :html_safe end diff --git a/app/views/admin/moderators/search.js.erb b/app/views/admin/moderators/search.js.erb index 5b8a61207..a6ac48206 100644 --- a/app/views/admin/moderators/search.js.erb +++ b/app/views/admin/moderators/search.js.erb @@ -1 +1 @@ -$("#search-result").html("
<%= j render 'moderator', moderator: @moderator %>
"); +$("#search-result").html("
<%= j render 'moderator', moderator: @moderator %>
"); diff --git a/spec/models/debate_spec.rb b/spec/models/debate_spec.rb index 5e1ed76c8..22bd0bf91 100644 --- a/spec/models/debate_spec.rb +++ b/spec/models/debate_spec.rb @@ -78,6 +78,36 @@ describe Debate do end end + describe "#votable_by?" do + let(:debate) { create(:debate) } + + before(:all) do + create(:setting, key: "max_ratio_anon_votes_on_debates", value: "50") + end + + it "should be true for level two verified users" do + user = create(:user, residence_verified_at: Time.now, confirmed_phone: "666333111") + expect(debate.votable_by?(user)).to be true + end + + it "should be true for level three verified users" do + user = create(:user, verified_at: Time.now) + expect(debate.votable_by?(user)).to be true + end + + it "should be true for anonymous users if allowed anonymous votes" do + debate.update(cached_anonymous_votes_total: 42, cached_votes_total: 100) + user = create(:user) + expect(debate.votable_by?(user)).to be true + end + + it "should be false for anonymous users if too many anonymous votes" do + debate.update(cached_anonymous_votes_total: 52, cached_votes_total: 100) + user = create(:user) + expect(debate.votable_by?(user)).to be false + end + end + describe "#search" do let!(:economy) { create(:debate, tag_list: "Economy") } let!(:health) { create(:debate, tag_list: "Health") } @@ -102,4 +132,11 @@ describe Debate do end end + describe '#anonymous_votes_ratio' do + it "returns the percentage of anonymous votes of the total votes" do + debate = create(:debate, cached_anonymous_votes_total: 25, cached_votes_total: 100) + expect(debate.anonymous_votes_ratio).to eq(25.0) + end + end + end