Skip to content
Snippets Groups Projects
Commit 20688cdf authored by Stan Hu's avatar Stan Hu
Browse files

Be explicit which project and user ID are memoized

parent 8c29b0b0
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -71,10 +71,12 @@ module NotesHelper
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
Loading
Loading
@@ -22,11 +22,25 @@ describe NotesHelper do
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment