@@ -306,6 +306,17 module IssuesHelper | |||
|
306 | 306 | end |
|
307 | 307 | when 'attachment' |
|
308 | 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 | 320 | end |
|
310 | 321 | call_hook(:helper_issues_show_detail_after_setting, |
|
311 | 322 | {:detail => detail, :label => label, :value => value, :old_value => old_value }) |
@@ -353,7 +364,7 module IssuesHelper | |||
|
353 | 364 | else |
|
354 | 365 | l(:text_journal_set_to, :label => label, :value => value).html_safe |
|
355 | 366 | end |
|
356 | when 'attachment' | |
|
367 | when 'attachment', 'relation' | |
|
357 | 368 | l(:text_journal_added, :label => label, :value => value).html_safe |
|
358 | 369 | end |
|
359 | 370 | else |
@@ -72,6 +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 | 77 | |
|
76 | 78 | def visible?(user=User.current) |
|
77 | 79 | (issue_from.nil? || issue_from.visible?(user)) && (issue_to.nil? || issue_to.visible?(user)) |
@@ -179,4 +181,30 class IssueRelation < ActiveRecord::Base | |||
|
179 | 181 | self.relation_type = TYPES[relation_type][:reverse] |
|
180 | 182 | end |
|
181 | 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 | 210 | end |
@@ -210,4 +210,36 class IssuesHelperTest < ActionView::TestCase | |||
|
210 | 210 | :old_value => 'error281.txt', :value => nil) |
|
211 | 211 | assert_match 'error281.txt', show_detail(detail, true) |
|
212 | 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'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'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 | 245 | end |
@@ -167,4 +167,49 class IssueRelationTest < ActiveSupport::TestCase | |||
|
167 | 167 | assert !r.save |
|
168 | 168 | assert_not_nil r.errors[:base] |
|
169 | 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 | 215 | end |
General Comments 0
You need to be logged in to leave comments.
Login now