Project

General

Profile

Defect #29838 » 0001-fix-logging-time-via-a-commit-message-for-project-sp.patch

revised and squashed patch - Jens Krämer, 2020-02-11 07:45

View differences:

app/models/changeset.rb
259 259
      :comments => l(:text_time_logged_by_changeset, :value => text_tag(issue.project),
260 260
                     :locale => Setting.default_language)
261 261
      )
262
    time_entry.activity = log_time_activity unless log_time_activity.nil?
262
    if activity = issue.project.commit_logtime_activity
263
      time_entry.activity = activity
264
    end
263 265

  
264 266
    unless time_entry.save
265 267
      logger.warn("TimeEntry could not be created by changeset #{id}: #{time_entry.errors.full_messages}") if logger
......
267 269
    time_entry
268 270
  end
269 271

  
270
  def log_time_activity
271
    if Setting.commit_logtime_activity_id.to_i > 0
272
      TimeEntryActivity.find_by_id(Setting.commit_logtime_activity_id.to_i)
273
    end
274
  end
275

  
276 272
  def split_comments
277 273
    comments =~ /\A(.+?)\r?\n(.*)$/m
278 274
    @short_comments = $1 || comments
app/models/project.rb
295 295
    end
296 296
  end
297 297

  
298
  # returns the time log activity to be used when logging time via a changeset
299
  def commit_logtime_activity
300
    activity_id = Setting.commit_logtime_activity_id.to_i
301
    if activity_id > 0
302
      activities
303
        .where('id = ? OR parent_id = ?', activity_id, activity_id)
304
        .first
305
    end
306
  end
307

  
298 308
  # Returns a :conditions SQL string that can be used to find the issues associated with this project.
299 309
  #
300 310
  # Examples:
test/unit/changeset_test.rb
75 75
    assert_equal [1, 2], c.issue_ids.sort
76 76
  end
77 77

  
78
  def test_project_specific_activity
79
    project = Project.find 1
80
    activity = TimeEntryActivity.find 9
81

  
82
    Setting.commit_ref_keywords = '*'
83
    Setting.commit_logtime_enabled = '1'
84
    Setting.commit_logtime_activity_id = activity.id
85

  
86
    project_specific_activity = TimeEntryActivity.create!(
87
      name: activity.name,
88
      parent_id: activity.id,
89
      position: activity.position,
90
      project_id: project.id
91
    )
92

  
93
    c = Changeset.new(:repository   => project.repository,
94
                      :committed_on => 24.hours.ago,
95
                      :comments     => "Worked on this issue #1 @8h",
96
                      :revision     => '520',
97
                      :user         => User.find(2))
98
    assert_difference 'TimeEntry.count' do
99
      c.scan_comment_for_issue_ids
100
    end
101

  
102
    time = TimeEntry.order('id desc').first
103
    assert_equal project_specific_activity, time.activity
104
  end
105

  
78 106
  def test_ref_keywords_any_with_timelog
79 107
    Setting.commit_ref_keywords = '*'
80 108
    Setting.commit_logtime_enabled = '1'
109
    Setting.commit_logtime_activity_id = 9
81 110

  
82 111
    {
83 112
      '2' => 2.0,
......
113 142
        "@#{syntax} should be logged as #{expected_hours} hours but was #{time.hours}"
114 143
      )
115 144
      assert_equal Date.yesterday, time.spent_on
116
      assert time.activity.is_default?
145
      assert_equal 9, time.activity_id
117 146
      assert(
118 147
        time.comments.include?('r520'),
119 148
        "r520 was expected in time_entry comments: #{time.comments}"
(1-1/2)