Defect #29581 » fix-29581-v3.patch
| app/models/issue_query.rb | ||
|---|---|---|
| 297 | 297 |
# Valid options are :order, :offset, :limit, :include, :conditions |
| 298 | 298 |
def issues(options={})
|
| 299 | 299 |
order_option = [group_by_sort_order, (options[:order] || sort_clause)].flatten.reject(&:blank?) |
| 300 |
# The default order of IssueQuery is issues.id DESC(by IssueQuery#default_sort_criteria) |
|
| 301 |
unless ["#{Issue.table_name}.id ASC", "#{Issue.table_name}.id DESC"].any?{|i| order_option.include?(i)}
|
|
| 302 |
order_option << "#{Issue.table_name}.id DESC"
|
|
| 303 |
end |
|
| 300 | 304 | |
| 301 | 305 |
scope = Issue.visible. |
| 302 | 306 |
joins(:status, :project). |
| ... | ... | |
| 339 | 343 |
# Returns the issues ids |
| 340 | 344 |
def issue_ids(options={})
|
| 341 | 345 |
order_option = [group_by_sort_order, (options[:order] || sort_clause)].flatten.reject(&:blank?) |
| 346 |
# The default order of IssueQuery is issues.id DESC(by IssueQuery#default_sort_criteria) |
|
| 347 |
unless ["#{Issue.table_name}.id ASC", "#{Issue.table_name}.id DESC"].any?{|i| order_option.include?(i)}
|
|
| 348 |
order_option << "#{Issue.table_name}.id DESC"
|
|
| 349 |
end |
|
| 342 | 350 | |
| 343 | 351 |
Issue.visible. |
| 344 | 352 |
joins(:status, :project). |
| app/models/time_entry_query.rb | ||
|---|---|---|
| 148 | 148 |
def results_scope(options={})
|
| 149 | 149 |
order_option = [group_by_sort_order, (options[:order] || sort_clause)].flatten.reject(&:blank?) |
| 150 | 150 | |
| 151 |
order_option << "#{TimeEntry.table_name}.id ASC"
|
|
| 151 | 152 |
base_scope. |
| 152 | 153 |
order(order_option). |
| 153 | 154 |
joins(joins_for_order_statement(order_option.join(',')))
|
| test/unit/query_test.rb | ||
|---|---|---|
| 2329 | 2329 |
query.filters = {'spent_time' => {:operator => '><', :values => ['1', '2']}}
|
| 2330 | 2330 |
assert_equal [3], query.issues.pluck(:id) |
| 2331 | 2331 |
end |
| 2332 | ||
| 2333 |
def test_issues_should_be_in_the_same_order_when_paginating |
|
| 2334 |
q = IssueQuery.new |
|
| 2335 |
q.sort_criteria = {'0' => ['priority', 'desc']}
|
|
| 2336 |
issue_ids = q.issues.pluck(:id) |
|
| 2337 |
paginated_issue_ids = [] |
|
| 2338 |
# Test with a maximum of 2 records per page. |
|
| 2339 |
((q.issue_count / 2) + 1).times do |i| |
|
| 2340 |
paginated_issue_ids += q.issues(:offset => (i * 2), :limit => 2).pluck(:id) |
|
| 2341 |
end |
|
| 2342 | ||
| 2343 |
# Non-paginated issue ids and paginated issue ids should be in the same order. |
|
| 2344 |
assert_equal issue_ids, paginated_issue_ids |
|
| 2345 |
end |
|
| 2332 | 2346 |
end |
| test/unit/time_entry_query_test.rb | ||
|---|---|---|
| 129 | 129 |
query = TimeEntryQuery.new(:project => Project.find(2), :name => '_') |
| 130 | 130 |
assert !query.available_filters.has_key?('project.status')
|
| 131 | 131 |
end |
| 132 | ||
| 133 |
def test_results_scope_should_be_in_the_same_order_when_paginating |
|
| 134 |
4.times { TimeEntry.generate! }
|
|
| 135 |
q = TimeEntryQuery.new |
|
| 136 |
q.sort_criteria = {'0' => ['user', 'asc']}
|
|
| 137 |
time_entry_ids = q.results_scope.pluck(:id) |
|
| 138 |
paginated_time_entry_ids = [] |
|
| 139 |
# Test with a maximum of 2 records per page. |
|
| 140 |
((q.results_scope.count / 2) + 1).times do |i| |
|
| 141 |
paginated_time_entry_ids += q.results_scope.offset((i * 2)).limit(2).pluck(:id) |
|
| 142 |
end |
|
| 143 | ||
| 144 |
# Non-paginated time entry ids and paginated time entry ids should be in the same order. |
|
| 145 |
assert_equal time_entry_ids, paginated_time_entry_ids |
|
| 146 |
end |
|
| 132 | 147 |
end |
- « Previous
- 1
- 2
- 3
- 4
- Next »