Project

General

Profile

Feature #42630 » 0002-Improve-method-and-variable-naming-for-clarity-and-consistency.patch

Katsuya HIDAKA, 2025-05-14 04:10

View differences:

app/controllers/reactions_controller.rb
60 60
  end
61 61

  
62 62
  def authorize_reactable
63
    render_403 unless Redmine::Reaction.writable?(@object, User.current)
63
    render_403 unless Redmine::Reaction.editable?(@object, User.current)
64 64
  end
65 65
end
app/helpers/reactions_helper.rb
22 22
  DISPLAY_REACTION_USERS_LIMIT = 10
23 23

  
24 24
  def reaction_button(object)
25
    return unless Redmine::Reaction.visible?(object, User.current)
25
    return unless Redmine::Reaction.viewable?(object, User.current)
26 26

  
27 27
    detail = object.reaction_detail
28 28

  
29
    reaction = detail.user_reaction
29
    user_reaction = detail.user_reaction
30 30
    count = detail.reaction_count
31 31
    visible_user_names = detail.visible_users.take(DISPLAY_REACTION_USERS_LIMIT).map(&:name)
32 32

  
33 33
    tooltip = build_reaction_tooltip(visible_user_names, count)
34 34

  
35
    if Redmine::Reaction.writable?(object, User.current)
36
      if reaction&.persisted?
37
        reaction_button_reacted(object, reaction, count, tooltip)
35
    if Redmine::Reaction.editable?(object, User.current)
36
      if user_reaction.present?
37
        reaction_button_reacted(object, user_reaction, count, tooltip)
38 38
      else
39 39
        reaction_button_not_reacted(object, count, tooltip)
40 40
      end
lib/redmine/reaction.rb
22 22
    # Types of objects that can have reactions
23 23
    REACTABLE_TYPES = %w(Journal Issue Message News Comment)
24 24

  
25
    # Returns true if the user can view the reaction information of the object
26
    def self.visible?(object, user = User.current)
25
    # Returns true if the user can view the reaction of the object
26
    def self.viewable?(object, user = User.current)
27 27
      Setting.reactions_enabled? && object.visible?(user)
28 28
    end
29 29

  
30 30
    # Returns true if the user can add/remove a reaction to/from the object
31
    def self.writable?(object, user = User.current)
32
      user.logged? && visible?(object, user) && object&.project&.active?
31
    def self.editable?(object, user = User.current)
32
      user.logged? && viewable?(object, user) && object&.project&.active?
33 33
    end
34 34

  
35 35
    module Reactable
test/unit/lib/redmine/reaction_test.rb
124 124
    ), comment1.reaction_detail
125 125
  end
126 126

  
127
  test 'visible? returns true when reactions are enabled and object is visible to user' do
127
  test 'viewable? returns true when reactions are enabled and object is visible to user' do
128 128
    object = issues(:issues_007)
129 129
    user = users(:users_002)
130 130

  
131
    assert Redmine::Reaction.visible?(object, user)
131
    assert Redmine::Reaction.viewable?(object, user)
132 132
  end
133 133

  
134
  test 'visible? returns false when reactions are disabled' do
134
  test 'viewable? returns false when reactions are disabled' do
135 135
    Setting.reactions_enabled = '0'
136 136

  
137 137
    object = issues(:issues_007)
138 138
    user = users(:users_002)
139 139

  
140
    assert_not Redmine::Reaction.visible?(object, user)
140
    assert_not Redmine::Reaction.viewable?(object, user)
141 141
  end
142 142

  
143
  test 'visible? returns false when object is not visible to user' do
143
  test 'viewable? returns false when object is not visible to user' do
144 144
    object = issues(:issues_007)
145 145
    user = users(:users_002)
146 146

  
147 147
    object.expects(:visible?).with(user).returns(false)
148 148

  
149
    assert_not Redmine::Reaction.visible?(object, user)
149
    assert_not Redmine::Reaction.viewable?(object, user)
150 150
  end
151 151

  
152
  test 'writable? returns true for various reactable objects when user is logged in, object is visible, and project is active' do
152
  test 'editable? returns true for various reactable objects when user is logged in, object is visible, and project is active' do
153 153
    reactable_objects = {
154 154
      issue: issues(:issues_007),
155 155
      message: messages(:messages_001),
......
160 160
    user = users(:users_002)
161 161

  
162 162
    reactable_objects.each do |type, object|
163
      assert Redmine::Reaction.writable?(object, user), "Expected writable? to return true for #{type}"
163
      assert Redmine::Reaction.editable?(object, user), "Expected editable? to return true for #{type}"
164 164
    end
165 165
  end
166 166

  
167
  test 'writable? returns false when user is not logged in' do
167
  test 'editable? returns false when user is not logged in' do
168 168
    object = issues(:issues_007)
169 169
    user = User.anonymous
170 170

  
171
    assert_not Redmine::Reaction.writable?(object, user)
171
    assert_not Redmine::Reaction.editable?(object, user)
172 172
  end
173 173

  
174
  test 'writable? returns false when project is inactive' do
174
  test 'editable? returns false when project is inactive' do
175 175
    object = issues(:issues_007)
176 176
    user = users(:users_002)
177 177
    object.project.update!(status: Project::STATUS_ARCHIVED)
178 178

  
179
    assert_not Redmine::Reaction.writable?(object, user)
179
    assert_not Redmine::Reaction.editable?(object, user)
180 180
  end
181 181

  
182
  test 'writable? returns false when project is closed' do
182
  test 'editable? returns false when project is closed' do
183 183
    object = issues(:issues_007)
184 184
    user = users(:users_002)
185 185
    object.project.update!(status: Project::STATUS_CLOSED)
186 186

  
187
    assert_not Redmine::Reaction.writable?(object, user)
187
    assert_not Redmine::Reaction.editable?(object, user)
188 188
  end
189 189
end
(19-19/26)