Project

General

Profile

Feature #1005 » trunk-r11137.diff

Toshi MARUYAMA, 2013-01-07 11:36

View differences:

app/models/issue_relation.rb
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 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

  
192
    # issue-to
193
    journal = issue_to.init_journal(User.current)
194
    journal.details << JournalDetail.new(:property => 'relation',
195
                                         :prop_key => label_for(issue_to).to_s,
196
                                         :value    => issue_from.id)
197
    journal.save
198
  end
199

  
200
  def create_journal_after_delete
201
    journal = issue_from.init_journal(User.current)
202
    journal.details << JournalDetail.new(:property  => 'relation',
203
                                         :prop_key  => label_for(issue_from).to_s,
204
                                         :old_value => issue_to.id)
205
    journal.save
206

  
207
    # issue-to
208
    journal = issue_to.init_journal(User.current)
209
    journal.details << JournalDetail.new(:property  => 'relation',
210
                                         :prop_key  => label_for(issue_to).to_s,
211
                                         :old_value => issue_from.id)
212
    journal.save
213
  end
182 214
end
app/helpers/issues_helper.rb
290 290
      end
291 291
    when 'attachment'
292 292
      label = l(:label_attachment)
293
    when 'relation'
294
      if detail.value && !detail.old_value
295
        value = link_to_issue(Issue.find(detail.value))
296
        label = l(detail.prop_key.to_sym)
297
      elsif detail.old_value && !detail.value
298
        old_value = link_to_issue(Issue.find(detail.old_value)) if detail.old_value
299
        label = l(detail.prop_key.to_sym)
300
      end
293 301
    end
294 302
    call_hook(:helper_issues_show_detail_after_setting,
295 303
              {:detail => detail, :label => label, :value => value, :old_value => old_value })
......
339 347
        end
340 348
      when 'attachment'
341 349
        l(:text_journal_added, :label => label, :value => value).html_safe
350
      when 'relation'
351
        l(:text_journal_added, :label => label, :value => value).html_safe
342 352
      end
343 353
    else
344 354
      l(:text_journal_deleted, :label => label, :old => old_value).html_safe
app/helpers/issues_helper.rb
309 309
    unless no_html
310 310
      label = content_tag('strong', label)
311 311
      old_value = content_tag("i", h(old_value)) if detail.old_value
312
      old_value = content_tag("del", old_value) if detail.old_value and detail.value.blank?
312
      if detail.old_value and detail.value.blank? and detail.property != 'relation'
313
        old_value = content_tag("del", old_value)
314
      end
313 315
      if detail.property == 'attachment' && !value.blank? && atta = Attachment.find_by_id(detail.prop_key)
314 316
        # Link to the attachment if it has not been removed
315 317
        value = link_to_attachment(atta, :download => true, :only_path => options[:only_path])
test/unit/issue_relation_test.rb
132 132
    assert !r.save
133 133
    assert_not_nil r.errors[:base]
134 134
  end
135

  
136
  def test_create_should_make_journal_entry
137
    from = Issue.find(1)
138
    to = Issue.find(2)
139
    from_journals = from.journals.size
140
    to_journals = to.journals.size
141

  
142
    relation = IssueRelation.new :issue_from => from, :issue_to => to,
143
                                 :relation_type => IssueRelation::TYPE_PRECEDES
144
    assert relation.save
145
    from.reload
146
    to.reload
147
    relation.reload
148

  
149
    assert_equal from.journals.size, (from_journals + 1)
150
    assert_equal to.journals.size, (to_journals + 1)
151
  end
152

  
153
  def test_delete_should_make_journal_entry
154
    relation = issue_relations(:issue_relation_001)
155
    id = relation.id
156
    from = relation.issue_from
157
    to   = relation.issue_to
158
    from_journals = from.journals.size
159
    to_journals   = to.journals.size
160

  
161
    assert relation.destroy
162

  
163
    from.reload
164
    to.reload
165

  
166
    assert_equal from.journals.size, (from_journals + 1)
167
    assert_equal to.journals.size, (to_journals + 1)
168
  end
135 169
end
test/unit/issue_test.rb
1137 1137
    should "not create a journal" do
1138 1138
      copy = @issue.copy(:project_id => 3, :tracker_id => 2, :assigned_to_id => 3)
1139 1139
      copy.save!
1140
      assert_equal 0, copy.reload.journals.size
1140
      prev_journal_count = copy.journals.size
1141
      assert_equal prev_journal_count, copy.reload.journals.size
1141 1142
    end
1142 1143

  
1143 1144
    should "allow assigned_to changes" do
(4-4/9)