Expose project share expiration_date field on API

This commit is contained in:
Felipe Artur 2016-09-22 17:31:18 -03:00
parent 00a7ca7469
commit 93d849beae
5 changed files with 16 additions and 9 deletions

View File

@ -1,4 +1,6 @@
Please view this file on the master branch, on stable branches it's out of date. Please view this file on the master branch, on stable branches it's out of date.
v 8.13.0 (unreleased)
- Expose expires_at field when sharing project on API
v 8.12.0 (unreleased) v 8.12.0 (unreleased)
- Update the rouge gem to 2.0.6, which adds highlighting support for JSX, Prometheus, and others. !6251 - Update the rouge gem to 2.0.6, which adds highlighting support for JSX, Prometheus, and others. !6251

View File

@ -899,6 +899,7 @@ Parameters:
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of the project to be forked - `id` (required) - The ID or NAMESPACE/PROJECT_NAME of the project to be forked
- `group_id` (required) - The ID of a group - `group_id` (required) - The ID of a group
- `group_access` (required) - Level of permissions for sharing - `group_access` (required) - Level of permissions for sharing
- `expires_at` - Share expiration date in ISO 8601 format: 2016-09-26
## Hooks ## Hooks

View File

@ -343,7 +343,7 @@ module API
end end
class ProjectGroupLink < Grape::Entity class ProjectGroupLink < Grape::Entity
expose :id, :project_id, :group_id, :group_access expose :id, :project_id, :group_id, :group_access, :expires_at
end end
class Todo < Grape::Entity class Todo < Grape::Entity

View File

@ -393,23 +393,24 @@ module API
# Share project with group # Share project with group
# #
# Parameters: # Parameters:
# id (required) - The ID of a project # id (required) - The ID of a project
# group_id (required) - The ID of a group # group_id (required) - The ID of a group
# group_access (required) - Level of permissions for sharing # group_access (required) - Level of permissions for sharing
# expires_at (optional) - Share expiration date
# #
# Example Request: # Example Request:
# POST /projects/:id/share # POST /projects/:id/share
post ":id/share" do post ":id/share" do
authorize! :admin_project, user_project authorize! :admin_project, user_project
required_attributes! [:group_id, :group_access] required_attributes! [:group_id, :group_access]
attrs = attributes_for_keys [:group_id, :group_access, :expires_at]
unless user_project.allowed_to_share_with_group? unless user_project.allowed_to_share_with_group?
return render_api_error!("The project sharing with group is disabled", 400) return render_api_error!("The project sharing with group is disabled", 400)
end end
link = user_project.project_group_links.new link = user_project.project_group_links.new(attrs)
link.group_id = params[:group_id]
link.group_access = params[:group_access]
if link.save if link.save
present link, with: Entities::ProjectGroupLink present link, with: Entities::ProjectGroupLink
else else

View File

@ -761,13 +761,16 @@ describe API::API, api: true do
let(:group) { create(:group) } let(:group) { create(:group) }
it "shares project with group" do it "shares project with group" do
expires_at = 10.days.from_now.to_date
expect do expect do
post api("/projects/#{project.id}/share", user), group_id: group.id, group_access: Gitlab::Access::DEVELOPER post api("/projects/#{project.id}/share", user), group_id: group.id, group_access: Gitlab::Access::DEVELOPER, expires_at: expires_at
end.to change { ProjectGroupLink.count }.by(1) end.to change { ProjectGroupLink.count }.by(1)
expect(response.status).to eq 201 expect(response.status).to eq 201
expect(json_response['group_id']).to eq group.id expect(json_response['group_id']).to eq(group.id)
expect(json_response['group_access']).to eq Gitlab::Access::DEVELOPER expect(json_response['group_access']).to eq(Gitlab::Access::DEVELOPER)
expect(json_response['expires_at']).to eq(expires_at.to_s)
end end
it "returns a 400 error when group id is not given" do it "returns a 400 error when group id is not given" do