Adds support for multiselect custom fields (#1189).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8721 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -164,4 +164,26 @@ class CustomFieldTest < ActiveSupport::TestCase
|
||||
assert f.valid_field_value?('5')
|
||||
assert !f.valid_field_value?('6abc')
|
||||
end
|
||||
|
||||
def test_multi_field_validation
|
||||
f = CustomField.new(:field_format => 'list', :multiple => 'true', :possible_values => ['value1', 'value2'])
|
||||
|
||||
assert f.valid_field_value?(nil)
|
||||
assert f.valid_field_value?('')
|
||||
assert f.valid_field_value?([])
|
||||
assert f.valid_field_value?([nil])
|
||||
assert f.valid_field_value?([''])
|
||||
|
||||
assert f.valid_field_value?('value2')
|
||||
assert !f.valid_field_value?('abc')
|
||||
|
||||
assert f.valid_field_value?(['value2'])
|
||||
assert !f.valid_field_value?(['abc'])
|
||||
|
||||
assert f.valid_field_value?(['', 'value2'])
|
||||
assert !f.valid_field_value?(['', 'abc'])
|
||||
|
||||
assert f.valid_field_value?(['value1', 'value2'])
|
||||
assert !f.valid_field_value?(['value1', 'abc'])
|
||||
end
|
||||
end
|
||||
|
||||
@@ -921,6 +921,36 @@ class IssueTest < ActiveSupport::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
def test_journalized_multi_custom_field
|
||||
field = IssueCustomField.create!(:name => 'filter', :field_format => 'list', :is_filter => true, :is_for_all => true,
|
||||
:tracker_ids => [1], :possible_values => ['value1', 'value2', 'value3'], :multiple => true)
|
||||
|
||||
issue = Issue.create!(:project_id => 1, :tracker_id => 1, :subject => 'Test', :author_id => 1)
|
||||
|
||||
assert_difference 'Journal.count' do
|
||||
assert_difference 'JournalDetail.count' do
|
||||
issue.init_journal(User.first)
|
||||
issue.custom_field_values = {field.id => ['value1']}
|
||||
issue.save!
|
||||
end
|
||||
assert_difference 'JournalDetail.count' do
|
||||
issue.init_journal(User.first)
|
||||
issue.custom_field_values = {field.id => ['value1', 'value2']}
|
||||
issue.save!
|
||||
end
|
||||
assert_difference 'JournalDetail.count', 2 do
|
||||
issue.init_journal(User.first)
|
||||
issue.custom_field_values = {field.id => ['value3', 'value2']}
|
||||
issue.save!
|
||||
end
|
||||
assert_difference 'JournalDetail.count', 2 do
|
||||
issue.init_journal(User.first)
|
||||
issue.custom_field_values = {field.id => nil}
|
||||
issue.save!
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_description_eol_should_be_normalized
|
||||
i = Issue.new(:description => "CR \r LF \n CRLF \r\n")
|
||||
assert_equal "CR \r\n LF \r\n CRLF \r\n", i.description
|
||||
|
||||
+63
-1
@@ -173,6 +173,44 @@ class QueryTest < ActiveSupport::TestCase
|
||||
assert_equal 2, issues.first.id
|
||||
end
|
||||
|
||||
def test_operator_is_on_multi_list_custom_field
|
||||
f = IssueCustomField.create!(:name => 'filter', :field_format => 'list', :is_filter => true, :is_for_all => true,
|
||||
:possible_values => ['value1', 'value2', 'value3'], :multiple => true)
|
||||
CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => 'value1')
|
||||
CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => 'value2')
|
||||
CustomValue.create!(:custom_field => f, :customized => Issue.find(3), :value => 'value1')
|
||||
|
||||
query = Query.new(:name => '_')
|
||||
query.add_filter("cf_#{f.id}", '=', ['value1'])
|
||||
issues = find_issues_with_query(query)
|
||||
assert_equal [1, 3], issues.map(&:id).sort
|
||||
|
||||
query = Query.new(:name => '_')
|
||||
query.add_filter("cf_#{f.id}", '=', ['value2'])
|
||||
issues = find_issues_with_query(query)
|
||||
assert_equal [1], issues.map(&:id).sort
|
||||
end
|
||||
|
||||
def test_operator_is_not_on_multi_list_custom_field
|
||||
f = IssueCustomField.create!(:name => 'filter', :field_format => 'list', :is_filter => true, :is_for_all => true,
|
||||
:possible_values => ['value1', 'value2', 'value3'], :multiple => true)
|
||||
CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => 'value1')
|
||||
CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => 'value2')
|
||||
CustomValue.create!(:custom_field => f, :customized => Issue.find(3), :value => 'value1')
|
||||
|
||||
query = Query.new(:name => '_')
|
||||
query.add_filter("cf_#{f.id}", '!', ['value1'])
|
||||
issues = find_issues_with_query(query)
|
||||
assert !issues.map(&:id).include?(1)
|
||||
assert !issues.map(&:id).include?(3)
|
||||
|
||||
query = Query.new(:name => '_')
|
||||
query.add_filter("cf_#{f.id}", '!', ['value2'])
|
||||
issues = find_issues_with_query(query)
|
||||
assert !issues.map(&:id).include?(1)
|
||||
assert issues.map(&:id).include?(3)
|
||||
end
|
||||
|
||||
def test_operator_greater_than
|
||||
query = Query.new(:project => Project.find(1), :name => '_')
|
||||
query.add_filter('done_ratio', '>=', ['40'])
|
||||
@@ -492,7 +530,18 @@ class QueryTest < ActiveSupport::TestCase
|
||||
|
||||
def test_groupable_columns_should_include_custom_fields
|
||||
q = Query.new
|
||||
assert q.groupable_columns.detect {|c| c.is_a? QueryCustomFieldColumn}
|
||||
column = q.groupable_columns.detect {|c| c.name == :cf_1}
|
||||
assert_not_nil column
|
||||
assert_kind_of QueryCustomFieldColumn, column
|
||||
end
|
||||
|
||||
def test_groupable_columns_should_not_include_multi_custom_fields
|
||||
field = CustomField.find(1)
|
||||
field.update_attribute :multiple, true
|
||||
|
||||
q = Query.new
|
||||
column = q.groupable_columns.detect {|c| c.name == :cf_1}
|
||||
assert_nil column
|
||||
end
|
||||
|
||||
def test_grouped_with_valid_column
|
||||
@@ -527,6 +576,19 @@ class QueryTest < ActiveSupport::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
def test_sortable_columns_should_include_custom_field
|
||||
q = Query.new
|
||||
assert q.sortable_columns['cf_1']
|
||||
end
|
||||
|
||||
def test_sortable_columns_should_not_include_multi_custom_field
|
||||
field = CustomField.find(1)
|
||||
field.update_attribute :multiple, true
|
||||
|
||||
q = Query.new
|
||||
assert !q.sortable_columns['cf_1']
|
||||
end
|
||||
|
||||
def test_default_sort
|
||||
q = Query.new
|
||||
assert_equal [], q.sort_criteria
|
||||
|
||||
Reference in New Issue
Block a user