# Valid options are :order, :offset, :limit, :include, :conditions
def issues(options={})
order_option = [group_by_sort_order, (options[:order] || sort_clause)].flatten.reject(&:blank?)
+ # The default order of IssueQuery is issues.id DESC(by IssueQuery#default_sort_criteria)
+ unless ["#{Issue.table_name}.id ASC", "#{Issue.table_name}.id DESC"].any?{|i| order_option.include?(i)}
+ order_option << "#{Issue.table_name}.id DESC"
+ end
scope = Issue.visible.
joins(:status, :project).
# Returns the issues ids
def issue_ids(options={})
order_option = [group_by_sort_order, (options[:order] || sort_clause)].flatten.reject(&:blank?)
+ # The default order of IssueQuery is issues.id DESC(by IssueQuery#default_sort_criteria)
+ unless ["#{Issue.table_name}.id ASC", "#{Issue.table_name}.id DESC"].any?{|i| order_option.include?(i)}
+ order_option << "#{Issue.table_name}.id DESC"
+ end
Issue.visible.
joins(:status, :project).
def results_scope(options={})
order_option = [group_by_sort_order, (options[:order] || sort_clause)].flatten.reject(&:blank?)
+ order_option << "#{TimeEntry.table_name}.id ASC"
base_scope.
order(order_option).
joins(joins_for_order_statement(order_option.join(',')))
query.filters = {'spent_time' => {:operator => '><', :values => ['1', '2']}}
assert_equal [3], query.issues.pluck(:id)
end
+
+ def test_issues_should_be_in_the_same_order_when_paginating
+ q = IssueQuery.new
+ q.sort_criteria = {'0' => ['priority', 'desc']}
+ issue_ids = q.issues.pluck(:id)
+ paginated_issue_ids = []
+ # Test with a maximum of 2 records per page.
+ ((q.issue_count / 2) + 1).times do |i|
+ paginated_issue_ids += q.issues(:offset => (i * 2), :limit => 2).pluck(:id)
+ end
+
+ # Non-paginated issue ids and paginated issue ids should be in the same order.
+ assert_equal issue_ids, paginated_issue_ids
+ end
end
query = TimeEntryQuery.new(:project => Project.find(2), :name => '_')
assert !query.available_filters.has_key?('project.status')
end
+
+ def test_results_scope_should_be_in_the_same_order_when_paginating
+ 4.times { TimeEntry.generate! }
+ q = TimeEntryQuery.new
+ q.sort_criteria = {'0' => ['user', 'asc']}
+ time_entry_ids = q.results_scope.pluck(:id)
+ paginated_time_entry_ids = []
+ # Test with a maximum of 2 records per page.
+ ((q.results_scope.count / 2) + 1).times do |i|
+ paginated_time_entry_ids += q.results_scope.offset((i * 2)).limit(2).pluck(:id)
+ end
+
+ # Non-paginated time entry ids and paginated time entry ids should be in the same order.
+ assert_equal time_entry_ids, paginated_time_entry_ids
+ end
end