summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2010-12-10 10:48:16 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2010-12-10 10:48:16 +0000
commit3e3315c103f232655ac8553fcd476792f7d24691 (patch)
treeeb8eb970f48425895296f1ed74107d022422ddeb
parent0e19aa4362a0524d900044fc9dc69e177337eca0 (diff)
downloadredmine-3e3315c103f232655ac8553fcd476792f7d24691.tar.gz
redmine-3e3315c103f232655ac8553fcd476792f7d24691.zip
Support for updating custom fields using the received custom_fields array (#6345, #6403).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4481 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/issue.rb1
-rw-r--r--test/fixtures/issues.yml2
-rw-r--r--test/integration/api_test/issues_test.rb17
-rw-r--r--vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb15
4 files changed, 34 insertions, 1 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 0b08f0c16..1cd1b92f0 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -229,6 +229,7 @@ class Issue < ActiveRecord::Base
done_ratio
estimated_hours
custom_field_values
+ custom_fields
lock_version
) unless const_defined?(:SAFE_ATTRIBUTES)
diff --git a/test/fixtures/issues.yml b/test/fixtures/issues.yml
index eec014ff4..15fb5b271 100644
--- a/test/fixtures/issues.yml
+++ b/test/fixtures/issues.yml
@@ -54,7 +54,7 @@ issues_003:
author_id: 2
status_id: 1
start_date: <%= 1.day.from_now.to_date.to_s(:db) %>
- due_date: <%= 40.day.ago.to_date.to_s(:db) %>
+ due_date: <%= 40.day.from_now.to_date.to_s(:db) %>
root_id: 3
lft: 1
rgt: 2
diff --git a/test/integration/api_test/issues_test.rb b/test/integration/api_test/issues_test.rb
index c57b51eea..a5281e5eb 100644
--- a/test/integration/api_test/issues_test.rb
+++ b/test/integration/api_test/issues_test.rb
@@ -284,6 +284,23 @@ class ApiTest::IssuesTest < ActionController::IntegrationTest
end
+ context "PUT /issues/3.xml with custom fields" do
+ setup do
+ @parameters = {:issue => {:custom_fields => [{'id' => '1', 'value' => 'PostgreSQL' }, {'id' => '2', 'value' => '150'}]}}
+ @headers = { :authorization => credentials('jsmith') }
+ end
+
+ should "update custom fields" do
+ assert_no_difference('Issue.count') do
+ put '/issues/3.xml', @parameters, @headers
+ end
+
+ issue = Issue.find(3)
+ assert_equal '150', issue.custom_value_for(2).value
+ assert_equal 'PostgreSQL', issue.custom_value_for(1).value
+ end
+ end
+
context "PUT /issues/6.xml with failed update" do
setup do
@parameters = {:issue => {:subject => ''}}
diff --git a/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb b/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb
index 03b36f698..9ed9fe376 100644
--- a/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb
+++ b/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb
@@ -50,6 +50,21 @@ module Redmine
:order => 'position')
end
+ # Sets the values of the object's custom fields
+ # values is an array like [{'id' => 1, 'value' => 'foo'}, {'id' => 2, 'value' => 'bar'}]
+ def custom_fields=(values)
+ values_to_hash = values.inject({}) do |hash, v|
+ v = v.stringify_keys
+ if v['id'] && v.has_key?('value')
+ hash[v['id']] = v['value']
+ end
+ hash
+ end
+ self.custom_field_values = values_to_hash
+ end
+
+ # Sets the values of the object's custom fields
+ # values is a hash like {'1' => 'foo', 2 => 'bar'}
def custom_field_values=(values)
@custom_field_values_changed = true
values = values.stringify_keys