From 1d62ea3220ecb1558ee01eaf0d74b3e2a69199dd Mon Sep 17 00:00:00 2001 From: evazion Date: Sun, 4 Jun 2017 16:14:55 -0500 Subject: [PATCH] /forum_topics: don't list stickies first in json/atom responses. --- app/controllers/forum_topics_controller.rb | 5 ++++- app/models/forum_topic.rb | 12 +++++++++++- test/functional/forum_topics_controller_test.rb | 12 ++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/app/controllers/forum_topics_controller.rb b/app/controllers/forum_topics_controller.rb index 9ebde347c..70c2c55d8 100644 --- a/app/controllers/forum_topics_controller.rb +++ b/app/controllers/forum_topics_controller.rb @@ -19,8 +19,11 @@ class ForumTopicsController < ApplicationController end def index + params[:search] ||= {} + params[:search][:order] ||= "sticky" if request.format == Mime::HTML + @query = ForumTopic.active.search(params[:search]) - @forum_topics = @query.order("is_sticky DESC, updated_at DESC").paginate(params[:page], :limit => per_page, :search_count => params[:search]) + @forum_topics = @query.paginate(params[:page], :limit => per_page, :search_count => params[:search]) respond_with(@forum_topics) do |format| format.html do diff --git a/app/models/forum_topic.rb b/app/models/forum_topic.rb index b6f7c7f3f..a55c725e1 100644 --- a/app/models/forum_topic.rb +++ b/app/models/forum_topic.rb @@ -68,9 +68,12 @@ class ForumTopic < ActiveRecord::Base where("min_level <= ?", CurrentUser.level) end + def sticky_first + order(is_sticky: :desc, updated_at: :desc) + end + def search(params) q = permitted - return q if params.blank? if params[:id].present? q = q.where(id: params[:id].split(",").map(&:to_i)) @@ -92,6 +95,13 @@ class ForumTopic < ActiveRecord::Base q = q.where("title = ?", params[:title]) end + case params[:order] + when "sticky" + q = q.sticky_first + else + q = q.order(updated_at: :desc) + end + q end end diff --git a/test/functional/forum_topics_controller_test.rb b/test/functional/forum_topics_controller_test.rb index ea12f1e58..61d4b6fde 100644 --- a/test/functional/forum_topics_controller_test.rb +++ b/test/functional/forum_topics_controller_test.rb @@ -74,11 +74,23 @@ class ForumTopicsControllerTest < ActionController::TestCase end context "index action" do + setup do + @topic1 = FactoryGirl.create(:forum_topic, :is_sticky => true, :creator => @user, :original_post_attributes => {:body => "xxx"}) + @topic2 = FactoryGirl.create(:forum_topic, :creator => @user, :original_post_attributes => {:body => "xxx"}) + end + should "list all forum topics" do get :index assert_response :success end + should "not list stickied topics first for JSON responses" do + get :index, {format: :json} + forum_topics = JSON.parse(response.body) + + assert_equal([@topic2.id, @topic1.id, @forum_topic.id], forum_topics.map {|t| t["id"]}) + end + should "render for atom feed" do get :index, {:format => :atom} assert_response :success