Be explicit which project and user ID are memoized
This commit is contained in:
parent
8c29b0b065
commit
20688cdf07
2 changed files with 20 additions and 4 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue