Adds the default score selector/controller. Refactors debates specs

This commit is contained in:
kikito
2015-09-04 11:50:07 +02:00
parent b46a3e5452
commit 7c3ca55de1
6 changed files with 40 additions and 41 deletions

View File

@@ -82,8 +82,8 @@ class DebatesController < ApplicationController
end end
def parse_order def parse_order
@valid_orders = ['created_at', 'score', 'most_commented', 'random'] @valid_orders = ['hot_score', 'created_at', 'score', 'most_commented', 'random']
@order = @valid_orders.include?(params[:order]) ? params[:order] : 'created_at' @order = @valid_orders.include?(params[:order]) ? params[:order] : @valid_orders.first
end end
def parse_tag_filter def parse_tag_filter

View File

@@ -32,6 +32,7 @@ class Debate < ActiveRecord::Base
scope :sort_by_created_at, -> { reorder(created_at: :desc) } scope :sort_by_created_at, -> { reorder(created_at: :desc) }
scope :sort_by_most_commented, -> { reorder(comments_count: :desc) } scope :sort_by_most_commented, -> { reorder(comments_count: :desc) }
scope :sort_by_random, -> { reorder("RANDOM()") } scope :sort_by_random, -> { reorder("RANDOM()") }
scope :sort_by_hot_score , -> { order(hot_score: :desc) }
# Ahoy setup # Ahoy setup
visitable # Ahoy will automatically assign visit_id on create visitable # Ahoy will automatically assign visit_id on create

View File

@@ -69,6 +69,7 @@ en:
select_order: Order by select_order: Order by
select_order_long: Order debates by select_order_long: Order debates by
orders: orders:
hot_score: most active
created_at: newest created_at: newest
score: best rated score: best rated
most_commented: most commented most_commented: most commented

View File

@@ -69,6 +69,7 @@ es:
select_order: Ordenar por select_order: Ordenar por
select_order_long: Estás viendo los debates select_order_long: Estás viendo los debates
orders: orders:
hot_score: "más activos"
created_at: "más nuevos" created_at: "más nuevos"
score: "mejor valorados" score: "mejor valorados"
most_commented: "más comentados" most_commented: "más comentados"

View File

@@ -350,67 +350,63 @@ feature 'Debates' do
expect(Flag.flagged?(user, debate)).to_not be expect(Flag.flagged?(user, debate)).to_not be
end end
feature 'Debate index order filters', :js do feature 'Debate index order filters' do
before do scenario 'Default order is hot_score', :js do
@most_commented_debate = create(:debate) create(:debate, title: 'best', hot_score: 10)
@most_score_debate = create(:debate) create(:debate, title: 'medium', hot_score: 5)
@most_recent_debate = create(:debate) create(:debate, title: 'worst', hot_score: 2)
create_list(:comment, 2, commentable: @most_commented_debate)
create_list(:vote, 2, votable: @most_score_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
visit debates_path visit debates_path
expect(page).to have_select('order-selector', selected: 'newest') expect(page).to have_select('order-selector', selected: 'most active')
expect(@most_recent_debate.title).to appear_before(@most_score_debate.title) expect('best').to appear_before('medium')
expect(@most_score_debate.title).to appear_before(@most_commented_debate.title) expect('medium').to appear_before('worst')
end end
scenario 'Debates are ordered by best rated' do scenario 'Debates are ordered by best rated', :js do
visit debates_path create(:debate, title: 'best', cached_votes_score: 10)
create(:debate, title: 'medium', cached_votes_score: 5)
create(:debate, title: 'worst', cached_votes_score: 2)
visit debates_path
select 'best rated', from: 'order-selector' select 'best rated', from: 'order-selector'
expect(page).to have_select('order-selector', selected: 'best rated') expect(page).to have_select('order-selector', selected: 'best rated')
expect(find("#debates .debate", match: :first)).to have_content(@most_score_debate.title) expect('best').to appear_before('medium')
expect('medium').to appear_before('worst')
expect(current_url).to include('order=score') expect(current_url).to include('order=score')
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 end
scenario 'Debates are ordered by most commented' do scenario 'Debates are ordered by most commented', :js do
visit debates_path create(:debate, title: 'best', comments_count: 10)
create(:debate, title: 'medium', comments_count: 5)
create(:debate, title: 'worst', comments_count: 2)
visit debates_path
select 'most commented', from: 'order-selector' select 'most commented', from: 'order-selector'
expect(page).to have_select('order-selector', selected: 'most commented') expect(page).to have_select('order-selector', selected: 'most commented')
expect(find("#debates .debate", match: :first)).to have_content(@most_commented_debate.title) expect('best').to appear_before('medium')
expect('medium').to appear_before('worst')
expect(current_url).to include('order=most_commented') 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 end
scenario 'Debates are ordered by newest' do scenario 'Debates are ordered by newest', :js do
create(:debate, title: 'best', created_at: Time.now)
create(:debate, title: 'medium', created_at: Time.now - 1.hour)
create(:debate, title: 'worst', created_at: Time.now - 1.day)
visit debates_path visit debates_path
select 'best rated', from: 'order-selector'
expect(find("#debates .debate", match: :first)).to have_content(@most_score_debate.title)
select 'newest', from: 'order-selector' select 'newest', from: 'order-selector'
expect(page).to have_select('order-selector', selected: 'newest')
expect(find("#debates .debate", match: :first)).to have_content(@most_recent_debate.title)
expect(page).to have_select('order-selector', selected: 'newest')
expect('best').to appear_before('medium')
expect('medium').to appear_before('worst')
expect(current_url).to include('order=created_at') 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_commented_debate.title)
end end
scenario 'Debates are ordered randomly' do scenario 'Debates are ordered randomly', :js do
create_list(:debate, 12) create_list(:debate, 12)
visit debates_path visit debates_path
@@ -420,7 +416,6 @@ feature 'Debates' do
select 'most commented', from: 'order-selector' select 'most commented', from: 'order-selector'
expect(page).to have_select('order-selector', selected: 'most commented') 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' select 'random', from: 'order-selector'
expect(page).to have_select('order-selector', selected: 'random') expect(page).to have_select('order-selector', selected: 'random')

View File

@@ -1,6 +1,7 @@
RSpec::Matchers.define :appear_before do |later_content| RSpec::Matchers.define :appear_before do |later_content|
match do |earlier_content| match do |earlier_content|
page.body.index(earlier_content) < page.body.index(later_content) text = page.text
text.index(earlier_content) < text.index(later_content)
end end
end end