Commit 09cbe95b20f87ac95dd84a3a033e3f0a1b9aa5a5
1 parent
6579de07
Exists in
spb-stable
and in
3 other branches
Add note for assignee changes
Change to username per @PixnBits suggestion
Showing
3 changed files
with
48 additions
and
0 deletions
Show diff stats
app/models/note.rb
... | ... | @@ -82,6 +82,18 @@ class Note < ActiveRecord::Base |
82 | 82 | }, without_protection: true) |
83 | 83 | end |
84 | 84 | |
85 | + def create_assignee_change_note(noteable, project, author, assignee) | |
86 | + body = assignee.nil? ? '_Assignee removed_' : "_Reassigned to @#{assignee.username}_" | |
87 | + | |
88 | + create({ | |
89 | + noteable: noteable, | |
90 | + project: project, | |
91 | + author: author, | |
92 | + note: body, | |
93 | + system: true | |
94 | + }, without_protection: true) | |
95 | + end | |
96 | + | |
85 | 97 | def discussions_from_notes(notes) |
86 | 98 | discussion_ids = [] |
87 | 99 | discussions = [] | ... | ... |
app/observers/issue_observer.rb
... | ... | @@ -19,6 +19,7 @@ class IssueObserver < BaseObserver |
19 | 19 | def after_update(issue) |
20 | 20 | if issue.is_being_reassigned? |
21 | 21 | notification.reassigned_issue(issue, current_user) |
22 | + create_assignee_note(issue) | |
22 | 23 | end |
23 | 24 | |
24 | 25 | issue.notice_added_references(issue.project, current_user) |
... | ... | @@ -32,6 +33,10 @@ class IssueObserver < BaseObserver |
32 | 33 | Note.create_status_change_note(issue, issue.project, current_user, issue.state, current_commit) |
33 | 34 | end |
34 | 35 | |
36 | + def create_assignee_note(issue) | |
37 | + Note.create_assignee_change_note(issue, issue.project, current_user, issue.assignee) | |
38 | + end | |
39 | + | |
35 | 40 | def execute_hooks(issue) |
36 | 41 | issue.project.execute_hooks(issue.to_hook_data, :issue_hooks) |
37 | 42 | end | ... | ... |
spec/models/note_spec.rb
... | ... | @@ -180,6 +180,31 @@ describe Note do |
180 | 180 | end |
181 | 181 | end |
182 | 182 | |
183 | + describe '#create_assignee_change_note' do | |
184 | + let(:project) { create(:project) } | |
185 | + let(:thing) { create(:issue, project: project) } | |
186 | + let(:author) { create(:user) } | |
187 | + let(:assignee) { create(:user) } | |
188 | + | |
189 | + subject { Note.create_assignee_change_note(thing, project, author, assignee) } | |
190 | + | |
191 | + context 'creates and saves a Note' do | |
192 | + it { should be_a Note } | |
193 | + its(:id) { should_not be_nil } | |
194 | + end | |
195 | + | |
196 | + its(:noteable) { should == thing } | |
197 | + its(:project) { should == thing.project } | |
198 | + its(:author) { should == author } | |
199 | + its(:note) { should =~ /Reassigned to @#{assignee.username}/ } | |
200 | + | |
201 | + context 'assignee is removed' do | |
202 | + let(:assignee) { nil } | |
203 | + | |
204 | + its(:note) { should =~ /Assignee removed/ } | |
205 | + end | |
206 | + end | |
207 | + | |
183 | 208 | describe '#create_cross_reference_note' do |
184 | 209 | let(:project) { create(:project_with_code) } |
185 | 210 | let(:author) { create(:user) } |
... | ... | @@ -252,6 +277,7 @@ describe Note do |
252 | 277 | let(:issue) { create(:issue, project: project) } |
253 | 278 | let(:other) { create(:issue, project: project) } |
254 | 279 | let(:author) { create(:user) } |
280 | + let(:assignee) { create(:user) } | |
255 | 281 | |
256 | 282 | it 'should recognize user-supplied notes as non-system' do |
257 | 283 | @note = create(:note_on_issue) |
... | ... | @@ -267,6 +293,11 @@ describe Note do |
267 | 293 | @note = Note.create_cross_reference_note(issue, other, author, project) |
268 | 294 | @note.should be_system |
269 | 295 | end |
296 | + | |
297 | + it 'should identify assignee-change notes as system notes' do | |
298 | + @note = Note.create_assignee_change_note(issue, project, author, assignee) | |
299 | + @note.should be_system | |
300 | + end | |
270 | 301 | end |
271 | 302 | |
272 | 303 | describe :authorization do | ... | ... |