##// END OF EJS Templates
Fixed that IssueRelation should not be responsible for calling Issue#init_journal (#18237)....
Jean-Philippe Lang -
r13152:32b79b6fd4e3
parent child
Show More
@@ -45,6 +45,7 class IssueRelationsController < ApplicationController
45 45 if params[:relation] && m = params[:relation][:issue_to_id].to_s.strip.match(/^#?(\d+)$/)
46 46 @relation.issue_to = Issue.visible.find_by_id(m[1].to_i)
47 47 end
48 @relation.init_journals(User.current)
48 49 saved = @relation.save
49 50
50 51 respond_to do |format|
@@ -64,6 +65,7 class IssueRelationsController < ApplicationController
64 65
65 66 def destroy
66 67 raise Unauthorized unless @relation.deletable?
68 @relation.init_journals(User.current)
67 69 @relation.destroy
68 70
69 71 respond_to do |format|
@@ -406,6 +406,7 class IssuesController < ApplicationController
406 406 def build_new_issue_from_params
407 407 if params[:id].blank?
408 408 @issue = Issue.new
409 @issue.init_journal(User.current)
409 410 if params[:copy_from]
410 411 begin
411 412 @copy_from = Issue.visible.find(params[:copy_from])
@@ -667,6 +667,11 class Issue < ActiveRecord::Base
667 667 @current_journal
668 668 end
669 669
670 # Returns the current journal or nil if it's not initialized
671 def current_journal
672 @current_journal
673 end
674
670 675 # Returns the id of the last journal or nil
671 676 def last_journal_id
672 677 if new_record?
@@ -1308,6 +1313,9 class Issue < ActiveRecord::Base
1308 1313 return unless copy? && !@after_create_from_copy_handled
1309 1314
1310 1315 if (@copied_from.project_id == project_id || Setting.cross_project_issue_relations?) && @copy_options[:link] != false
1316 if @current_journal
1317 @copied_from.init_journal(@current_journal.user)
1318 end
1311 1319 relation = IssueRelation.new(:issue_from => @copied_from, :issue_to => self, :relation_type => IssueRelation::TYPE_COPIED_TO)
1312 1320 unless relation.save
1313 1321 logger.error "Could not create relation while copying ##{@copied_from.id} to ##{id} due to validation errors: #{relation.errors.full_messages.join(', ')}" if logger
@@ -1328,6 +1336,9 class Issue < ActiveRecord::Base
1328 1336 next
1329 1337 end
1330 1338 copy = Issue.new.copy_from(child, copy_options)
1339 if @current_journal
1340 copy.init_journal(@current_journal.user)
1341 end
1331 1342 copy.author = author
1332 1343 copy.project = project
1333 1344 copy.parent_issue_id = copied_issue_ids[child.parent_id]
@@ -1477,6 +1488,30 class Issue < ActiveRecord::Base
1477 1488 end
1478 1489 end
1479 1490
1491 # Called after a relation is added
1492 def relation_added(relation)
1493 if @current_journal
1494 @current_journal.details << JournalDetail.new(
1495 :property => 'relation',
1496 :prop_key => relation.relation_type_for(self),
1497 :value => relation.other_issue(self).try(:id)
1498 )
1499 @current_journal.save
1500 end
1501 end
1502
1503 # Called after a relation is removed
1504 def relation_removed(relation)
1505 if @current_journal
1506 @current_journal.details << JournalDetail.new(
1507 :property => 'relation',
1508 :prop_key => relation.relation_type_for(self),
1509 :old_value => relation.other_issue(self).try(:id)
1510 )
1511 @current_journal.save
1512 end
1513 end
1514
1480 1515 # Default assignment based on category
1481 1516 def default_assign
1482 1517 if assigned_to.nil? && category && category.assigned_to
@@ -72,8 +72,8 class IssueRelation < ActiveRecord::Base
72 72
73 73 attr_protected :issue_from_id, :issue_to_id
74 74 before_save :handle_issue_order
75 after_create :create_journal_after_create
76 after_destroy :create_journal_after_delete
75 after_create :call_issues_relation_added_callback
76 after_destroy :call_issues_relation_removed_callback
77 77
78 78 def visible?(user=User.current)
79 79 (issue_from.nil? || issue_from.visible?(user)) && (issue_to.nil? || issue_to.visible?(user))
@@ -168,6 +168,11 class IssueRelation < ActiveRecord::Base
168 168 r == 0 ? id <=> relation.id : r
169 169 end
170 170
171 def init_journals(user)
172 issue_from.init_journal(user) if issue_from
173 issue_to.init_journal(user) if issue_to
174 end
175
171 176 private
172 177
173 178 # Reverses the relation if needed so that it gets stored in the proper way
@@ -182,29 +187,19 class IssueRelation < ActiveRecord::Base
182 187 end
183 188 end
184 189
185 def create_journal_after_create
186 journal = issue_from.init_journal(User.current)
187 journal.details << JournalDetail.new(:property => 'relation',
188 :prop_key => relation_type_for(issue_from),
189 :value => issue_to.id)
190 journal.save
191 journal = issue_to.init_journal(User.current)
192 journal.details << JournalDetail.new(:property => 'relation',
193 :prop_key => relation_type_for(issue_to),
194 :value => issue_from.id)
195 journal.save
196 end
197
198 def create_journal_after_delete
199 journal = issue_from.init_journal(User.current)
200 journal.details << JournalDetail.new(:property => 'relation',
201 :prop_key => relation_type_for(issue_from),
202 :old_value => issue_to.id)
203 journal.save
204 journal = issue_to.init_journal(User.current)
205 journal.details << JournalDetail.new(:property => 'relation',
206 :prop_key => relation_type_for(issue_to),
207 :old_value => issue_from.id)
208 journal.save
190 def call_issues_relation_added_callback
191 call_issues_callback :relation_added
192 end
193
194 def call_issues_relation_removed_callback
195 call_issues_callback :relation_removed
196 end
197
198 def call_issues_callback(name)
199 [issue_from, issue_to].each do |issue|
200 if issue
201 issue.send name, self
202 end
203 end
209 204 end
210 205 end
@@ -169,13 +169,14 class IssueRelationTest < ActiveSupport::TestCase
169 169 assert_not_equal [], r.errors[:base]
170 170 end
171 171
172 def test_create_should_make_journal_entry
172 def test_create_with_initialized_journals_should_create_journals
173 173 from = Issue.find(1)
174 174 to = Issue.find(2)
175 175 from_journals = from.journals.size
176 176 to_journals = to.journals.size
177 177 relation = IssueRelation.new(:issue_from => from, :issue_to => to,
178 178 :relation_type => IssueRelation::TYPE_PRECEDES)
179 relation.init_journals User.find(1)
179 180 assert relation.save
180 181 from.reload
181 182 to.reload
@@ -192,12 +193,13 class IssueRelationTest < ActiveSupport::TestCase
192 193 assert_nil to.journals.last.details.last.old_value
193 194 end
194 195
195 def test_delete_should_make_journal_entry
196 def test_destroy_with_initialized_journals_should_create_journals
196 197 relation = IssueRelation.find(1)
197 198 from = relation.issue_from
198 199 to = relation.issue_to
199 200 from_journals = from.journals.size
200 201 to_journals = to.journals.size
202 relation.init_journals User.find(1)
201 203 assert relation.destroy
202 204 from.reload
203 205 to.reload
@@ -207,17 +207,15 class JournalTest < ActiveSupport::TestCase
207 207 def test_visible_details_should_include_relations_to_visible_issues_only
208 208 issue = Issue.generate!
209 209 visible_issue = Issue.generate!
210 IssueRelation.create!(:issue_from => issue, :issue_to => visible_issue, :relation_type => 'relates')
211 210 hidden_issue = Issue.generate!(:is_private => true)
212 IssueRelation.create!(:issue_from => issue, :issue_to => hidden_issue, :relation_type => 'relates')
213 issue.reload
214 assert_equal 1, issue.journals.size
215 journal = issue.journals.first
216 assert_equal 2, journal.details.size
211
212 journal = Journal.new
213 journal.details << JournalDetail.new(:property => 'relation', :prop_key => 'relates', :value => visible_issue.id)
214 journal.details << JournalDetail.new(:property => 'relation', :prop_key => 'relates', :value => hidden_issue.id)
217 215
218 216 visible_details = journal.visible_details(User.anonymous)
219 217 assert_equal 1, visible_details.size
220 assert_equal visible_issue.id.to_s, visible_details.first.value
218 assert_equal visible_issue.id.to_s, visible_details.first.value.to_s
221 219
222 220 visible_details = journal.visible_details(User.find(2))
223 221 assert_equal 2, visible_details.size
@@ -410,6 +410,7 class MailerTest < ActiveSupport::TestCase
410 410
411 411 def test_issue_edit_with_relation_should_notify_users_who_can_see_the_related_issue
412 412 issue = Issue.generate!
413 issue.init_journal(User.find(1))
413 414 private_issue = Issue.generate!(:is_private => true)
414 415 IssueRelation.create!(:issue_from => issue, :issue_to => private_issue, :relation_type => 'relates')
415 416 issue.reload
General Comments 0
You need to be logged in to leave comments. Login now