From 5dba10c4903cc93a035e764576b56ab690ed6463 Mon Sep 17 00:00:00 2001 From: Marius Balteanu Date: Mon, 20 Jun 2022 17:41:24 +0000 Subject: [PATCH] Merged r21668 and r21669 to 4.2-stable (#33914). git-svn-id: https://svn.redmine.org/redmine/branches/4.2-stable@21671 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/time_entry.rb | 2 +- app/models/time_entry_activity.rb | 10 ++++++++++ test/unit/time_entry_activity_test.rb | 12 ++++++++++++ test/unit/time_entry_test.rb | 13 +++++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/app/models/time_entry.rb b/app/models/time_entry.rb index e72c05117..6867dc95c 100644 --- a/app/models/time_entry.rb +++ b/app/models/time_entry.rb @@ -107,7 +107,7 @@ class TimeEntry < ActiveRecord::Base def initialize(attributes=nil, *args) super if new_record? && self.activity.nil? - if default_activity = TimeEntryActivity.default + if default_activity = TimeEntryActivity.default(self.project) self.activity_id = default_activity.id end self.hours = nil if hours == 0 diff --git a/app/models/time_entry_activity.rb b/app/models/time_entry_activity.rb index f4562a8e1..d988129c9 100644 --- a/app/models/time_entry_activity.rb +++ b/app/models/time_entry_activity.rb @@ -22,6 +22,16 @@ class TimeEntryActivity < Enumeration OptionName = :enumeration_activities + def self.default(project=nil) + default_activity = super() + + if default_activity.nil? || project.nil? || project.activities.blank? || project.activities.include?(default_activity) + return default_activity + end + + project.activities.detect { |activity| activity.parent_id == default_activity.id } + end + def option_name OptionName end diff --git a/test/unit/time_entry_activity_test.rb b/test/unit/time_entry_activity_test.rb index 83cb77f93..88f5b7c56 100644 --- a/test/unit/time_entry_activity_test.rb +++ b/test/unit/time_entry_activity_test.rb @@ -170,4 +170,16 @@ class TimeEntryActivityTest < ActiveSupport::TestCase assert_equal 3, other_parent_activity.reload.position assert_equal other_parent_activity.position, other_project_activity.reload.position end + + def test_default_should_return_default_activity_if_default_activity_is_included_in_the_project_activities + project = Project.find(1) + assert_equal TimeEntryActivity.default(project).id, 10 + end + + def test_default_should_return_project_specific_default_activity_if_default_activity_is_not_included_in_the_project_activities + project = Project.find(1) + project_specific_default_activity = TimeEntryActivity.create!(name: 'Development', parent_id: 10, project_id: project.id, is_default: false) + assert_not_equal TimeEntryActivity.default(project).id, 10 + assert_equal TimeEntryActivity.default(project).id, project_specific_default_activity.id + end end diff --git a/test/unit/time_entry_test.rb b/test/unit/time_entry_test.rb index 9b5bbc4ff..d012ece3b 100644 --- a/test/unit/time_entry_test.rb +++ b/test/unit/time_entry_test.rb @@ -126,6 +126,19 @@ class TimeEntryTest < ActiveSupport::TestCase end end + def test_activity_id_should_default_activity_id + project = Project.find(1) + default_activity = TimeEntryActivity.find(10) + entry = TimeEntry.new(project: project) + assert_equal entry.activity_id, default_activity.id + + # If there are project specific activities + project_specific_default_activity = TimeEntryActivity.create!(name: 'Development', parent_id: 10, project_id: project.id, is_default: false) + entry = TimeEntry.new(project: project) + assert_not_equal entry.activity_id, default_activity.id + assert_equal entry.activity_id, project_specific_default_activity.id + end + def test_should_accept_future_dates entry = TimeEntry.generate entry.spent_on = User.current.today + 1 -- 2.39.5