summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGo MAEDA <maeda@farend.jp>2021-12-21 06:42:47 +0000
committerGo MAEDA <maeda@farend.jp>2021-12-21 06:42:47 +0000
commitfde1e18b3aedda0a695bbd5212a82ab086cba441 (patch)
treeedf118773557e6e47c932b2ec9581f31bfa5ea4c
parent81e25404aacd0cfe0ecb9331e7edec4e76fd584d (diff)
downloadredmine-fde1e18b3aedda0a695bbd5212a82ab086cba441.tar.gz
redmine-fde1e18b3aedda0a695bbd5212a82ab086cba441.zip
Saving time tracking activities without any change may turn a system activity into a project activity (#36318).
Patch by Yuichi HARADA. git-svn-id: http://svn.redmine.org/redmine/trunk@21319 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/enumeration.rb2
-rw-r--r--test/functional/project_enumerations_controller_test.rb20
-rw-r--r--test/unit/time_entry_activity_test.rb29
3 files changed, 47 insertions, 4 deletions
diff --git a/app/models/enumeration.rb b/app/models/enumeration.rb
index 5f0e023ed..534d8239e 100644
--- a/app/models/enumeration.rb
+++ b/app/models/enumeration.rb
@@ -117,7 +117,7 @@ class Enumeration < ActiveRecord::Base
# Does the +new+ Hash have the same custom values as the previous Enumeration?
def self.same_custom_values?(new, previous)
previous.custom_field_values.each do |custom_value|
- if custom_value.value != new["custom_field_values"][custom_value.custom_field_id.to_s]
+ if custom_value.to_s != new["custom_field_values"][custom_value.custom_field_id.to_s].to_s
return false
end
end
diff --git a/test/functional/project_enumerations_controller_test.rb b/test/functional/project_enumerations_controller_test.rb
index 3c4f44f32..b82dc5092 100644
--- a/test/functional/project_enumerations_controller_test.rb
+++ b/test/functional/project_enumerations_controller_test.rb
@@ -93,6 +93,26 @@ class ProjectEnumerationsControllerTest < Redmine::ControllerTest
assert_nil project.time_entry_activities.find_by_name("QA"), "Custom QA activity created when it wasn't modified"
end
+ def test_update_should_not_create_project_specific_activities_when_setting_empty_value_in_custom_field_with_default_value_of_nil
+ system_activity = TimeEntryActivity.find(9) # Design
+ custom_field_value = system_activity.custom_field_values.detect{|cfv| cfv.custom_field.id == 7}
+ assert_nil custom_field_value.value
+
+ assert_no_difference 'TimeEntryActivity.count' do
+ @request.session[:user_id] = 2 # manager
+ put(
+ :update,
+ :params => {
+ :project_id => 1,
+ :enumerations => {
+ "9" => {"parent_id" => "9", "custom_field_values" => {"7" => ""}, "active" => "1"}
+ }
+ }
+ )
+ assert_response :redirect
+ end
+ end
+
def test_update_will_update_project_specific_activities
@request.session[:user_id] = 2 # manager
diff --git a/test/unit/time_entry_activity_test.rb b/test/unit/time_entry_activity_test.rb
index 67e925850..7953a7cee 100644
--- a/test/unit/time_entry_activity_test.rb
+++ b/test/unit/time_entry_activity_test.rb
@@ -144,7 +144,7 @@ class TimeEntryActivityTest < ActiveSupport::TestCase
parent_activity.id.to_s => {
'parent_id' => parent_activity.id.to_s,
'active' => '0',
- 'custom_field_values' => {'7' => ''}
+ 'custom_field_values' => {'7' => '1'}
}
}
)
@@ -158,7 +158,7 @@ class TimeEntryActivityTest < ActiveSupport::TestCase
other_parent_activity.id.to_s => {
'parent_id' => other_parent_activity.id.to_s,
'active' => '0',
- 'custom_field_values' => {'7' => ''}
+ 'custom_field_values' => {'7' => '1'}
}
}
)
@@ -179,7 +179,7 @@ class TimeEntryActivityTest < ActiveSupport::TestCase
parent_activity.id.to_s => {
'parent_id' => parent_activity.id.to_s,
'active' => '0',
- 'custom_field_values' => {'7' => ''}
+ 'custom_field_values' => {'7' => '1'}
}
}
)
@@ -196,4 +196,27 @@ class TimeEntryActivityTest < ActiveSupport::TestCase
assert_equal 'Design2', project_activity.reload.name
assert_equal 'Design3', parent_activity.reload.name
end
+
+ def test_project_activity_should_not_be_created_if_no_custom_value_is_changed
+ system_activity = TimeEntryActivity.find(9) # Design
+ assert_equal true, system_activity.active
+
+ custom_field_value = system_activity.custom_field_values.detect{|cfv| cfv.custom_field.id == 7}
+ assert_nil custom_field_value.value
+
+ project = Project.find(1)
+ assert_equal 0, project.time_entry_activities.count
+
+ assert_no_difference 'TimeEntryActivity.count' do
+ project.update_or_create_time_entry_activities(
+ {
+ '9' => {
+ 'parent_id' => '9',
+ 'active' => '1',
+ 'custom_field_values' => {'7' => ''}
+ }
+ }
+ )
+ end
+ end
end