diff --git a/app/controllers/debates_controller.rb b/app/controllers/debates_controller.rb index 22434ac89..5219c1308 100644 --- a/app/controllers/debates_controller.rb +++ b/app/controllers/debates_controller.rb @@ -82,7 +82,7 @@ class DebatesController < ApplicationController end def parse_order - @valid_orders = ['created_at', 'score', 'most_commented'] + @valid_orders = ['created_at', 'score', 'most_commented', 'random'] @order = @valid_orders.include?(params[:order]) ? params[:order] : 'created_at' end diff --git a/app/models/debate.rb b/app/models/debate.rb index 23a57be3c..25ba8aca8 100644 --- a/app/models/debate.rb +++ b/app/models/debate.rb @@ -31,6 +31,7 @@ class Debate < ActiveRecord::Base scope :sort_by_score , -> { reorder(cached_votes_score: :desc) } scope :sort_by_created_at, -> { reorder(created_at: :desc) } scope :sort_by_most_commented, -> { reorder(comments_count: :desc) } + scope :sort_by_random, -> { reorder("RANDOM()") } # Ahoy setup visitable # Ahoy will automatically assign visit_id on create diff --git a/config/locales/en.yml b/config/locales/en.yml index ace94568b..c4583ffd8 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -71,7 +71,8 @@ en: orders: created_at: newest score: best rated - most_commented: "most commented" + most_commented: most commented + random: random filter_topic: one: "You are seeing one debate with the topic '%{topic}'" other: "You are seeing %{count} debates with the topic '%{topic}'" diff --git a/config/locales/es.yml b/config/locales/es.yml index 5227b6fbf..62ab28997 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -72,6 +72,7 @@ es: created_at: "más nuevos" score: "mejor valorados" most_commented: "más comentados" + random: "aleatorio" filter_topic: one: "Estás viendo un debate con el tema ''%{topic}''" other: "Estás viendo %{count} debates con el tema '%{topic}'" diff --git a/spec/features/debates_spec.rb b/spec/features/debates_spec.rb index aa7c7470e..d45e1c46f 100644 --- a/spec/features/debates_spec.rb +++ b/spec/features/debates_spec.rb @@ -409,5 +409,24 @@ feature 'Debates' do expect(@most_recent_debate.title).to appear_before(@most_score_debate.title) expect(@most_score_debate.title).to appear_before(@most_commented_debate.title) end + + scenario 'Debates are ordered randomly' do + create_list(:debate, 12) + visit debates_path + + select 'random', from: 'order-selector' + expect(page).to have_select('order-selector', selected: 'random') + debates_first_time = find("#debates").text + + select 'most commented', from: 'order-selector' + expect(page).to have_select('order-selector', selected: 'most commented') + expect(find("#debates .debate", match: :first)).to have_content(@most_commented_debate.title) + + select 'random', from: 'order-selector' + expect(page).to have_select('order-selector', selected: 'random') + debates_second_time = find("#debates").text + + expect(debates_first_time).to_not eq(debates_second_time) + end end end