diff --git a/app/models/project_query.rb b/app/models/project_query.rb index 4464eb155..2153c6bb3 100644 --- a/app/models/project_query.rb +++ b/app/models/project_query.rb @@ -39,7 +39,7 @@ class ProjectQuery < Query QueryColumn.new(:short_description, :sortable => "#{Project.table_name}.description", :caption => :field_description), QueryColumn.new(:homepage, :sortable => "#{Project.table_name}.homepage"), QueryColumn.new(:identifier, :sortable => "#{Project.table_name}.identifier"), - QueryColumn.new(:parent_id, :sortable => "#{Project.table_name}.lft ASC", :default_order => 'desc', :caption => :field_parent), + QueryColumn.new(:parent_id, :sortable => "#{Project.table_name}.lft", :default_order => 'asc', :caption => :field_parent), QueryColumn.new(:is_public, :sortable => "#{Project.table_name}.is_public", :groupable => true), QueryColumn.new(:created_on, :sortable => "#{Project.table_name}.created_on", :default_order => 'desc'), QueryColumn.new(:updated_on, :sortable => "#{Project.table_name}.updated_on", :default_order => 'desc'), diff --git a/test/functional/projects_controller_test.rb b/test/functional/projects_controller_test.rb index 496ab7dee..572940a36 100644 --- a/test/functional/projects_controller_test.rb +++ b/test/functional/projects_controller_test.rb @@ -129,7 +129,7 @@ class ProjectsControllerTest < Redmine::ControllerTest @request.session[:user_id] = 1 get :index, :params => { :c => ['name', 'short_description'], - :sort => 'parent_id:desc,lft:desc', + :sort => 'parent_id:asc', :display_type => 'list' } assert_response :success diff --git a/test/unit/project_query_test.rb b/test/unit/project_query_test.rb index 2b8c0ea8d..e3f9d55d5 100644 --- a/test/unit/project_query_test.rb +++ b/test/unit/project_query_test.rb @@ -141,4 +141,26 @@ class ProjectQueryTest < ActiveSupport::TestCase assert_equal scope_without, scope_with end end + + def test_sort_by_parent_id_asc_should_apply_asc_direction + q = ProjectQuery.new + q.sort_criteria = [['parent_id', 'asc']] + sort_clause = q.sort_clause + assert_not_nil sort_clause + joined = sort_clause.map(&:to_s).join(' ') + # sort clause must use lft with ASC (user-chosen direction), not a hardcoded lft ASC + assert_match(/lft ASC/i, joined) + assert_no_match(/lft DESC/i, joined) + end + + def test_sort_by_parent_id_desc_should_apply_desc_direction + q = ProjectQuery.new + q.sort_criteria = [['parent_id', 'desc']] + sort_clause = q.sort_clause + assert_not_nil sort_clause + joined = sort_clause.map(&:to_s).join(' ') + # DESC direction must be applied (previously it was always fixed to ASC via lft ASC) + assert_match(/lft DESC/i, joined) + assert_no_match(/lft ASC/i, joined) + end end