Project

General

Profile

Patch #18059 » fixed_bugs_activity.diff

Marcin Świątkiewicz, 2014-10-20 11:35

View differences:

app/models/journal.rb
25 25
  has_many :details, :class_name => "JournalDetail", :dependent => :delete_all
26 26
  attr_accessor :indice
27 27

  
28
  acts_as_event :title => Proc.new {|o| status = ((s = o.new_status) ? " (#{s})" : nil); "#{o.issue.tracker} ##{o.issue.id}#{status}: #{o.issue.subject}" },
28
  acts_as_event :title => :event_title,
29 29
                :description => :notes,
30 30
                :author => :user,
31 31
                :group => :issue,
......
35 35
  acts_as_activity_provider :type => 'issues',
36 36
                            :author_key => :user_id,
37 37
                            :find_options => {:include => [{:issue => :project}, :details, :user],
38
                                              :conditions => "#{Journal.table_name}.journalized_type = 'Issue' AND" +
39
                                                             " (#{JournalDetail.table_name}.prop_key = 'status_id' OR #{Journal.table_name}.notes <> '')"}
38
                            :conditions => @conditions}
40 39

  
41 40
  before_create :split_private_notes
42 41
  after_create :send_notification
......
49 48
      where("(#{Journal.table_name}.private_notes = ? OR (#{Project.allowed_to_condition(user, :view_private_notes, *args)}))", false)
50 49
  }
51 50

  
51
  def event_title
52
    title = title_for_status if !new_status.blank? && new_assigned.blank?
53
    title = title_for_assigned if new_status.blank? && !new_assigned.blank?
54
    title = title_for_assigned_and_status if !new_status.blank? && !new_assigned.blank?
55
    title = "#{l(:text_assigned_to_nobody)}" if title.blank?
56
    event_conditions
57
    title
58
  end
59

  
60
  def event_conditions
61
    conditions = conditions_for_status if !new_status.blank? && new_assigned.blank?
62
    conditions = conditions_for_assigned if new_status.blank? && !new_assigned.blank?
63
    conditions = conditions_for_assigned_and_status if !new_status.blank? && !new_assigned.blank?
64
    @conditions = conditions
65
  end
66

  
52 67
  def save(*args)
53 68
    # Do not save an empty journal
54 69
    (details.empty? && notes.blank?) ? false : super
......
92 107
    s ? IssueStatus.find_by_id(s.to_i) : nil
93 108
  end
94 109

  
110
  def new_assigned
111
    a = new_value_for('assigned_to_id')
112
    a ? User.find(a.to_i) : nil
113
  end
114

  
95 115
  def new_value_for(prop)
96 116
    detail_for_attribute(prop).try(:value)
97 117
  end
......
196 216
      Mailer.deliver_issue_edit(self)
197 217
    end
198 218
  end
219

  
220
  def title_for_status
221
    "#{issue.tracker} ##{issue.id} (#{new_status}): #{issue.subject}"
222
  end
223

  
224
  def title_for_assigned
225
    "##{issue.id} - #{l(:text_assigned_to)} (#{new_assigned})"
226
  end
227

  
228
  def title_for_assigned_and_status
229
    "#{issue.tracker} ##{issue.id} (#{new_status}): #{issue.subject}. #{l(:text_assigned_to)}(#{new_assigned})"
230
  end
231

  
232
  def conditions_for_status
233
    "#{Journal.table_name}.journalized_type = 'Issue' AND" +
234
      " (#{JournalDetail.table_name}.prop_key = 'status_id' OR #{Journal.table_name}.notes <> '')"
235
  end
236

  
237
  def conditions_for_assigned
238
    "#{Journal.table_name}.journalized_type = 'Issue' AND" +
239
      " (#{JournalDetail.table_name}.prop_key = 'assigned_to_id')"
240
  end
241

  
242
  def conditions_for_assigned_and_status
243
    "#{Journal.table_name}.journalized_type = 'Issue' AND" +
244
      " (#{JournalDetail.table_name}.prop_key = 'status_id' OR #{Journal.table_name}.notes <> '')" +
245
      " (#{JournalDetail.table_name}.prop_key = 'assigned_to_id')"
246
  end
199 247
end
config/locales/en.yml
985 985

  
986 986
  field_active: Active
987 987

  
988
  text_assigned_to_nobody: "Now assigned to nobody"
989
  text_assigned_to: "Now assigned to: "
988 990
  text_select_mail_notifications: Select actions for which email notifications should be sent.
989 991
  text_regexp_info: eg. ^[A-Z0-9]+$
990 992
  text_min_max_length_info: 0 means no restriction
config/locales/pl.yml
763 763
  status_active: aktywny
764 764
  status_locked: zablokowany
765 765
  status_registered: zarejestrowany
766
  text_assigned_to_nobody: "Brak przypisanej osoby"
767
  text_assigned_to: "Teraz przypisane do: "
766 768
  text_are_you_sure: Jesteś pewien ?
767 769
  text_assign_time_entries_to_project: Przypisz wpisy dziennika do projektu
768 770
  text_caracters_maximum: "%{count} znaków maksymalnie."
test/fixtures/journal_details.yml
1 1
--- 
2
journal_details_001: 
2
journal_details_001:
3 3
  old_value: "1"
4 4
  property: attr
5 5
  id: 1
6 6
  value: "2"
7 7
  prop_key: status_id
8 8
  journal_id: 1
9
journal_details_002: 
9
journal_details_002:
10 10
  old_value: "40"
11 11
  property: attr
12 12
  id: 2
......
41 41
  value: 060719210727_picture.jpg
42 42
  prop_key: 4
43 43
  journal_id: 3
44
journal_details_007:
45
  old_value: "1"
46
  property: attr
47
  id: 7
48
  value: "4"
49
  prop_key: "status_id"
50
  journal_id: 6
51
journal_details_008:
52
  old_value:
53
  property: attr
54
  id: 8
55
  value: "2"
56
  prop_key: "assigned_to_id"
57
  journal_id: 6
58
journal_details_009:
59
  old_value: "2"
60
  property: attr
61
  id: 9
62
  value:
63
  prop_key: "assigned_to_id"
64
  journal_id: 7
65
journal_details_010:
66
  old_value:
67
  property: attr
68
  id: 10
69
  value: "2"
70
  prop_key: "assigned_to_id"
71
  journal_id: 8
test/fixtures/journals.yml
34 34
  user_id: 2
35 35
  journalized_type: Issue
36 36
  journalized_id: 14
37
journals_006:
38
  id: 6
39
  created_on: <%= (Date.today-2).to_date.to_s(:db) %>
40
  notes: "Change Status And Assigned."
41
  user_id: 2
42
  journalized_type: Issue
43
  journalized_id: 1
44
journals_007:
45
  id: 7
46
  created_on: <%= Date.today.to_date.to_s(:db) %>
47
  notes: "Change Assigned to nobody"
48
  user_id: 2
49
  journalized_type: Issue
50
  journalized_id: 1
51
journals_008:
52
  id: 8
53
  created_on: <%= Date.today.to_date.to_s(:db) %>
54
  notes: "Change only assigned_to"
55
  user_id: 2
56
  journalized_type: Issue
57
  journalized_id: 1
test/functional/activities_controller_test.rb
28 28
           :enabled_modules,
29 29
           :journals, :journal_details
30 30

  
31
  def test_edit_issue_with_new_assigned
32
    get :index, :project_id => 1, :with_subprojects => 0
33
    assert_not_nil assigns(:events_by_day)
34
      # status and assigned_to changed
35
    assert_select 'a[href=/issues/1#change-6]', :text => "Bug #1 (Feedback): #{ESCAPED_UCANT} print recipes. Now assigned to: (John Smith)"
36
      # assigned_to changed on nobody
37
    assert_select 'a[href=/issues/1#change-7]', :text => "Now assigned to nobody"
38
      # assigned_to changed on 2
39
    assert_select 'a[href=/issues/1#change-8]', :text => "#1 - Now assigned to:  (John Smith)"
40
  end
31 41

  
32 42
  def test_project_index
33 43
    get :index, :id => 1, :with_subprojects => 0
test/functional/issues_controller_transaction_test.rb
136 136
          :last_journal_id => 1
137 137

  
138 138
    assert_not_nil assigns(:conflict_journals)
139
    assert_equal 1, assigns(:conflict_journals).size
139
    assert_equal 4, assigns(:conflict_journals).size
140 140
    assert_equal 2, assigns(:conflict_journals).first.id
141 141
    assert_tag 'div', :attributes => {:class => 'conflict'},
142 142
      :descendant => {:content => /Some notes with Redmine links/}
......
154 154
          :last_journal_id => ''
155 155

  
156 156
    assert_not_nil assigns(:conflict_journals)
157
    assert_equal 2, assigns(:conflict_journals).size
157
    assert_equal 5, assigns(:conflict_journals).size
158 158
    assert_tag 'div', :attributes => {:class => 'conflict'},
159 159
      :descendant => {:content => /Some notes with Redmine links/}
160 160
    assert_tag 'div', :attributes => {:class => 'conflict'},
test/unit/issue_test.rb
2266 2266
  end
2267 2267

  
2268 2268
  def test_last_journal_id_with_journals_should_return_the_journal_id
2269
    assert_equal 2, Issue.find(1).last_journal_id
2269
    assert_equal 8, Issue.find(1).last_journal_id
2270 2270
  end
2271 2271

  
2272 2272
  def test_last_journal_id_without_journals_should_return_nil
......
2274 2274
  end
2275 2275

  
2276 2276
  def test_journals_after_should_return_journals_with_greater_id
2277
    assert_equal [Journal.find(2)], Issue.find(1).journals_after('1')
2278
    assert_equal [], Issue.find(1).journals_after('2')
2277
    assert_equal Journal.find(2,6,7,8), Issue.find(1).journals_after('1')
2278
    assert_equal Journal.find(6,7,8), Issue.find(1).journals_after('2')
2279 2279
  end
2280 2280

  
2281 2281
  def test_journals_after_with_blank_arg_should_return_all_journals
2282
    assert_equal [Journal.find(1), Journal.find(2)], Issue.find(1).journals_after('')
2282
    assert_equal Journal.find(1,2,6,7,8), Issue.find(1).journals_after('')
2283 2283
  end
2284 2284

  
2285 2285
  def test_css_classes_should_include_tracker
(6-6/6)