Defect #29581 » fix-29581.patch
app/models/issue_query.rb | ||
---|---|---|
273 | 273 |
# Valid options are :order, :offset, :limit, :include, :conditions |
274 | 274 |
def issues(options={}) |
275 | 275 |
order_option = [group_by_sort_order, (options[:order] || sort_clause)].flatten.reject(&:blank?) |
276 |
order_option += ['issues.id ASC'] unless order_option.include?("issues.id DESC") || order_option.include?("issues.id ASC") |
|
276 | 277 | |
277 | 278 |
scope = Issue.visible. |
278 | 279 |
joins(:status, :project). |
... | ... | |
315 | 316 |
# Returns the issues ids |
316 | 317 |
def issue_ids(options={}) |
317 | 318 |
order_option = [group_by_sort_order, (options[:order] || sort_clause)].flatten.reject(&:blank?) |
319 |
order_option += ['issues.id ASC'] unless order_option.include?("issues.id DESC") || order_option.include?("issues.id ASC") |
|
318 | 320 | |
319 | 321 |
Issue.visible. |
320 | 322 |
joins(:status, :project). |
app/models/time_entry_query.rb | ||
---|---|---|
136 | 136 |
def results_scope(options={}) |
137 | 137 |
order_option = [group_by_sort_order, (options[:order] || sort_clause)].flatten.reject(&:blank?) |
138 | 138 | |
139 |
order_option += ['time_entries.id ASC'] |
|
139 | 140 |
base_scope. |
140 | 141 |
order(order_option). |
141 | 142 |
joins(joins_for_order_statement(order_option.join(','))) |
test/unit/query_test.rb | ||
---|---|---|
2184 | 2184 | |
2185 | 2185 |
assert_equal ['1','2','3','4','5','6'], query.available_filters['status_id'][:values].map(&:second) |
2186 | 2186 |
end |
2187 | ||
2188 |
def test_issues_should_be_in_the_same_order_when_paginating |
|
2189 |
q = IssueQuery.new |
|
2190 |
q.sort_criteria = {'0' => ['priority', 'desc']} |
|
2191 |
issue_ids = q.issues.pluck(:id) |
|
2192 |
paginated_issue_ids = [] |
|
2193 |
# Test with a maximum of 2 records per page. |
|
2194 |
((q.issue_count / 2) + 1).times do |i| |
|
2195 |
paginated_issue_ids += q.issues(:offset => (i * 2), :limit => 2).pluck(:id) |
|
2196 |
end |
|
2197 | ||
2198 |
# Non-paginated issue ids and paginated issue ids should be in the same order. |
|
2199 |
assert_equal issue_ids, paginated_issue_ids |
|
2200 |
end |
|
2187 | 2201 |
end |
test/unit/time_entry_query_test.rb | ||
---|---|---|
107 | 107 |
query = TimeEntryQuery.new(:project => nil, :name => '_') |
108 | 108 |
assert !query.available_filters.has_key?('issue.category_id') |
109 | 109 |
end |
110 | ||
111 |
def test_results_scope_should_be_in_the_same_order_when_paginating |
|
112 |
4.times { TimeEntry.generate! } |
|
113 |
q = TimeEntryQuery.new |
|
114 |
q.sort_criteria = {'0' => ['user', 'asc']} |
|
115 |
time_entry_ids = q.results_scope.pluck(:id) |
|
116 |
paginated_time_entry_ids = [] |
|
117 |
# Test with a maximum of 2 records per page. |
|
118 |
((q.results_scope.count / 2) + 1).times do |i| |
|
119 |
paginated_time_entry_ids += q.results_scope.offset((i * 2)).limit(2).pluck(:id) |
|
120 |
end |
|
121 | ||
122 |
# Non-paginated time entry ids and paginated time entry ids should be in the same order. |
|
123 |
assert_equal time_entry_ids, paginated_time_entry_ids |
|
124 |
end |
|
110 | 125 |
end |