소스 검색

Auto watch issues on issue creation (#38238).

Patch by Felix Schäfer.


git-svn-id: https://svn.redmine.org/redmine/trunk@22115 e93f8b46-1217-0410-a6f0-8f06a7374b81
tags/5.1.0
Go MAEDA 1 년 전
부모
커밋
9a625f2610
5개의 변경된 파일50개의 추가작업 그리고 2개의 파일을 삭제
  1. 13
    0
      app/models/issue.rb
  2. 1
    1
      app/models/user_preference.rb
  3. 1
    0
      config/locales/en.yml
  4. 34
    0
      test/unit/issue_test.rb
  5. 1
    1
      test/unit/user_preference_test.rb

+ 13
- 0
app/models/issue.rb 파일 보기

@@ -121,7 +121,11 @@ class Issue < ActiveRecord::Base
# Should be after_create but would be called before previous after_save callbacks
after_save :after_create_from_copy, :create_parent_issue_journal
after_destroy :update_parent_attributes, :create_parent_issue_journal
# add_auto_watcher needs to run before sending notifications, thus it needs
# to be added after send_notification (after_ callbacks are run in inverse order)
# https://api.rubyonrails.org/v5.2.3/classes/ActiveSupport/Callbacks/ClassMethods.html#method-i-set_callback
after_create_commit :send_notification
after_create_commit :add_auto_watcher

# Returns a SQL conditions string used to find all issues visible by the specified user
def self.visible_condition(user, options={})
@@ -2020,6 +2024,15 @@ class Issue < ActiveRecord::Base
end
end

def add_auto_watcher
if author &&
author.allowed_to?(:add_issue_watchers, project) &&
author.pref.auto_watch_on?('issue_created') &&
self.watcher_user_ids.exclude?(author.id)
self.set_watcher(author, true)
end
end

def send_notification
if notify? && Setting.notified_events.include?('issue_added')
Mailer.deliver_issue_add(self)

+ 1
- 1
app/models/user_preference.rb 파일 보기

@@ -44,7 +44,7 @@ class UserPreference < ActiveRecord::Base

TEXTAREA_FONT_OPTIONS = ['monospace', 'proportional']
DEFAULT_TOOLBAR_LANGUAGE_OPTIONS = %w[c cpp csharp css diff go groovy html java javascript objc perl php python r ruby sass scala shell sql swift xml yaml]
AUTO_WATCH_ON_OPTIONS = ['issue_contributed_to']
AUTO_WATCH_ON_OPTIONS = %w[issue_created issue_contributed_to]

def initialize(attributes=nil, *args)
super

+ 1
- 0
config/locales/en.yml 파일 보기

@@ -961,6 +961,7 @@ en:
label_optional_description: Optional description
label_add_another_file: Add another file
label_auto_watch_on: Auto watch
label_auto_watch_on_issue_created: Issues I created
label_auto_watch_on_issue_contributed_to: Issues I contributed to
label_preferences: Preferences
label_chronological_order: In chronological order

+ 34
- 0
test/unit/issue_test.rb 파일 보기

@@ -3445,6 +3445,40 @@ class IssueTest < ActiveSupport::TestCase
assert_equal [5], issue2.filter_projects_scope('').ids.sort
end

def test_create_should_add_watcher
user = User.first
user.pref.auto_watch_on=['issue_created']
user.pref.save
issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => user.id, :subject => 'test_create_should_add_watcher')

assert_difference 'Watcher.count', 1 do
assert_equal true, issue.save
end
end

def test_create_should_add_author_watcher_only_once
user = User.first
user.pref.auto_watch_on=['issue_created']
user.pref.save
issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => user.id, :subject => 'test_create_should_add_watcher')
issue.watcher_user_ids = [user.id]

assert_difference 'Watcher.count', 1 do
assert_equal true, issue.save
end
end

def test_create_should_not_add_watcher
user = User.first
user.pref.auto_watch_on=[]
user.pref.save
issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => user.id, :subject => 'test_create_should_not_add_watcher')

assert_no_difference 'Watcher.count' do
assert_equal true, issue.save
end
end

def test_like_should_escape_query
issue = Issue.generate!(:subject => "asdf")
r = Issue.like('as_f')

+ 1
- 1
test/unit/user_preference_test.rb 파일 보기

@@ -59,7 +59,7 @@ class UserPreferenceTest < ActiveSupport::TestCase

def test_auto_watch_on_should_default_to_setting
preference = UserPreference.new
assert_equal ['issue_contributed_to'], preference.auto_watch_on
assert_equal %w[issue_created issue_contributed_to], preference.auto_watch_on
end

def test_create

Loading…
취소
저장