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
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user