diff --git a/app/controllers/debates_controller.rb b/app/controllers/debates_controller.rb index 1b1184f59..8a5def88b 100644 --- a/app/controllers/debates_controller.rb +++ b/app/controllers/debates_controller.rb @@ -7,7 +7,7 @@ class DebatesController < ApplicationController before_action :authenticate_user!, except: [:index, :show] has_orders %w{hot_score confidence_score created_at most_commented random}, only: :index - has_orders %w{confidence_score created_at}, only: :show + has_orders %w{most_voted newest oldest}, only: :show load_and_authorize_resource respond_to :html, :js diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb index 50b436e58..1be046b7a 100644 --- a/app/controllers/proposals_controller.rb +++ b/app/controllers/proposals_controller.rb @@ -7,7 +7,7 @@ class ProposalsController < ApplicationController before_action :authenticate_user!, except: [:index, :show] has_orders %w{hot_score confidence_score created_at most_commented random}, only: :index - has_orders %w{confidence_score created_at}, only: :show + has_orders %w{most_voted newest oldest}, only: :show load_and_authorize_resource respond_to :html, :js diff --git a/app/models/comment.rb b/app/models/comment.rb index bea03a65a..f486850a6 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -22,10 +22,15 @@ class Comment < ActiveRecord::Base scope :for_render, -> { with_hidden.includes(user: :organization) } scope :with_visible_author, -> { joins(:user).where("users.hidden_at IS NULL") } scope :sort_by_flags, -> { order(flags_count: :desc, updated_at: :desc) } - scope :sort_by_confidence_score , -> { order(confidence_score: :desc, created_at: :desc) } - scope :sort_descendants_by_confidence_score , -> { order(confidence_score: :desc, created_at: :asc) } - scope :sort_by_created_at, -> { order(created_at: :desc) } - scope :sort_descendants_by_created_at, -> { order(created_at: :asc) } + + scope :sort_by_most_voted , -> { order(confidence_score: :desc, created_at: :desc) } + scope :sort_descendants_by_most_voted , -> { order(confidence_score: :desc, created_at: :asc) } + + scope :sort_by_newest, -> { order(created_at: :desc) } + scope :sort_descendants_by_newest, -> { order(created_at: :desc) } + + scope :sort_by_oldest, -> { order(created_at: :asc) } + scope :sort_descendants_by_oldest, -> { order(created_at: :asc) } after_create :call_after_commented diff --git a/config/locales/en.yml b/config/locales/en.yml index 715b12d33..2d963f3be 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -241,8 +241,9 @@ en: comments: select_order: "Sort by" orders: - confidence_score: "Most voted" - created_at: "Newest" + most_voted: "Most voted" + newest: "Newest first" + oldest: "Oldest first" form: leave_comment: "Leave your comment" comment_as_moderator: "Comment as moderator" diff --git a/config/locales/es.yml b/config/locales/es.yml index 96ea81c10..34871cce8 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -241,8 +241,9 @@ es: comments: select_order: "Ordenar por" orders: - confidence_score: "Más votados" - created_at: "Más nuevos" + most_voted: "Más votados" + newest: "Más nuevos primero" + oldest: "Más antiguos primero" form: leave_comment: "Deja tu comentario" comment_as_moderator: "Comentar como moderador" diff --git a/spec/features/comments/debates_spec.rb b/spec/features/comments/debates_spec.rb index cd00e98f8..ca9a33eb8 100644 --- a/spec/features/comments/debates_spec.rb +++ b/spec/features/comments/debates_spec.rb @@ -25,15 +25,20 @@ feature 'Commenting debates' do c2 = create(:comment, :with_confidence_score, commentable: debate, cached_votes_up: 10, cached_votes_total: 12, created_at: Time.now - 1) c3 = create(:comment, :with_confidence_score, commentable: debate, cached_votes_up: 1, cached_votes_total: 2, created_at: Time.now) - visit debate_path(debate) + visit debate_path(debate, order: :most_voted) expect(c1.body).to appear_before(c2.body) expect(c2.body).to appear_before(c3.body) - visit debate_path(debate, order: :created_at) + visit debate_path(debate, order: :newest) expect(c3.body).to appear_before(c2.body) expect(c2.body).to appear_before(c1.body) + + visit debate_path(debate, order: :oldest) + + expect(c1.body).to appear_before(c2.body) + expect(c2.body).to appear_before(c3.body) end scenario 'Creation date works differently in roots and in child comments, even when sorting by confidence_score' do @@ -42,14 +47,19 @@ feature 'Commenting debates' do old_child = create(:comment, commentable: debate, parent_id: new_root.id, created_at: Time.now - 10) new_child = create(:comment, commentable: debate, parent_id: new_root.id, created_at: Time.now) - visit debate_path(debate) + visit debate_path(debate, order: :most_voted) expect(new_root.body).to appear_before(old_root.body) expect(old_child.body).to appear_before(new_child.body) - visit debate_path(debate, order: :created_at) + visit debate_path(debate, order: :newest) expect(new_root.body).to appear_before(old_root.body) + expect(new_child.body).to appear_before(old_child.body) + + visit debate_path(debate, order: :oldest) + + expect(old_root.body).to appear_before(new_root.body) expect(old_child.body).to appear_before(new_child.body) end diff --git a/spec/features/comments/proposals_spec.rb b/spec/features/comments/proposals_spec.rb index 90b6f7d02..1c277cf4d 100644 --- a/spec/features/comments/proposals_spec.rb +++ b/spec/features/comments/proposals_spec.rb @@ -25,31 +25,41 @@ feature 'Commenting proposals' do c2 = create(:comment, :with_confidence_score, commentable: proposal, cached_votes_up: 10, cached_votes_total: 12, created_at: Time.now - 1) c3 = create(:comment, :with_confidence_score, commentable: proposal, cached_votes_up: 1, cached_votes_total: 2, created_at: Time.now) - visit proposal_path(proposal) + visit proposal_path(proposal, order: :most_voted) expect(c1.body).to appear_before(c2.body) expect(c2.body).to appear_before(c3.body) - visit proposal_path(proposal, order: :created_at) + visit proposal_path(proposal, order: :newest) expect(c3.body).to appear_before(c2.body) expect(c2.body).to appear_before(c1.body) + + visit proposal_path(proposal, order: :oldest) + + expect(c1.body).to appear_before(c2.body) + expect(c2.body).to appear_before(c3.body) end - scenario 'Creation date works differently in roots and in child comments, even when sorting by confidence_score' do + scenario 'Creation date works differently in roots and in child comments, when sorting by confidence_score' do old_root = create(:comment, commentable: proposal, created_at: Time.now - 10) new_root = create(:comment, commentable: proposal, created_at: Time.now) old_child = create(:comment, commentable: proposal, parent_id: new_root.id, created_at: Time.now - 10) new_child = create(:comment, commentable: proposal, parent_id: new_root.id, created_at: Time.now) - visit proposal_path(proposal) + visit proposal_path(proposal, order: :most_voted) expect(new_root.body).to appear_before(old_root.body) expect(old_child.body).to appear_before(new_child.body) - visit proposal_path(proposal, order: :created_at) + visit proposal_path(proposal, order: :newest) expect(new_root.body).to appear_before(old_root.body) + expect(new_child.body).to appear_before(old_child.body) + + visit proposal_path(proposal, order: :oldest) + + expect(old_root.body).to appear_before(new_root.body) expect(old_child.body).to appear_before(new_child.body) end