Merge branch 'dz-nested-groups-api' into 'master'
Nested groups API See merge request !9034
This commit is contained in:
commit
3d20670058
5 changed files with 27 additions and 3 deletions
4
changelogs/unreleased/dz-nested-groups-api.yml
Normal file
4
changelogs/unreleased/dz-nested-groups-api.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
title: Add nested groups to the API
|
||||||
|
merge_request: 9034
|
||||||
|
author:
|
|
@ -32,7 +32,8 @@ GET /groups
|
||||||
"web_url": "http://localhost:3000/groups/foo-bar",
|
"web_url": "http://localhost:3000/groups/foo-bar",
|
||||||
"request_access_enabled": false,
|
"request_access_enabled": false,
|
||||||
"full_name": "Foobar Group",
|
"full_name": "Foobar Group",
|
||||||
"full_path": "foo-bar"
|
"full_path": "foo-bar",
|
||||||
|
"parent_id": null
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
@ -156,8 +157,9 @@ Example response:
|
||||||
"avatar_url": null,
|
"avatar_url": null,
|
||||||
"web_url": "https://gitlab.example.com/groups/twitter",
|
"web_url": "https://gitlab.example.com/groups/twitter",
|
||||||
"request_access_enabled": false,
|
"request_access_enabled": false,
|
||||||
"full_name": "Foobar Group",
|
"full_name": "Twitter",
|
||||||
"full_path": "foo-bar",
|
"full_path": "twitter",
|
||||||
|
"parent_id": null,
|
||||||
"projects": [
|
"projects": [
|
||||||
{
|
{
|
||||||
"id": 7,
|
"id": 7,
|
||||||
|
@ -332,6 +334,7 @@ Parameters:
|
||||||
- `visibility_level` (optional) - The group's visibility. 0 for private, 10 for internal, 20 for public.
|
- `visibility_level` (optional) - The group's visibility. 0 for private, 10 for internal, 20 for public.
|
||||||
- `lfs_enabled` (optional) - Enable/disable Large File Storage (LFS) for the projects in this group
|
- `lfs_enabled` (optional) - Enable/disable Large File Storage (LFS) for the projects in this group
|
||||||
- `request_access_enabled` (optional) - Allow users to request member access.
|
- `request_access_enabled` (optional) - Allow users to request member access.
|
||||||
|
- `parent_id` (optional) - The parent group id for creating nested group.
|
||||||
|
|
||||||
## Transfer project to group
|
## Transfer project to group
|
||||||
|
|
||||||
|
@ -383,6 +386,7 @@ Example response:
|
||||||
"request_access_enabled": false,
|
"request_access_enabled": false,
|
||||||
"full_name": "Foobar Group",
|
"full_name": "Foobar Group",
|
||||||
"full_path": "foo-bar",
|
"full_path": "foo-bar",
|
||||||
|
"parent_id": null,
|
||||||
"projects": [
|
"projects": [
|
||||||
{
|
{
|
||||||
"id": 9,
|
"id": 9,
|
||||||
|
|
|
@ -138,6 +138,7 @@ module API
|
||||||
expose :web_url
|
expose :web_url
|
||||||
expose :request_access_enabled
|
expose :request_access_enabled
|
||||||
expose :full_name, :full_path
|
expose :full_name, :full_path
|
||||||
|
expose :parent_id
|
||||||
|
|
||||||
expose :statistics, if: :statistics do
|
expose :statistics, if: :statistics do
|
||||||
with_options format_with: -> (value) { value.to_i } do
|
with_options format_with: -> (value) { value.to_i } do
|
||||||
|
|
|
@ -73,6 +73,7 @@ module API
|
||||||
params do
|
params do
|
||||||
requires :name, type: String, desc: 'The name of the group'
|
requires :name, type: String, desc: 'The name of the group'
|
||||||
requires :path, type: String, desc: 'The path of the group'
|
requires :path, type: String, desc: 'The path of the group'
|
||||||
|
optional :parent_id, type: Integer, desc: 'The parent group id for creating nested group'
|
||||||
use :optional_params
|
use :optional_params
|
||||||
end
|
end
|
||||||
post do
|
post do
|
||||||
|
|
|
@ -179,6 +179,7 @@ describe API::Groups, api: true do
|
||||||
expect(json_response['request_access_enabled']).to eq(group1.request_access_enabled)
|
expect(json_response['request_access_enabled']).to eq(group1.request_access_enabled)
|
||||||
expect(json_response['full_name']).to eq(group1.full_name)
|
expect(json_response['full_name']).to eq(group1.full_name)
|
||||||
expect(json_response['full_path']).to eq(group1.full_path)
|
expect(json_response['full_path']).to eq(group1.full_path)
|
||||||
|
expect(json_response['parent_id']).to eq(group1.parent_id)
|
||||||
expect(json_response['projects']).to be_an Array
|
expect(json_response['projects']).to be_an Array
|
||||||
expect(json_response['projects'].length).to eq(2)
|
expect(json_response['projects'].length).to eq(2)
|
||||||
expect(json_response['shared_projects']).to be_an Array
|
expect(json_response['shared_projects']).to be_an Array
|
||||||
|
@ -398,6 +399,19 @@ describe API::Groups, api: true do
|
||||||
expect(json_response["request_access_enabled"]).to eq(group[:request_access_enabled])
|
expect(json_response["request_access_enabled"]).to eq(group[:request_access_enabled])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "creates a nested group" do
|
||||||
|
parent = create(:group)
|
||||||
|
parent.add_owner(user3)
|
||||||
|
group = attributes_for(:group, { parent_id: parent.id })
|
||||||
|
|
||||||
|
post api("/groups", user3), group
|
||||||
|
|
||||||
|
expect(response).to have_http_status(201)
|
||||||
|
|
||||||
|
expect(json_response["full_path"]).to eq("#{parent.path}/#{group[:path]}")
|
||||||
|
expect(json_response["parent_id"]).to eq(parent.id)
|
||||||
|
end
|
||||||
|
|
||||||
it "does not create group, duplicate" do
|
it "does not create group, duplicate" do
|
||||||
post api("/groups", user3), { name: 'Duplicate Test', path: group2.path }
|
post api("/groups", user3), { name: 'Duplicate Test', path: group2.path }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue