##// END OF EJS Templates
add journal after creating/deleting issue relation (#1005)...
Toshi MARUYAMA -
r11655:1f9e1ca3181b
parent child
Show More
@@ -306,6 +306,17 module IssuesHelper
306 end
306 end
307 when 'attachment'
307 when 'attachment'
308 label = l(:label_attachment)
308 label = l(:label_attachment)
309 when 'relation'
310 if detail.value && !detail.old_value
311 rel_issue = Issue.find_by_id(detail.value)
312 value = rel_issue.nil? ? "#{l(:label_issue)} #{detail.value}" :
313 (no_html ? rel_issue : link_to_issue(rel_issue))
314 elsif detail.old_value && !detail.value
315 rel_issue = Issue.find_by_id(detail.old_value)
316 old_value = rel_issue.nil? ? "#{l(:label_issue)} #{detail.old_value}" :
317 (no_html ? rel_issue : link_to_issue(rel_issue))
318 end
319 label = l(detail.prop_key.to_sym)
309 end
320 end
310 call_hook(:helper_issues_show_detail_after_setting,
321 call_hook(:helper_issues_show_detail_after_setting,
311 {:detail => detail, :label => label, :value => value, :old_value => old_value })
322 {:detail => detail, :label => label, :value => value, :old_value => old_value })
@@ -353,7 +364,7 module IssuesHelper
353 else
364 else
354 l(:text_journal_set_to, :label => label, :value => value).html_safe
365 l(:text_journal_set_to, :label => label, :value => value).html_safe
355 end
366 end
356 when 'attachment'
367 when 'attachment', 'relation'
357 l(:text_journal_added, :label => label, :value => value).html_safe
368 l(:text_journal_added, :label => label, :value => value).html_safe
358 end
369 end
359 else
370 else
@@ -72,6 +72,8 class IssueRelation < ActiveRecord::Base
72
72
73 attr_protected :issue_from_id, :issue_to_id
73 attr_protected :issue_from_id, :issue_to_id
74 before_save :handle_issue_order
74 before_save :handle_issue_order
75 after_create :create_journal_after_create
76 after_destroy :create_journal_after_delete
75
77
76 def visible?(user=User.current)
78 def visible?(user=User.current)
77 (issue_from.nil? || issue_from.visible?(user)) && (issue_to.nil? || issue_to.visible?(user))
79 (issue_from.nil? || issue_from.visible?(user)) && (issue_to.nil? || issue_to.visible?(user))
@@ -179,4 +181,30 class IssueRelation < ActiveRecord::Base
179 self.relation_type = TYPES[relation_type][:reverse]
181 self.relation_type = TYPES[relation_type][:reverse]
180 end
182 end
181 end
183 end
184
185 def create_journal_after_create
186 journal = issue_from.init_journal(User.current)
187 journal.details << JournalDetail.new(:property => 'relation',
188 :prop_key => label_for(issue_from).to_s,
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 => label_for(issue_to).to_s,
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 => label_for(issue_from).to_s,
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 => label_for(issue_to).to_s,
207 :old_value => issue_from.id)
208 journal.save
209 end
182 end
210 end
@@ -210,4 +210,36 class IssuesHelperTest < ActionView::TestCase
210 :old_value => 'error281.txt', :value => nil)
210 :old_value => 'error281.txt', :value => nil)
211 assert_match 'error281.txt', show_detail(detail, true)
211 assert_match 'error281.txt', show_detail(detail, true)
212 end
212 end
213
214 def test_show_detail_create_relation
215 detail = JournalDetail.new(:property => 'relation',
216 :prop_key => 'label_precedes',
217 :value => 1)
218 assert_equal "Precedes Bug #1: Can't print recipes added", show_detail(detail, true)
219 assert_match %r{<strong>Precedes</strong> <i><a href="/issues/1" class=".+">Bug #1</a>: Can&#x27;t print recipes</i> added},
220 show_detail(detail, false)
221 non_existed_issue_number = 9999
222 assert_nil Issue.find_by_id(non_existed_issue_number)
223 detail = JournalDetail.new(:property => 'relation',
224 :prop_key => 'label_precedes',
225 :value => non_existed_issue_number)
226 assert_equal "Precedes Issue #{non_existed_issue_number} added", show_detail(detail, true)
227 assert_equal "<strong>Precedes</strong> <i>Issue #{non_existed_issue_number}</i> added", show_detail(detail, false)
228 end
229
230 def test_show_detail_delete_relation
231 detail = JournalDetail.new(:property => 'relation',
232 :prop_key => 'label_precedes',
233 :old_value => 1)
234 assert_equal "Precedes deleted (Bug #1: Can't print recipes)", show_detail(detail, true)
235 assert_match %r{<strong>Precedes</strong> deleted \(<del><i><a href="/issues/1" class=".+">Bug #1</a>: Can&#x27;t print recipes</i></del>\)},
236 show_detail(detail, false)
237 non_existed_issue_number = 9999
238 assert_nil Issue.find_by_id(non_existed_issue_number)
239 detail = JournalDetail.new(:property => 'relation',
240 :prop_key => 'label_precedes',
241 :old_value => non_existed_issue_number)
242 assert_equal "Precedes deleted (Issue 9999)", show_detail(detail, true)
243 assert_equal "<strong>Precedes</strong> deleted (<del><i>Issue 9999</i></del>)", show_detail(detail, false)
244 end
213 end
245 end
@@ -167,4 +167,49 class IssueRelationTest < ActiveSupport::TestCase
167 assert !r.save
167 assert !r.save
168 assert_not_nil r.errors[:base]
168 assert_not_nil r.errors[:base]
169 end
169 end
170
171 def test_create_should_make_journal_entry
172 from = Issue.find(1)
173 to = Issue.find(2)
174 from_journals = from.journals.size
175 to_journals = to.journals.size
176 relation = IssueRelation.new(:issue_from => from, :issue_to => to,
177 :relation_type => IssueRelation::TYPE_PRECEDES)
178 assert relation.save
179 from.reload
180 to.reload
181 relation.reload
182 assert_equal from.journals.size, (from_journals + 1)
183 assert_equal to.journals.size, (to_journals + 1)
184 assert_equal 'relation', from.journals.last.details.last.property
185 assert_equal 'label_precedes', from.journals.last.details.last.prop_key
186 assert_equal '2', from.journals.last.details.last.value
187 assert_nil from.journals.last.details.last.old_value
188 assert_equal 'relation', to.journals.last.details.last.property
189 assert_equal 'label_follows', to.journals.last.details.last.prop_key
190 assert_equal '1', to.journals.last.details.last.value
191 assert_nil to.journals.last.details.last.old_value
192 end
193
194 def test_delete_should_make_journal_entry
195 relation = IssueRelation.find(1)
196 id = relation.id
197 from = relation.issue_from
198 to = relation.issue_to
199 from_journals = from.journals.size
200 to_journals = to.journals.size
201 assert relation.destroy
202 from.reload
203 to.reload
204 assert_equal from.journals.size, (from_journals + 1)
205 assert_equal to.journals.size, (to_journals + 1)
206 assert_equal 'relation', from.journals.last.details.last.property
207 assert_equal 'label_blocks', from.journals.last.details.last.prop_key
208 assert_equal '9', from.journals.last.details.last.old_value
209 assert_nil from.journals.last.details.last.value
210 assert_equal 'relation', to.journals.last.details.last.property
211 assert_equal 'label_blocked_by', to.journals.last.details.last.prop_key
212 assert_equal '10', to.journals.last.details.last.old_value
213 assert_nil to.journals.last.details.last.value
214 end
170 end
215 end
General Comments 0
You need to be logged in to leave comments. Login now