summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@mcgivern.me.uk>2016-11-10 09:26:41 +0000
committerSean McGivern <sean@mcgivern.me.uk>2016-11-10 09:26:41 +0000
commita29544f5fee8ba65fcfea0689b0c60b77d8784ab (patch)
tree4b670fbc30b67525311d2ab81b1f063e9102f98e
parent0c99e5d0b6b457ef7db2c36f1394fad5c63d1142 (diff)
parent4f2c4411615a7c870fd1fa54525079f7ea97d6e5 (diff)
downloadgitlab-ce-a29544f5fee8ba65fcfea0689b0c60b77d8784ab.tar.gz
Merge branch 'feature/api_owned_resource' into 'master'
Add api endpoint `/groups/owned` See merge request !7103
-rw-r--r--changelogs/unreleased/feature-api_owned_resource.yml4
-rw-r--r--doc/api/groups.md9
-rw-r--r--lib/api/groups.rb10
-rw-r--r--spec/requests/api/groups_spec.rb18
-rw-r--r--spec/requests/api/projects_spec.rb24
5 files changed, 65 insertions, 0 deletions
diff --git a/changelogs/unreleased/feature-api_owned_resource.yml b/changelogs/unreleased/feature-api_owned_resource.yml
new file mode 100644
index 00000000000..9c270e4ecf4
--- /dev/null
+++ b/changelogs/unreleased/feature-api_owned_resource.yml
@@ -0,0 +1,4 @@
+---
+title: Add api endpoint `/groups/owned`
+merge_request: 7103
+author: Borja Aparicio
diff --git a/doc/api/groups.md b/doc/api/groups.md
index b56d74d25e0..45a3118f27a 100644
--- a/doc/api/groups.md
+++ b/doc/api/groups.md
@@ -26,6 +26,15 @@ GET /groups
You can search for groups by name or path, see below.
+=======
+## List owned groups
+
+Get a list of groups which are owned by the authenticated user.
+
+```
+GET /groups/owned
+```
+
## List a group's projects
Get a list of projects in this group.
diff --git a/lib/api/groups.rb b/lib/api/groups.rb
index a13e353b7f5..40644fc2adf 100644
--- a/lib/api/groups.rb
+++ b/lib/api/groups.rb
@@ -26,6 +26,16 @@ module API
present @groups, with: Entities::Group
end
+ # Get list of owned groups for authenticated user
+ #
+ # Example Request:
+ # GET /groups/owned
+ get '/owned' do
+ @groups = current_user.owned_groups
+ @groups = paginate @groups
+ present @groups, with: Entities::Group, user: current_user
+ end
+
# Create group. Available only for users who can create groups.
#
# Parameters:
diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb
index 7b47bf5afc1..b29a13b1d8b 100644
--- a/spec/requests/api/groups_spec.rb
+++ b/spec/requests/api/groups_spec.rb
@@ -68,6 +68,24 @@ describe API::API, api: true do
end
end
+ describe 'GET /groups/owned' do
+ context 'when unauthenticated' do
+ it 'returns authentication error' do
+ get api('/groups/owned')
+ expect(response).to have_http_status(401)
+ end
+ end
+
+ context 'when authenticated as group owner' do
+ it 'returns an array of groups the user owns' do
+ get api('/groups/owned', user2)
+ expect(response).to have_http_status(200)
+ expect(json_response).to be_an Array
+ expect(json_response.first['name']).to eq(group2.name)
+ end
+ end
+ end
+
describe "GET /groups/:id" do
context "when authenticated as user" do
it "returns one of user1's groups" do
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index 3c8f0ac531a..d6e9fd2c4b2 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -175,6 +175,30 @@ describe API::API, api: true do
end
end
+ describe 'GET /projects/owned' do
+ before do
+ project3
+ project4
+ end
+
+ context 'when unauthenticated' do
+ it 'returns authentication error' do
+ get api('/projects/owned')
+ expect(response).to have_http_status(401)
+ end
+ end
+
+ context 'when authenticated as project owner' do
+ it 'returns an array of projects the user owns' do
+ get api('/projects/owned', user4)
+ expect(response).to have_http_status(200)
+ expect(json_response).to be_an Array
+ expect(json_response.first['name']).to eq(project4.name)
+ expect(json_response.first['owner']['username']).to eq(user4.username)
+ end
+ end
+ end
+
describe 'GET /projects/visible' do
let(:public_project) { create(:project, :public) }