summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2011-04-01 13:44:58 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2011-04-01 13:44:58 +0000
commit1cd6a2aa84db83b127cc037021dc6351877790d0 (patch)
treeae3eaa0a3f6d15c62771db779f19f15fce4b1d87 /test
parent122ba564b9c5c475c360e45af51fa92cfe969657 (diff)
downloadredmine-1cd6a2aa84db83b127cc037021dc6351877790d0.tar.gz
redmine-1cd6a2aa84db83b127cc037021dc6351877790d0.zip
Adds User and Version custom field format that can be used to reference a project member or version in custom fields (#2096).
These new field formats are available for project, issue, version and time entry custom fields. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5272 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'test')
-rw-r--r--test/functional/custom_fields_controller_test.rb32
-rw-r--r--test/integration/issues_test.rb75
-rw-r--r--test/unit/custom_field_user_format_test.rb65
3 files changed, 164 insertions, 8 deletions
diff --git a/test/functional/custom_fields_controller_test.rb b/test/functional/custom_fields_controller_test.rb
index d1e251b5c..5e665ec13 100644
--- a/test/functional/custom_fields_controller_test.rb
+++ b/test/functional/custom_fields_controller_test.rb
@@ -1,5 +1,5 @@
# Redmine - project management software
-# Copyright (C) 2006-2009 Jean-Philippe Lang
+# Copyright (C) 2006-2011 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -31,6 +31,31 @@ class CustomFieldsControllerTest < ActionController::TestCase
@request.session[:user_id] = 1
end
+ def test_get_new_issue_custom_field
+ get :new, :type => 'IssueCustomField'
+ assert_response :success
+ assert_template 'new'
+ assert_tag :select,
+ :attributes => {:name => 'custom_field[field_format]'},
+ :child => {
+ :tag => 'option',
+ :attributes => {:value => 'user'},
+ :content => 'User'
+ }
+ assert_tag :select,
+ :attributes => {:name => 'custom_field[field_format]'},
+ :child => {
+ :tag => 'option',
+ :attributes => {:value => 'version'},
+ :content => 'Version'
+ }
+ end
+
+ def test_get_new_with_invalid_custom_field_class_should_redirect_to_list
+ get :new, :type => 'UnknownCustomField'
+ assert_redirected_to '/custom_fields'
+ end
+
def test_post_new_list_custom_field
assert_difference 'CustomField.count' do
post :new, :type => "IssueCustomField",
@@ -53,9 +78,4 @@ class CustomFieldsControllerTest < ActionController::TestCase
assert_equal ["0.1", "0.2"], field.possible_values
assert_equal 1, field.trackers.size
end
-
- def test_invalid_custom_field_class_should_redirect_to_list
- get :new, :type => 'UnknownCustomField'
- assert_redirected_to '/custom_fields'
- end
end
diff --git a/test/integration/issues_test.rb b/test/integration/issues_test.rb
index b6955d252..a640d1c01 100644
--- a/test/integration/issues_test.rb
+++ b/test/integration/issues_test.rb
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008 Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -126,4 +126,75 @@ class IssuesTest < ActionController::IntegrationTest
:attributes => { :href => '/projects/ecookbook/issues?page=2' }
end
+
+ def test_issue_with_user_custom_field
+ @field = IssueCustomField.create!(:name => 'Tester', :field_format => 'user', :is_for_all => true, :trackers => Tracker.all)
+ Role.anonymous.add_permission! :add_issues, :edit_issues
+ users = Project.find(1).users
+ tester = users.first
+
+ # Issue form
+ get '/projects/ecookbook/issues/new'
+ assert_response :success
+ assert_tag :select,
+ :attributes => {:name => "issue[custom_field_values][#{@field.id}]"},
+ :children => {:count => (users.size + 1)}, # +1 for blank value
+ :child => {
+ :tag => 'option',
+ :attributes => {:value => tester.id.to_s},
+ :content => tester.name
+ }
+
+ # Create issue
+ assert_difference 'Issue.count' do
+ post '/projects/ecookbook/issues',
+ :issue => {
+ :tracker_id => '1',
+ :priority_id => '4',
+ :subject => 'Issue with user custom field',
+ :custom_field_values => {@field.id.to_s => users.first.id.to_s}
+ }
+ end
+ issue = Issue.first(:order => 'id DESC')
+ assert_response 302
+
+ # Issue view
+ follow_redirect!
+ assert_tag :th,
+ :content => /Tester/,
+ :sibling => {
+ :tag => 'td',
+ :content => tester.name
+ }
+ assert_tag :select,
+ :attributes => {:name => "issue[custom_field_values][#{@field.id}]"},
+ :children => {:count => (users.size + 1)}, # +1 for blank value
+ :child => {
+ :tag => 'option',
+ :attributes => {:value => tester.id.to_s, :selected => 'selected'},
+ :content => tester.name
+ }
+
+ # Update issue
+ new_tester = users[1]
+ assert_difference 'Journal.count' do
+ put "/issues/#{issue.id}",
+ :notes => 'Updating custom field',
+ :issue => {
+ :custom_field_values => {@field.id.to_s => new_tester.id.to_s}
+ }
+ end
+ assert_response 302
+
+ # Issue view
+ follow_redirect!
+ assert_tag :content => 'Tester',
+ :ancestor => {:tag => 'ul', :attributes => {:class => /details/}},
+ :sibling => {
+ :content => tester.name,
+ :sibling => {
+ :content => new_tester.name
+ }
+ }
+ end
end
diff --git a/test/unit/custom_field_user_format_test.rb b/test/unit/custom_field_user_format_test.rb
new file mode 100644
index 000000000..085e4c73a
--- /dev/null
+++ b/test/unit/custom_field_user_format_test.rb
@@ -0,0 +1,65 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011 Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+require File.expand_path('../../test_helper', __FILE__)
+
+class CustomFieldUserFormatTest < ActiveSupport::TestCase
+ fixtures :custom_fields, :projects, :members, :users, :member_roles, :trackers, :issues
+
+ def setup
+ @field = IssueCustomField.create!(:name => 'Tester', :field_format => 'user')
+ end
+
+ def test_possible_values_with_no_arguments
+ assert_equal [], @field.possible_values
+ assert_equal [], @field.possible_values(nil)
+ end
+
+ def test_possible_values_with_project_resource
+ project = Project.find(1)
+ possible_values = @field.possible_values(project.issues.first)
+ assert possible_values.any?
+ assert_equal project.users.sort.collect(&:id).map(&:to_s), possible_values
+ end
+
+ def test_possible_values_options_with_no_arguments
+ assert_equal [], @field.possible_values_options
+ assert_equal [], @field.possible_values_options(nil)
+ end
+
+ def test_possible_values_options_with_project_resource
+ project = Project.find(1)
+ possible_values_options = @field.possible_values_options(project.issues.first)
+ assert possible_values_options.any?
+ assert_equal project.users.sort.map {|u| [u.name, u.id.to_s]}, possible_values_options
+ end
+
+ def test_cast_blank_value
+ assert_equal nil, @field.cast_value(nil)
+ assert_equal nil, @field.cast_value("")
+ end
+
+ def test_cast_valid_value
+ user = @field.cast_value("2")
+ assert_kind_of User, user
+ assert_equal User.find(2), user
+ end
+
+ def test_cast_invalid_value
+ assert_equal nil, @field.cast_value("187")
+ end
+end