diff options
Diffstat (limited to 'spec/models/project_spec.rb')
-rw-r--r-- | spec/models/project_spec.rb | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index b1c9e6754b9..a95a4637234 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -1,6 +1,8 @@ require 'spec_helper' describe Project do + include ProjectForksHelper + describe 'associations' do it { is_expected.to belong_to(:group) } it { is_expected.to belong_to(:namespace) } @@ -3378,4 +3380,54 @@ describe Project do end end end + + describe '#branches_allowing_maintainer_access_to_user' do + let(:maintainer) { create(:user) } + let(:target_project) { create(:project) } + let(:project) { fork_project(target_project) } + let!(:merge_request) do + create( + :merge_request, + target_project: target_project, + source_project: project, + source_branch: 'awesome-feature-1', + allow_maintainer_to_push: true + ) + end + + before do + target_project.add_developer(maintainer) + end + + it 'includes branch names for merge requests allowing maintainer access to a user' do + expect(project.branches_allowing_maintainer_access_to_user(maintainer)) + .to include('awesome-feature-1') + end + + it 'does not include branches for closed MRs' do + create(:merge_request, :closed, + target_project: target_project, + source_project: project, + source_branch: 'rejected-feature-1', + allow_maintainer_to_push: true) + + expect(project.branches_allowing_maintainer_access_to_user(maintainer)) + .not_to include('rejected-feature-1') + end + + it 'only queries once per user' do + expect { 3.times { project.branches_allowing_maintainer_access_to_user(maintainer) } } + .not_to exceed_query_limit(1) + end + + context 'when the requeststore is active', :request_store do + it 'only queries once per user accross project instances' do + # limiting to 3 queries: + # 2 times loading the project + # once loading the accessible branches + expect { 2.times { described_class.find(project.id).branches_allowing_maintainer_access_to_user(maintainer) } } + .not_to exceed_query_limit(3) + end + end + end end |