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
|
||||
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
|
||||
|
||||
Also called Project Hooks and Webhooks.
|
||||
|
|
|
|||
|
|
@ -243,6 +243,10 @@ module API
|
|||
end
|
||||
end
|
||||
|
||||
class ProjectGroupLink < Grape::Entity
|
||||
expose :id, :project_id, :group_id, :group_access
|
||||
end
|
||||
|
||||
class Namespace < Grape::Entity
|
||||
expose :id, :path, :kind
|
||||
end
|
||||
|
|
|
|||
|
|
@ -290,6 +290,33 @@ module API
|
|||
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
|
||||
#
|
||||
# Parameters:
|
||||
|
|
|
|||
|
|
@ -747,6 +747,42 @@ describe API::API, api: true do
|
|||
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
|
||||
let!(:query) { 'query'}
|
||||
let!(:search) { create(:empty_project, name: query, creator_id: user.id, namespace: user.namespace) }
|
||||
|
|
|
|||
Loading…
Reference in New Issue