Redmine 4.1.7
This commit is contained in:
parent
55458d3479
commit
3ca3c37487
103 changed files with 2426 additions and 431 deletions
|
@ -1126,6 +1126,21 @@ class QueryTest < ActiveSupport::TestCase
|
|||
assert_equal [1, 3, 7, 8], find_issues_with_query(query).map(&:id).uniq.sort
|
||||
end
|
||||
|
||||
def test_filter_on_fixed_version_status_respects_sharing
|
||||
issue = Issue.generate!(:project_id => 1, :fixed_version_id => 7)
|
||||
|
||||
filter_name = "fixed_version.status"
|
||||
|
||||
query = IssueQuery.new(:name => '_', :project => Project.find(1))
|
||||
assert_include filter_name, query.available_filters.keys
|
||||
query.filters = {filter_name => {:operator => '=', :values => ['open']}}
|
||||
assert_include issue, find_issues_with_query(query)
|
||||
|
||||
query = IssueQuery.new(:name => '_', :project => Project.find(1))
|
||||
query.filters = {filter_name => {:operator => '=', :values => ['closed']}}
|
||||
assert_not_includes find_issues_with_query(query), issue
|
||||
end
|
||||
|
||||
def test_filter_on_version_custom_field
|
||||
field = IssueCustomField.generate!(:field_format => 'version', :is_filter => true)
|
||||
issue = Issue.generate!(:project_id => 1, :tracker_id => 1, :custom_field_values => {field.id.to_s => '2'})
|
||||
|
@ -1451,6 +1466,19 @@ class QueryTest < ActiveSupport::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_available_filters_as_json_should_not_include_duplicate_assigned_to_id_values
|
||||
set_language_if_valid 'en'
|
||||
user = User.find_by_login 'dlopper'
|
||||
with_current_user User.find(1) do
|
||||
q = IssueQuery.new
|
||||
q.filters = {"assigned_to_id" => {:operator => '=', :values => user.id.to_s}}
|
||||
|
||||
filters = q.available_filters_as_json
|
||||
assert_not_include [user.name, user.id.to_s], filters['assigned_to_id']['values']
|
||||
assert_include [user.name, user.id.to_s, 'active'], filters['assigned_to_id']['values']
|
||||
end
|
||||
end
|
||||
|
||||
def test_available_filters_as_json_should_include_missing_author_id_values
|
||||
user = User.generate!
|
||||
with_current_user User.find(1) do
|
||||
|
@ -1630,6 +1658,16 @@ class QueryTest < ActiveSupport::TestCase
|
|||
assert !q.sortable_columns['cf_1']
|
||||
end
|
||||
|
||||
def test_sortable_should_return_false_for_multi_custom_field
|
||||
field = CustomField.find(1)
|
||||
field.update_attribute :multiple, true
|
||||
|
||||
q = IssueQuery.new
|
||||
|
||||
field_column = q.available_columns.detect {|c| c.name==:cf_1}
|
||||
assert !field_column.sortable?
|
||||
end
|
||||
|
||||
def test_default_sort
|
||||
q = IssueQuery.new
|
||||
assert_equal [['id', 'desc']], q.sort_criteria
|
||||
|
@ -1800,6 +1838,37 @@ class QueryTest < ActiveSupport::TestCase
|
|||
assert_include "cf_#{field.id}".to_sym, q.available_totalable_columns.map(&:name)
|
||||
end
|
||||
|
||||
def test_available_totalable_columns_should_sort_in_position_order_for_custom_field
|
||||
ProjectCustomField.delete_all
|
||||
cf_pos3 = ProjectCustomField.generate!(:position => 3, :is_for_all => true, :field_format => 'int')
|
||||
cf_pos4 = ProjectCustomField.generate!(:position => 4, :is_for_all => true, :field_format => 'float')
|
||||
cf_pos1 = ProjectCustomField.generate!(:position => 1, :is_for_all => true, :field_format => 'float')
|
||||
cf_pos2 = ProjectCustomField.generate!(:position => 2, :is_for_all => true, :field_format => 'int')
|
||||
q = ProjectQuery.new
|
||||
custom_field_columns = q.available_totalable_columns.select{|column| column.is_a?(QueryCustomFieldColumn)}
|
||||
assert_equal [cf_pos1, cf_pos2, cf_pos3, cf_pos4], custom_field_columns.collect(&:custom_field)
|
||||
|
||||
IssueCustomField.delete_all
|
||||
cf_pos3 = IssueCustomField.generate!(:position => 3, :is_for_all => true, :field_format => 'int')
|
||||
cf_pos4 = IssueCustomField.generate!(:position => 4, :is_for_all => true, :field_format => 'float')
|
||||
cf_pos1 = IssueCustomField.generate!(:position => 1, :is_for_all => true, :field_format => 'float')
|
||||
cf_pos2 = IssueCustomField.generate!(:position => 2, :is_for_all => true, :field_format => 'int')
|
||||
q = IssueQuery.new
|
||||
custom_field_columns = q.available_totalable_columns.select{|column| column.is_a?(QueryCustomFieldColumn)}
|
||||
assert_equal [cf_pos1, cf_pos2, cf_pos3, cf_pos4], custom_field_columns.collect(&:custom_field)
|
||||
|
||||
ProjectCustomField.delete_all
|
||||
IssueCustomField.delete_all
|
||||
TimeEntryCustomField.delete_all
|
||||
cf_pos3 = TimeEntryCustomField.generate!(:position => 3, :is_for_all => true, :field_format => 'int')
|
||||
cf_pos4 = TimeEntryCustomField.generate!(:position => 4, :is_for_all => true, :field_format => 'float')
|
||||
cf_pos1 = TimeEntryCustomField.generate!(:position => 1, :is_for_all => true, :field_format => 'float')
|
||||
cf_pos2 = TimeEntryCustomField.generate!(:position => 2, :is_for_all => true, :field_format => 'int')
|
||||
q = TimeEntryQuery.new
|
||||
custom_field_columns = q.available_totalable_columns.select{|column| column.is_a?(QueryCustomFieldColumn)}
|
||||
assert_equal [cf_pos1, cf_pos2, cf_pos3, cf_pos4], custom_field_columns.collect(&:custom_field)
|
||||
end
|
||||
|
||||
def test_total_for_estimated_hours
|
||||
Issue.delete_all
|
||||
Issue.generate!(:estimated_hours => 5.5)
|
||||
|
@ -2370,6 +2439,17 @@ class QueryTest < ActiveSupport::TestCase
|
|||
ActiveRecord::Base.default_timezone = :local # restore Redmine default
|
||||
end
|
||||
|
||||
def test_project_statement_with_closed_subprojects
|
||||
project = Project.find(1)
|
||||
project.descendants.each(&:close)
|
||||
|
||||
with_settings :display_subprojects_issues => '1' do
|
||||
query = IssueQuery.new(:name => '_', :project => project)
|
||||
statement = query.project_statement
|
||||
assert_equal "projects.lft >= #{project.lft} AND projects.rgt <= #{project.rgt}", statement
|
||||
end
|
||||
end
|
||||
|
||||
def test_filter_on_subprojects
|
||||
query = IssueQuery.new(:name => '_', :project => Project.find(1))
|
||||
filter_name = "subproject_id"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue