diff options
Diffstat (limited to 'spec/requests/api/groups_spec.rb')
-rw-r--r-- | spec/requests/api/groups_spec.rb | 99 |
1 files changed, 82 insertions, 17 deletions
diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb index 2adf71f2a18..5296a8b3e93 100644 --- a/spec/requests/api/groups_spec.rb +++ b/spec/requests/api/groups_spec.rb @@ -270,29 +270,17 @@ RSpec.describe API::Groups, feature_category: :groups_and_projects do end it "includes statistics if requested", :aggregate_failures do - attributes = { - storage_size: 4093, - repository_size: 123, - wiki_size: 456, - lfs_objects_size: 234, - build_artifacts_size: 345, - pipeline_artifacts_size: 456, - packages_size: 567, - snippets_size: 1234, - uploads_size: 678 - }.stringify_keys - exposed_attributes = attributes.dup - exposed_attributes['job_artifacts_size'] = exposed_attributes.delete('build_artifacts_size') - - project1.statistics.update!(attributes) + stat_keys = %w[storage_size repository_size wiki_size + lfs_objects_size job_artifacts_size pipeline_artifacts_size + packages_size snippets_size uploads_size] get api("/groups", admin, admin_mode: true), params: { statistics: true } expect(response).to have_gitlab_http_status(:ok) expect(response).to include_pagination_headers expect(json_response).to be_an Array - expect(json_response) - .to satisfy_one { |group| group['statistics'] == exposed_attributes } + + expect(json_response[0]["statistics"].keys).to match_array(stat_keys) end end @@ -856,6 +844,39 @@ RSpec.describe API::Groups, feature_category: :groups_and_projects do expect(shared_with_groups).to contain_exactly(group_link_1.shared_with_group_id, group_link_2.shared_with_group_id) end end + + context "expose shared_runners_setting attribute" do + let(:group) { create(:group, shared_runners_enabled: true) } + + before do + group.add_owner(user1) + end + + it "returns the group with shared_runners_setting as 'enabled'", :aggregate_failures do + get api("/groups/#{group.id}", user1) + + expect(response).to have_gitlab_http_status(:ok) + expect(json_response['shared_runners_setting']).to eq("enabled") + end + + it "returns the group with shared_runners_setting as 'disabled_and_unoverridable'", :aggregate_failures do + group.update!(shared_runners_enabled: false, allow_descendants_override_disabled_shared_runners: false) + + get api("/groups/#{group.id}", user1) + + expect(response).to have_gitlab_http_status(:ok) + expect(json_response['shared_runners_setting']).to eq("disabled_and_unoverridable") + end + + it "returns the group with shared_runners_setting as 'disabled_and_overridable'", :aggregate_failures do + group.update!(shared_runners_enabled: false, allow_descendants_override_disabled_shared_runners: true) + + get api("/groups/#{group.id}", user1) + + expect(response).to have_gitlab_http_status(:ok) + expect(json_response['shared_runners_setting']).to eq("disabled_and_overridable") + end + end end end @@ -1070,6 +1091,50 @@ RSpec.describe API::Groups, feature_category: :groups_and_projects do end end + context 'with owned' do + let_it_be(:group) { create(:group) } + + let_it_be(:project1) { create(:project, group: group) } + let_it_be(:project1_guest) { create(:user) } + let_it_be(:project1_owner) { create(:user) } + let_it_be(:project1_maintainer) { create(:user) } + + let_it_be(:project2) { create(:project, group: group) } + + before do + project1.add_guest(project1_guest) + project1.add_owner(project1_owner) + project1.add_maintainer(project1_maintainer) + + project2_owner = project1_owner + project2.add_owner(project2_owner) + end + + context "as a guest" do + it 'returns no projects' do + get api("/groups/#{group.id}/projects", project1_guest), params: { owned: true } + project_ids = json_response.map { |proj| proj['id'] } + expect(project_ids).to match_array([]) + end + end + + context "as a maintainer" do + it 'returns no projects' do + get api("/groups/#{group.id}/projects", project1_maintainer), params: { owned: true } + project_ids = json_response.map { |proj| proj['id'] } + expect(project_ids).to match_array([]) + end + end + + context "as an owner" do + it 'returns projects with owner access level' do + get api("/groups/#{group.id}/projects", project1_owner), params: { owned: true } + project_ids = json_response.map { |proj| proj['id'] } + expect(project_ids).to match_array([project1.id, project2.id]) + end + end + end + it "returns the group's projects", :aggregate_failures do get api("/groups/#{group1.id}/projects", user1) |