From 4bef21cd7ae284c6d9c843ecc15cbb6a8c7c1ddc Mon Sep 17 00:00:00 2001 From: Jens Kraemer Date: Wed, 8 Feb 2023 11:21:25 +0800 Subject: [PATCH] fix import of user references in time entry custom fields --- app/models/time_entry_import.rb | 8 ++++++++ test/unit/time_entry_import_test.rb | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/app/models/time_entry_import.rb b/app/models/time_entry_import.rb index 1659e6efa8..3505a4d64c 100644 --- a/app/models/time_entry_import.rb +++ b/app/models/time_entry_import.rb @@ -116,8 +116,10 @@ class TimeEntryImport < Import if issue_id = row_value(row, 'issue_id').presence attributes[:issue_id] = issue_id + object.project = issue_project(issue_id) else attributes[:project_id] = project.id + object.project = project end attributes['custom_field_values'] = object.custom_field_values.inject({}) do |h, v| @@ -137,4 +139,10 @@ class TimeEntryImport < Import object.send(:safe_attributes=, attributes, user) object end + + def issue_project(issue_id) + if issue_project_id = Issue.where(id: issue_id).limit(1).pluck(:project_id).first + (@projects_cache ||= {})[issue_project_id] ||= allowed_target_projects.find_by_id(issue_project_id) + end + end end diff --git a/test/unit/time_entry_import_test.rb b/test/unit/time_entry_import_test.rb index 3766f12cb7..f2feb275c2 100644 --- a/test/unit/time_entry_import_test.rb +++ b/test/unit/time_entry_import_test.rb @@ -187,6 +187,33 @@ class TimeEntryImportTest < ActiveSupport::TestCase assert_equal 1, fourth.project_id end + def test_imports_custom_field_with_user_format + cf = TimeEntryCustomField.create! name: 'User Field', field_format: 'user' + import = generate_import + import.settings = { + 'separator' => ';', 'wrapper' => '"', 'encoding' => 'UTF-8', + 'mapping' => { + 'project_id' => '1', + 'activity' => 'value:10', + 'issue_id' => '1', + 'spent_on' => '2', + 'hours' => '3', + 'comments' => '4', + 'user' => '7', + "cf_#{cf.id}" => '7' + } + } + import.save! + first, second, third, fourth = new_records(TimeEntry, 4) {import.run} + jsmith = User.find_by_login 'jsmith' + dlopper = User.find_by_login 'dlopper' + + assert_equal dlopper.id, third.custom_values.where(custom_field: cf.id).first.value.to_i + assert_equal jsmith.id, fourth.custom_values.where(custom_field: cf.id).first.value.to_i + assert_equal jsmith.id, first.custom_values.where(custom_field: cf.id).first.value.to_i + assert_equal jsmith.id, second.custom_values.where(custom_field: cf.id).first.value.to_i + end + protected def generate_import(fixture_name='import_time_entries.csv') -- 2.39.0