Adds the default score selector/controller. Refactors debates specs
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user