diff options
Diffstat (limited to 'spec/helpers/users_helper_spec.rb')
-rw-r--r-- | spec/helpers/users_helper_spec.rb | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/spec/helpers/users_helper_spec.rb b/spec/helpers/users_helper_spec.rb index 2829236f7d1..e99bb4859d5 100644 --- a/spec/helpers/users_helper_spec.rb +++ b/spec/helpers/users_helper_spec.rb @@ -520,8 +520,59 @@ RSpec.describe UsersHelper do followees: 3, followers: 2, user_calendar_path: '/users/root/calendar.json', - utc_offset: 0 + utc_offset: 0, + user_id: user.id }) end end + + describe '#load_max_project_member_accesses' do + let_it_be(:projects) { create_list(:project, 3) } + + before(:all) do + projects.first.add_developer(user) + end + + context 'without current_user' do + before do + allow(helper).to receive(:current_user).and_return(nil) + end + + it 'executes no queries' do + sample = ActiveRecord::QueryRecorder.new do + helper.load_max_project_member_accesses(projects) + end + + expect(sample).not_to exceed_query_limit(0) + end + end + + context 'when current_user is present', :request_store do + before do + allow(helper).to receive(:current_user).and_return(user) + end + + it 'preloads ProjectPolicy#lookup_access_level! and UsersHelper#max_member_project_member_access for current_user in two queries', :aggregate_failures do + preload_queries = ActiveRecord::QueryRecorder.new do + helper.load_max_project_member_accesses(projects) + end + + helper_queries = ActiveRecord::QueryRecorder.new do + projects.each do |project| + helper.max_project_member_access(project) + end + end + + access_queries = ActiveRecord::QueryRecorder.new do + projects.each do |project| + user.can?(:read_code, project) + end + end + + expect(preload_queries).not_to exceed_query_limit(2) + expect(helper_queries).not_to exceed_query_limit(0) + expect(access_queries).not_to exceed_query_limit(0) + end + end + end end |