From dbfa35c444917e46a27056181becbdba6bbfc0a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Thu, 3 Sep 2015 18:31:16 +0200 Subject: [PATCH] adds 'most commented' order to debates --- app/controllers/debates_controller.rb | 2 +- app/models/debate.rb | 1 + config/locales/en.yml | 1 + config/locales/es.yml | 1 + spec/features/debates_spec.rb | 31 ++++++++++++++++++++------- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/controllers/debates_controller.rb b/app/controllers/debates_controller.rb index 6834345e2..22434ac89 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'] + @valid_orders = ['created_at', 'score', 'most_commented'] @order = @valid_orders.include?(params[:order]) ? params[:order] : 'created_at' end diff --git a/app/models/debate.rb b/app/models/debate.rb index 19a3b7280..23a57be3c 100644 --- a/app/models/debate.rb +++ b/app/models/debate.rb @@ -30,6 +30,7 @@ class Debate < ActiveRecord::Base scope :for_render, -> { includes(:tags) } 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) } # Ahoy setup visitable # Ahoy will automatically assign visit_id on create diff --git a/config/locales/en.yml b/config/locales/en.yml index 63c935d94..ace94568b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -71,6 +71,7 @@ en: orders: created_at: newest score: best rated + most_commented: "most commented" 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 1a93df1b7..5227b6fbf 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -71,6 +71,7 @@ es: orders: created_at: "más nuevos" score: "mejor valorados" + most_commented: "más comentados" 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 f05b059fc..aa7c7470e 100644 --- a/spec/features/debates_spec.rb +++ b/spec/features/debates_spec.rb @@ -353,12 +353,14 @@ feature 'Debates' do feature 'Debate index order filters', :js do before do - @most_voted_debate = create(:debate) - @most_score_debate = create(:debate) - @most_recent_debate = create(:debate) + @most_commented_debate = create(:debate) + @most_score_debate = create(:debate) + @most_recent_debate = create(:debate) + create_list(:comment, 2, commentable: @most_commented_debate) create_list(:vote, 2, votable: @most_score_debate) - create_list(:vote, 2, votable: @most_voted_debate, vote_flag: false) - create(:vote, votable: @most_voted_debate) + create_list(:vote, 2, votable: @most_recent_debate, vote_flag: false) + create(:vote, votable: @most_recent_debate) + create(:comment, commentable: @most_recent_debate) end scenario 'Default order is created_at' do @@ -366,6 +368,7 @@ feature 'Debates' do expect(page).to have_select('order-selector', selected: 'newest') 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 by best rated' do @@ -376,8 +379,20 @@ feature 'Debates' do expect(find("#debates .debate", match: :first)).to have_content(@most_score_debate.title) expect(current_url).to include('order=score') - expect(@most_score_debate.title).to appear_before(@most_recent_debate.title) - expect(@most_recent_debate.title).to appear_before(@most_voted_debate.title) + expect(@most_score_debate.title).to appear_before(@most_commented_debate.title) + expect(@most_commented_debate.title).to appear_before(@most_recent_debate.title) + end + + scenario 'Debates are ordered by most commented' do + visit debates_path + + 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) + + expect(current_url).to include('order=most_commented') + expect(@most_commented_debate.title).to appear_before(@most_recent_debate.title) + expect(@most_recent_debate.title).to appear_before(@most_score_debate.title) end scenario 'Debates are ordered by newest' do @@ -392,7 +407,7 @@ feature 'Debates' do expect(current_url).to include('order=created_at') expect(@most_recent_debate.title).to appear_before(@most_score_debate.title) - expect(@most_score_debate.title).to appear_before(@most_voted_debate.title) + expect(@most_score_debate.title).to appear_before(@most_commented_debate.title) end end end