diff options
author | Douwe Maan <douwe@gitlab.com> | 2019-03-27 15:34:35 +0300 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2019-03-27 15:34:35 +0300 |
commit | 2cc01f12c2f44a8f1af972cd83ec9cde0d424636 (patch) | |
tree | a1dee42cef8b90a6b7660e078f42ad11af7ca323 /spec | |
parent | a9194b60d783b81ece88e037f31e61f977f8fd0b (diff) | |
parent | 33a4fe1f460f64f2c9f56c8f8874982dc45effd2 (diff) |
Merge branch 'sh-optimize-projects-api' into 'master'
Optimize /api/v4/projects endpoint for visibility level
See merge request gitlab-org/gitlab-ce!26481
Diffstat (limited to 'spec')
-rw-r--r-- | spec/models/project_spec.rb | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index fc9d9a28b9a..90dcf861849 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -2710,7 +2710,7 @@ describe Project do end describe '#any_lfs_file_locks?', :request_store do - set(:project) { create(:project) } + let!(:project) { create(:project) } it 'returns false when there are no LFS file locks' do expect(project.any_lfs_file_locks?).to be_falsey @@ -3148,6 +3148,53 @@ describe Project do expect(projects).to eq([public_project]) end end + + context 'with requested visibility levels' do + set(:internal_project) { create(:project, :internal, :repository) } + set(:private_project_2) { create(:project, :private) } + + context 'with admin user' do + set(:admin) { create(:admin) } + + it 'returns all projects' do + projects = described_class.all.public_or_visible_to_user(admin, []) + + expect(projects).to match_array([public_project, private_project, private_project_2, internal_project]) + end + + it 'returns all public and private projects' do + projects = described_class.all.public_or_visible_to_user(admin, [Gitlab::VisibilityLevel::PUBLIC, Gitlab::VisibilityLevel::PRIVATE]) + + expect(projects).to match_array([public_project, private_project, private_project_2]) + end + + it 'returns all private projects' do + projects = described_class.all.public_or_visible_to_user(admin, [Gitlab::VisibilityLevel::PRIVATE]) + + expect(projects).to match_array([private_project, private_project_2]) + end + end + + context 'with regular user' do + it 'returns authorized projects' do + projects = described_class.all.public_or_visible_to_user(user, []) + + expect(projects).to match_array([public_project, private_project, internal_project]) + end + + it "returns user's public and private projects" do + projects = described_class.all.public_or_visible_to_user(user, [Gitlab::VisibilityLevel::PUBLIC, Gitlab::VisibilityLevel::PRIVATE]) + + expect(projects).to match_array([public_project, private_project]) + end + + it 'returns one private project' do + projects = described_class.all.public_or_visible_to_user(user, [Gitlab::VisibilityLevel::PRIVATE]) + + expect(projects).to eq([private_project]) + end + end + end end describe '.with_feature_available_for_user' do |