Read about our upcoming Code of Conduct on this issue

Commit 20688cdf authored by Stan Hu's avatar Stan Hu
Browse files

Be explicit which project and user ID are memoized

parent 5ef022c499e5
......@@ -71,10 +71,12 @@ def link_to_reply_discussion(note, line_type = nil)
end
def note_max_access_for_user(note)
user_id = note.author.id
project = note.project
@max_access_by_user_id ||= Hash.new { |hash, key| hash[key] = project.team.human_max_access(key) }
@max_access_by_user_id ||= Hash.new do |hash, key|
project = key[:project]
hash[key] = project.team.human_max_access(key[:user_id])
end
@max_access_by_user_id[user_id]
full_key = { project: note.project, user_id: note.author_id }
@max_access_by_user_id[full_key]
end
end
......@@ -22,11 +22,25 @@
end
it 'return human access levels' do
original_method = project.team.method(:human_max_access)
expect_any_instance_of(ProjectTeam).to receive(:human_max_access).exactly(3).times do |*args|
original_method.call(args[1])
end
expect(helper.note_max_access_for_user(owner_note)).to eq('Owner')
expect(helper.note_max_access_for_user(master_note)).to eq('Master')
expect(helper.note_max_access_for_user(reporter_note)).to eq('Reporter')
# Call it again to ensure value is cached
expect(helper.note_max_access_for_user(owner_note)).to eq('Owner')
end
it 'handles access in different projects' do
second_project = create(:empty_project)
second_project.team << [master, :reporter]
other_note = create(:note, author: master, project: second_project)
expect(helper.note_max_access_for_user(master_note)).to eq('Master')
expect(helper.note_max_access_for_user(other_note)).to eq('Reporter')
end
end
end
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment