Project

General

Profile

Defect #43524 » patch-issue-43524-fix-project-sort-by-parent.diff

Akihiro Kubota, 2026-05-05 07:14

View differences:

app/models/project_query.rb
39 39
    QueryColumn.new(:short_description, :sortable => "#{Project.table_name}.description", :caption => :field_description),
40 40
    QueryColumn.new(:homepage, :sortable => "#{Project.table_name}.homepage"),
41 41
    QueryColumn.new(:identifier, :sortable => "#{Project.table_name}.identifier"),
42
    QueryColumn.new(:parent_id, :sortable => "#{Project.table_name}.lft ASC", :default_order => 'desc', :caption => :field_parent),
42
    QueryColumn.new(:parent_id, :sortable => "#{Project.table_name}.parent_id", :default_order => 'desc', :caption => :field_parent),
43 43
    QueryColumn.new(:is_public, :sortable => "#{Project.table_name}.is_public", :groupable => true),
44 44
    QueryColumn.new(:created_on, :sortable => "#{Project.table_name}.created_on", :default_order => 'desc'),
45 45
    QueryColumn.new(:updated_on, :sortable => "#{Project.table_name}.updated_on", :default_order => 'desc'),
test/unit/project_query_test.rb
141 141
      assert_equal scope_without, scope_with
142 142
    end
143 143
  end
144

  
145
  def test_sort_by_parent_id_asc_should_not_include_fixed_direction
146
    q = ProjectQuery.new
147
    q.sort_criteria = [['parent_id', 'asc']]
148
    sort_clause = q.sort_clause
149
    assert_not_nil sort_clause
150
    # sort clause must respect the user-chosen direction (ASC), not a hardcoded one
151
    assert_includes sort_clause.map(&:to_s).join(' '), 'ASC'
152
    assert_not_includes sort_clause.map(&:to_s).join(' '), 'lft'
153
  end
154

  
155
  def test_sort_by_parent_id_desc_should_apply_desc_direction
156
    q = ProjectQuery.new
157
    q.sort_criteria = [['parent_id', 'desc']]
158
    sort_clause = q.sort_clause
159
    assert_not_nil sort_clause
160
    # DESC direction must be applied (previously it was always fixed to ASC via lft ASC)
161
    assert_includes sort_clause.map(&:to_s).join(' '), 'DESC'
162
  end
144 163
end
(1-1/6)