diff options
author | Heinrich Lee Yu <hleeyu@gmail.com> | 2018-10-26 14:02:20 +0800 |
---|---|---|
committer | Heinrich Lee Yu <hleeyu@gmail.com> | 2018-11-19 23:59:54 +0800 |
commit | 2ec2a906b552d5f4a486130b88a39a4a14e7b28f (patch) | |
tree | 83e3041d67bd267edd0a68677bad3752bf4d4fc5 | |
parent | 08ddb655ef461c57355eeb83edf10988decb2ced (diff) | |
download | gitlab-ce-2ec2a906b552d5f4a486130b88a39a4a14e7b28f.tar.gz |
Add group projects API options for including shared and subgroups
-rw-r--r-- | lib/api/groups.rb | 14 | ||||
-rw-r--r-- | spec/requests/api/groups_spec.rb | 26 |
2 files changed, 39 insertions, 1 deletions
diff --git a/lib/api/groups.rb b/lib/api/groups.rb index 64b998ab455..12227c886b2 100644 --- a/lib/api/groups.rb +++ b/lib/api/groups.rb @@ -60,7 +60,17 @@ module API def find_group_projects(params) group = find_group!(params[:id]) - projects = GroupProjectsFinder.new(group: group, current_user: current_user, params: project_finder_params).execute + options = { + only_owned: !params[:include_shared], + include_subgroups: params[:include_subgroups] + } + + projects = GroupProjectsFinder.new( + group: group, + current_user: current_user, + params: project_finder_params, + options: options + ).execute projects = projects.with_issues_available_for_user(current_user) if params[:with_issues_enabled] projects = projects.with_merge_requests_enabled if params[:with_merge_requests_enabled] projects = reorder_projects(projects) @@ -201,6 +211,8 @@ module API optional :starred, type: Boolean, default: false, desc: 'Limit by starred status' optional :with_issues_enabled, type: Boolean, default: false, desc: 'Limit by enabled issues feature' optional :with_merge_requests_enabled, type: Boolean, default: false, desc: 'Limit by enabled merge requests feature' + optional :include_subgroups, type: Boolean, default: false, desc: 'Includes projects in subgroups of this group' + optional :include_shared, type: Boolean, default: true, desc: 'Include projects shared to this group' use :pagination use :with_custom_attributes diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb index 3802b5c6848..fe47d23ad3c 100644 --- a/spec/requests/api/groups_spec.rb +++ b/spec/requests/api/groups_spec.rb @@ -502,6 +502,32 @@ describe API::Groups do expect(json_response.first['name']).to eq(public_project.name) end + it 'returns projects excluding shared' do + create(:project_group_link, project: create(:project), group: group1) + create(:project_group_link, project: create(:project), group: group1) + create(:project_group_link, project: create(:project), group: group1) + + get api("/groups/#{group1.id}/projects", user1), include_shared: false + + expect(response).to have_gitlab_http_status(200) + expect(response).to include_pagination_headers + expect(json_response).to be_an(Array) + expect(json_response.length).to eq(2) + end + + it 'returns projects including those in subgroups' do + subgroup = create(:group, parent: group1) + create(:project, group: subgroup) + create(:project, group: subgroup) + + get api("/groups/#{group1.id}/projects", user1), include_subgroups: true + + expect(response).to have_gitlab_http_status(200) + expect(response).to include_pagination_headers + expect(json_response).to be_an(Array) + expect(json_response.length).to eq(4) + end + it "does not return a non existing group" do get api("/groups/1328/projects", user1) |