Enumerations can now have custom fields defined on them. #4077
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2945 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Vendored
+14
-1
@@ -87,4 +87,17 @@ custom_fields_006:
|
||||
field_format: float
|
||||
default_value: ""
|
||||
editable: true
|
||||
|
||||
custom_fields_007:
|
||||
name: Billable
|
||||
min_length: 0
|
||||
regexp: ""
|
||||
is_for_all: false
|
||||
is_filter: true
|
||||
type: TimeEntryActivityCustomField
|
||||
max_length: 0
|
||||
possible_values: ""
|
||||
id: 7
|
||||
is_required: false
|
||||
field_format: bool
|
||||
default_value: ""
|
||||
editable: true
|
||||
|
||||
Vendored
+6
-1
@@ -83,4 +83,9 @@ custom_values_014:
|
||||
customized_id: 5
|
||||
id: 14
|
||||
value: "-7.6"
|
||||
|
||||
custom_values_015:
|
||||
customized_type: TimeEntryActivity
|
||||
custom_field_id: 7
|
||||
customized_id: 10
|
||||
id: 15
|
||||
value: true
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
require File.dirname(__FILE__) + '/../test_helper'
|
||||
|
||||
class EnumerationTest < ActiveSupport::TestCase
|
||||
fixtures :enumerations, :issues
|
||||
fixtures :enumerations, :issues, :custom_fields, :custom_values
|
||||
|
||||
def setup
|
||||
end
|
||||
@@ -81,4 +81,9 @@ class EnumerationTest < ActiveSupport::TestCase
|
||||
assert_nil Issue.find(:first, :conditions => {:priority_id => 4})
|
||||
assert_equal 5, Enumeration.find(6).objects_count
|
||||
end
|
||||
|
||||
def test_should_be_customizable
|
||||
assert Enumeration.included_modules.include?(Redmine::Acts::Customizable::InstanceMethods)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -32,5 +32,54 @@ class TimeEntryActivityTest < ActiveSupport::TestCase
|
||||
def test_option_name
|
||||
assert_equal :enumeration_activities, TimeEntryActivity.new.option_name
|
||||
end
|
||||
|
||||
def test_create_with_custom_field
|
||||
field = TimeEntryActivityCustomField.find_by_name('Billable')
|
||||
e = TimeEntryActivity.new(:name => 'Custom Data')
|
||||
e.custom_field_values = {field.id => "1"}
|
||||
assert e.save
|
||||
|
||||
e.reload
|
||||
assert_equal "1", e.custom_value_for(field).value
|
||||
end
|
||||
|
||||
def test_create_without_required_custom_field_should_fail
|
||||
field = TimeEntryActivityCustomField.find_by_name('Billable')
|
||||
field.update_attribute(:is_required, true)
|
||||
|
||||
e = TimeEntryActivity.new(:name => 'Custom Data')
|
||||
assert !e.save
|
||||
assert_equal I18n.translate('activerecord.errors.messages.invalid'), e.errors.on(:custom_values)
|
||||
end
|
||||
|
||||
def test_create_with_required_custom_field_should_succeed
|
||||
field = TimeEntryActivityCustomField.find_by_name('Billable')
|
||||
field.update_attribute(:is_required, true)
|
||||
|
||||
e = TimeEntryActivity.new(:name => 'Custom Data')
|
||||
e.custom_field_values = {field.id => "1"}
|
||||
assert e.save
|
||||
end
|
||||
|
||||
def test_update_issue_with_required_custom_field_change
|
||||
field = TimeEntryActivityCustomField.find_by_name('Billable')
|
||||
field.update_attribute(:is_required, true)
|
||||
|
||||
e = TimeEntryActivity.find(10)
|
||||
assert e.available_custom_fields.include?(field)
|
||||
# No change to custom field, record can be saved
|
||||
assert e.save
|
||||
# Blanking custom field, save should fail
|
||||
e.custom_field_values = {field.id => ""}
|
||||
assert !e.save
|
||||
assert e.errors.on(:custom_values)
|
||||
|
||||
# Update custom field to valid value, save should succeed
|
||||
e.custom_field_values = {field.id => "0"}
|
||||
assert e.save
|
||||
e.reload
|
||||
assert_equal "0", e.custom_value_for(field).value
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user