summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/functional/custom_field_enumerations_controller_test.rb111
-rw-r--r--test/integration/routing/custom_fields_test.rb7
-rw-r--r--test/unit/lib/redmine/field_format/enumeration_format_test.rb86
3 files changed, 204 insertions, 0 deletions
diff --git a/test/functional/custom_field_enumerations_controller_test.rb b/test/functional/custom_field_enumerations_controller_test.rb
new file mode 100644
index 000000000..6bcddac5e
--- /dev/null
+++ b/test/functional/custom_field_enumerations_controller_test.rb
@@ -0,0 +1,111 @@
+# Redmine - project management software
+# Copyright (C) 2006-2015 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 CustomFieldEnumerationsControllerTest < ActionController::TestCase
+ fixtures :users, :email_addresses
+
+ def setup
+ @request.session[:user_id] = 1
+ @field = GroupCustomField.create!(:name => 'List', :field_format => 'enumeration', :is_required => false)
+ @foo = CustomFieldEnumeration.new(:name => 'Foo')
+ @bar = CustomFieldEnumeration.new(:name => 'Bar')
+ @field.enumerations << @foo
+ @field.enumerations << @bar
+ end
+
+ def test_index
+ get :index, :custom_field_id => @field.id
+ assert_response :success
+ assert_template 'index'
+ end
+
+ def test_create
+ assert_difference 'CustomFieldEnumeration.count' do
+ post :create, :custom_field_id => @field.id, :custom_field_enumeration => { :name => 'Baz' }
+ assert_redirected_to "/custom_fields/#{@field.id}/enumerations"
+ end
+
+ assert_equal 3, @field.reload.enumerations.count
+ enum = @field.enumerations.last
+ assert_equal 'Baz', enum.name
+ assert_equal true, enum.active
+ assert_equal 3, enum.position
+ end
+
+ def test_create_xhr
+ assert_difference 'CustomFieldEnumeration.count' do
+ xhr :post, :create, :custom_field_id => @field.id, :custom_field_enumeration => { :name => 'Baz' }
+ assert_response :success
+ end
+ end
+
+ def test_update_each
+ put :update_each, :custom_field_id => @field.id, :custom_field_enumerations => {
+ @bar.id => {:position => "1", :name => "Baz", :active => "1"},
+ @foo.id => {:position => "2", :name => "Foo", :active => "0"}
+ }
+ assert_response 302
+
+ @bar.reload
+ assert_equal "Baz", @bar.name
+ assert_equal true, @bar.active
+ assert_equal 1, @bar.position
+
+ @foo.reload
+ assert_equal "Foo", @foo.name
+ assert_equal false, @foo.active
+ assert_equal 2, @foo.position
+ end
+
+ def test_destroy
+ assert_difference 'CustomFieldEnumeration.count', -1 do
+ delete :destroy, :custom_field_id => @field.id, :id => @foo.id
+ assert_redirected_to "/custom_fields/#{@field.id}/enumerations"
+ end
+
+ assert_equal 1, @field.reload.enumerations.count
+ enum = @field.enumerations.last
+ assert_equal 'Bar', enum.name
+ end
+
+ def test_destroy_enumeration_in_use_should_display_destroy_form
+ group = Group.generate!
+ group.custom_field_values = {@field.id.to_s => @foo.id.to_s}
+ group.save!
+
+ assert_no_difference 'CustomFieldEnumeration.count' do
+ delete :destroy, :custom_field_id => @field.id, :id => @foo.id
+ assert_response 200
+ assert_template 'destroy'
+ end
+ end
+
+ def test_destroy_enumeration_in_use_should_destroy_and_reassign_values
+ group = Group.generate!
+ group.custom_field_values = {@field.id.to_s => @foo.id.to_s}
+ group.save!
+
+ assert_difference 'CustomFieldEnumeration.count', -1 do
+ delete :destroy, :custom_field_id => @field.id, :id => @foo.id, :reassign_to_id => @bar.id
+ assert_response 302
+ end
+
+ assert_equal @bar.id.to_s, group.reload.custom_field_value(@field)
+ end
+end
diff --git a/test/integration/routing/custom_fields_test.rb b/test/integration/routing/custom_fields_test.rb
index e0fccb7c6..0fbb10b14 100644
--- a/test/integration/routing/custom_fields_test.rb
+++ b/test/integration/routing/custom_fields_test.rb
@@ -27,4 +27,11 @@ class RoutingCustomFieldsTest < Redmine::RoutingTest
should_route 'PUT /custom_fields/2' => 'custom_fields#update', :id => '2'
should_route 'DELETE /custom_fields/2' => 'custom_fields#destroy', :id => '2'
end
+
+ def test_custom_field_enumerations
+ should_route 'GET /custom_fields/3/enumerations' => 'custom_field_enumerations#index', :custom_field_id => '3'
+ should_route 'POST /custom_fields/3/enumerations' => 'custom_field_enumerations#create', :custom_field_id => '3'
+ should_route 'PUT /custom_fields/3/enumerations' => 'custom_field_enumerations#update_each', :custom_field_id => '3'
+ should_route 'DELETE /custom_fields/3/enumerations/6' => 'custom_field_enumerations#destroy', :custom_field_id => '3', :id => '6'
+ end
end
diff --git a/test/unit/lib/redmine/field_format/enumeration_format_test.rb b/test/unit/lib/redmine/field_format/enumeration_format_test.rb
new file mode 100644
index 000000000..961957ff8
--- /dev/null
+++ b/test/unit/lib/redmine/field_format/enumeration_format_test.rb
@@ -0,0 +1,86 @@
+# Redmine - project management software
+# Copyright (C) 2006-2015 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__)
+require 'redmine/field_format'
+
+class Redmine::EnumerationFieldFormatTest < ActionView::TestCase
+ include ApplicationHelper
+
+ def setup
+ @field = IssueCustomField.create!(:name => 'List', :field_format => 'enumeration', :is_required => false)
+ @foo = CustomFieldEnumeration.new(:name => 'Foo')
+ @bar = CustomFieldEnumeration.new(:name => 'Bar')
+ @field.enumerations << @foo
+ @field.enumerations << @bar
+ end
+
+ def test_edit_tag_should_contain_possible_values
+ value = CustomFieldValue.new(:custom_field => @field, :customized => Issue.new)
+
+ tag = @field.format.edit_tag(self, 'id', 'name', value)
+ assert_select_in tag, 'select' do
+ assert_select 'option', 3
+ assert_select 'option[value=""]'
+ assert_select 'option[value=?]', @foo.id.to_s, :text => 'Foo'
+ assert_select 'option[value=?]', @bar.id.to_s, :text => 'Bar'
+ end
+ end
+
+ def test_edit_tag_should_select_current_value
+ value = CustomFieldValue.new(:custom_field => @field, :customized => Issue.new, :value => @bar.id.to_s)
+
+ tag = @field.format.edit_tag(self, 'id', 'name', value)
+ assert_select_in tag, 'select' do
+ assert_select 'option[selected=selected]', 1
+ assert_select 'option[value=?][selected=selected]', @bar.id.to_s, :text => 'Bar'
+ end
+ end
+
+ def test_edit_tag_with_multiple_should_select_current_values
+ @field.multiple = true
+ @field.save!
+ value = CustomFieldValue.new(:custom_field => @field, :customized => Issue.new, :value => [@foo.id.to_s, @bar.id.to_s])
+
+ tag = @field.format.edit_tag(self, 'id', 'name', value)
+ assert_select_in tag, 'select[multiple=multiple]' do
+ assert_select 'option[selected=selected]', 2
+ assert_select 'option[value=?][selected=selected]', @foo.id.to_s, :text => 'Foo'
+ assert_select 'option[value=?][selected=selected]', @bar.id.to_s, :text => 'Bar'
+ end
+ end
+
+ def test_edit_tag_with_check_box_style_should_contain_possible_values
+ @field.edit_tag_style = 'check_box'
+ @field.save!
+ value = CustomFieldValue.new(:custom_field => @field, :customized => Issue.new)
+
+ tag = @field.format.edit_tag(self, 'id', 'name', value)
+ assert_select_in tag, 'span' do
+ assert_select 'input[type=radio]', 3
+ assert_select 'label', :text => '(none)' do
+ assert_select 'input[value=""]'
+ end
+ assert_select 'label', :text => 'Foo' do
+ assert_select 'input[value=?]', @foo.id.to_s
+ end
+ assert_select 'label', :text => 'Bar' do
+ assert_select 'input[value=?]', @bar.id.to_s
+ end
+ end
+ end
+end