Bring share project with group API from EE
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
e1dffa32db
commit
e8b3b92dde
|
|
@ -619,6 +619,20 @@ Revoking team membership for a user who is not currently a team member is consid
|
||||||
Please note that the returned JSON currently differs slightly. Thus you should not
|
Please note that the returned JSON currently differs slightly. Thus you should not
|
||||||
rely on the returned JSON structure.
|
rely on the returned JSON structure.
|
||||||
|
|
||||||
|
### Share project with group
|
||||||
|
|
||||||
|
Allow to share project with group.
|
||||||
|
|
||||||
|
```
|
||||||
|
POST /projects/:id/share
|
||||||
|
```
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
- `id` (required) - The ID of a project
|
||||||
|
- `group_id` (required) - The ID of a group
|
||||||
|
- `group_access` (required) - Level of permissions for sharing
|
||||||
|
|
||||||
## Hooks
|
## Hooks
|
||||||
|
|
||||||
Also called Project Hooks and Webhooks.
|
Also called Project Hooks and Webhooks.
|
||||||
|
|
|
||||||
|
|
@ -243,6 +243,10 @@ module API
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class ProjectGroupLink < Grape::Entity
|
||||||
|
expose :id, :project_id, :group_id, :group_access
|
||||||
|
end
|
||||||
|
|
||||||
class Namespace < Grape::Entity
|
class Namespace < Grape::Entity
|
||||||
expose :id, :path, :kind
|
expose :id, :path, :kind
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -290,6 +290,33 @@ module API
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Share project with group
|
||||||
|
#
|
||||||
|
# Parameters:
|
||||||
|
# id (required) - The ID of a project
|
||||||
|
# group_id (required) - The ID of a group
|
||||||
|
# group_access (required) - Level of permissions for sharing
|
||||||
|
#
|
||||||
|
# Example Request:
|
||||||
|
# POST /projects/:id/share
|
||||||
|
post ":id/share" do
|
||||||
|
authorize! :admin_project, user_project
|
||||||
|
required_attributes! [:group_id, :group_access]
|
||||||
|
|
||||||
|
unless user_project.allowed_to_share_with_group?
|
||||||
|
return render_api_error!("The project sharing with group is disabled", 400)
|
||||||
|
end
|
||||||
|
|
||||||
|
link = user_project.project_group_links.new
|
||||||
|
link.group_id = params[:group_id]
|
||||||
|
link.group_access = params[:group_access]
|
||||||
|
if link.save
|
||||||
|
present link, with: Entities::ProjectGroupLink
|
||||||
|
else
|
||||||
|
render_api_error!(link.errors.full_messages.first, 409)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Upload a file
|
# Upload a file
|
||||||
#
|
#
|
||||||
# Parameters:
|
# Parameters:
|
||||||
|
|
|
||||||
|
|
@ -747,6 +747,42 @@ describe API::API, api: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "POST /projects/:id/share" do
|
||||||
|
let(:group) { create(:group) }
|
||||||
|
|
||||||
|
it "should share project with group" do
|
||||||
|
expect do
|
||||||
|
post api("/projects/#{project.id}/share", user), group_id: group.id, group_access: Gitlab::Access::DEVELOPER
|
||||||
|
end.to change { ProjectGroupLink.count }.by(1)
|
||||||
|
|
||||||
|
expect(response.status).to eq 201
|
||||||
|
expect(json_response['group_id']).to eq group.id
|
||||||
|
expect(json_response['group_access']).to eq Gitlab::Access::DEVELOPER
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should return a 400 error when group id is not given" do
|
||||||
|
post api("/projects/#{project.id}/share", user), group_access: Gitlab::Access::DEVELOPER
|
||||||
|
expect(response.status).to eq 400
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should return a 400 error when access level is not given" do
|
||||||
|
post api("/projects/#{project.id}/share", user), group_id: group.id
|
||||||
|
expect(response.status).to eq 400
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should return a 400 error when sharing is disabled" do
|
||||||
|
project.namespace.update(share_with_group_lock: true)
|
||||||
|
post api("/projects/#{project.id}/share", user), group_id: group.id, group_access: Gitlab::Access::DEVELOPER
|
||||||
|
expect(response.status).to eq 400
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should return a 409 error when wrong params passed" do
|
||||||
|
post api("/projects/#{project.id}/share", user), group_id: group.id, group_access: 1234
|
||||||
|
expect(response.status).to eq 409
|
||||||
|
expect(json_response['message']).to eq 'Group access is not included in the list'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe 'GET /projects/search/:query' do
|
describe 'GET /projects/search/:query' do
|
||||||
let!(:query) { 'query'}
|
let!(:query) { 'query'}
|
||||||
let!(:search) { create(:empty_project, name: query, creator_id: user.id, namespace: user.namespace) }
|
let!(:search) { create(:empty_project, name: query, creator_id: user.id, namespace: user.namespace) }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue