diff options
-rw-r--r-- | app/models/note.rb | 16 | ||||
-rw-r--r-- | app/services/issues/base_service.rb | 4 | ||||
-rw-r--r-- | app/services/issues/update_service.rb | 4 | ||||
-rw-r--r-- | app/services/merge_requests/base_service.rb | 4 | ||||
-rw-r--r-- | app/services/merge_requests/update_service.rb | 4 | ||||
-rw-r--r-- | app/services/notification_service.rb | 2 | ||||
-rw-r--r-- | spec/features/issues_spec.rb | 2 |
7 files changed, 34 insertions, 2 deletions
diff --git a/app/models/note.rb b/app/models/note.rb index 278c957af0e..dc8b968c3d2 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -90,6 +90,22 @@ class Note < ActiveRecord::Base create(note_options, without_protection: true) end + def create_milestone_change_note(noteable, project, author, milestone) + body = if milestone.nil? + '_Milestone removed_' + else + "_Milestone changed to #{milestone.title}_" + end + + create({ + noteable: noteable, + project: project, + author: author, + note: body, + system: true + }, without_protection: true) + end + def create_assignee_change_note(noteable, project, author, assignee) body = assignee.nil? ? '_Assignee removed_' : "_Reassigned to @#{assignee.username}_" diff --git a/app/services/issues/base_service.rb b/app/services/issues/base_service.rb index 2e1e1f7e0f0..eac774210ae 100644 --- a/app/services/issues/base_service.rb +++ b/app/services/issues/base_service.rb @@ -10,5 +10,9 @@ module Issues def execute_hooks(issue) issue.project.execute_hooks(issue.to_hook_data, :issue_hooks) end + + def create_milestone_note(issue) + Note.create_milestone_change_note(issue, issue.project, current_user, issue.milestone) + end end end diff --git a/app/services/issues/update_service.rb b/app/services/issues/update_service.rb index b562c401fd4..f69370beddd 100644 --- a/app/services/issues/update_service.rb +++ b/app/services/issues/update_service.rb @@ -13,6 +13,10 @@ module Issues if params.present? && issue.update_attributes(params) issue.reset_events_cache + if issue.previous_changes.include?('milestone_id') + create_milestone_note(issue) + end + if issue.previous_changes.include?('assignee_id') notification_service.reassigned_issue(issue, current_user) create_assignee_note(issue) diff --git a/app/services/merge_requests/base_service.rb b/app/services/merge_requests/base_service.rb index c77f5d664ef..2907f3587da 100644 --- a/app/services/merge_requests/base_service.rb +++ b/app/services/merge_requests/base_service.rb @@ -16,5 +16,9 @@ module MergeRequests merge_request.project.execute_hooks(merge_request.to_hook_data, :merge_request_hooks) end end + + def create_milestone_note(merge_request) + Note.create_milestone_change_note(merge_request, merge_request.project, current_user, merge_request.milestone) + end end end diff --git a/app/services/merge_requests/update_service.rb b/app/services/merge_requests/update_service.rb index bbedca6ffd6..60d470a0606 100644 --- a/app/services/merge_requests/update_service.rb +++ b/app/services/merge_requests/update_service.rb @@ -22,6 +22,10 @@ module MergeRequests if params.present? && merge_request.update_attributes(params) merge_request.reset_events_cache + if merge_request.previous_changes.include?('milestone_id') + create_milestone_note(merge_request) + end + if merge_request.previous_changes.include?('assignee_id') notification_service.reassigned_merge_request(merge_request, current_user) create_assignee_note(merge_request) diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index 06140c5afeb..3547552df8e 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -254,7 +254,7 @@ class NotificationService # Remove users with disabled notifications from array # Also remove duplications and nil recipients def reject_muted_users(users, project = nil) - users = users.compact.uniq + users = users.to_a.compact.uniq users.reject do |user| next user.notification.disabled? unless project diff --git a/spec/features/issues_spec.rb b/spec/features/issues_spec.rb index e62517ad710..d7f3f3a302c 100644 --- a/spec/features/issues_spec.rb +++ b/spec/features/issues_spec.rb @@ -248,7 +248,7 @@ describe "Issues", feature: true do find('.edit-issue.inline-update').select(milestone.title, from: 'issue_milestone_id') click_button 'Update Issue' - page.should have_content "Milestone" + page.should have_content "Milestone changed to #{milestone.title}" page.has_select?('issue_assignee_id', :selected => milestone.title) end end |