Add milestone progress to API
This commit is contained in:
parent
c0fa62b5d2
commit
3328f097c9
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: 'API: Expose milestone progress'
|
||||||
|
merge_request: 25173
|
||||||
|
author: Robert Schilling
|
||||||
|
type: added
|
|
@ -42,6 +42,7 @@ Example Response:
|
||||||
"due_date": "2013-11-29",
|
"due_date": "2013-11-29",
|
||||||
"start_date": "2013-11-10",
|
"start_date": "2013-11-10",
|
||||||
"state": "active",
|
"state": "active",
|
||||||
|
"percentage_complete" : 66,
|
||||||
"updated_at": "2013-10-02T09:24:18Z",
|
"updated_at": "2013-10-02T09:24:18Z",
|
||||||
"created_at": "2013-10-02T09:24:18Z"
|
"created_at": "2013-10-02T09:24:18Z"
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@ Example Response:
|
||||||
"due_date": "2013-11-29",
|
"due_date": "2013-11-29",
|
||||||
"start_date": "2013-11-10",
|
"start_date": "2013-11-10",
|
||||||
"state": "active",
|
"state": "active",
|
||||||
|
"percentage_complete" : 66,
|
||||||
"updated_at": "2013-10-02T09:24:18Z",
|
"updated_at": "2013-10-02T09:24:18Z",
|
||||||
"created_at": "2013-10-02T09:24:18Z"
|
"created_at": "2013-10-02T09:24:18Z"
|
||||||
}
|
}
|
||||||
|
|
|
@ -501,6 +501,9 @@ module API
|
||||||
expose :state, :created_at, :updated_at
|
expose :state, :created_at, :updated_at
|
||||||
expose :due_date
|
expose :due_date
|
||||||
expose :start_date
|
expose :start_date
|
||||||
|
expose :percentage_complete do |milestone, options|
|
||||||
|
milestone.percent_complete(options[:current_user])
|
||||||
|
end
|
||||||
|
|
||||||
expose :web_url do |milestone, _options|
|
expose :web_url do |milestone, _options|
|
||||||
Gitlab::UrlBuilder.build(milestone)
|
Gitlab::UrlBuilder.build(milestone)
|
||||||
|
|
|
@ -35,19 +35,19 @@ module API
|
||||||
milestones = filter_by_iid(milestones, params[:iids]) if params[:iids].present?
|
milestones = filter_by_iid(milestones, params[:iids]) if params[:iids].present?
|
||||||
milestones = filter_by_search(milestones, params[:search]) if params[:search]
|
milestones = filter_by_search(milestones, params[:search]) if params[:search]
|
||||||
|
|
||||||
present paginate(milestones), with: Entities::Milestone
|
present paginate(milestones), with: Entities::Milestone, current_user: current_user
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_milestone_for(parent)
|
def get_milestone_for(parent)
|
||||||
milestone = parent.milestones.find(params[:milestone_id])
|
milestone = parent.milestones.find(params[:milestone_id])
|
||||||
present milestone, with: Entities::Milestone
|
present milestone, with: Entities::Milestone, current_user: current_user
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_milestone_for(parent)
|
def create_milestone_for(parent)
|
||||||
milestone = ::Milestones::CreateService.new(parent, current_user, declared_params).execute
|
milestone = ::Milestones::CreateService.new(parent, current_user, declared_params).execute
|
||||||
|
|
||||||
if milestone.valid?
|
if milestone.valid?
|
||||||
present milestone, with: Entities::Milestone
|
present milestone, with: Entities::Milestone, current_user: current_user
|
||||||
else
|
else
|
||||||
render_api_error!("Failed to create milestone #{milestone.errors.messages}", 400)
|
render_api_error!("Failed to create milestone #{milestone.errors.messages}", 400)
|
||||||
end
|
end
|
||||||
|
@ -60,7 +60,7 @@ module API
|
||||||
milestone = ::Milestones::UpdateService.new(parent, current_user, milestone_params).execute(milestone)
|
milestone = ::Milestones::UpdateService.new(parent, current_user, milestone_params).execute(milestone)
|
||||||
|
|
||||||
if milestone.valid?
|
if milestone.valid?
|
||||||
present milestone, with: Entities::Milestone
|
present milestone, with: Entities::Milestone, current_user: current_user
|
||||||
else
|
else
|
||||||
render_api_error!("Failed to update milestone #{milestone.errors.messages}", 400)
|
render_api_error!("Failed to update milestone #{milestone.errors.messages}", 400)
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
"title": { "type": "string" },
|
"title": { "type": "string" },
|
||||||
"description": { "type": ["string", "null"] },
|
"description": { "type": ["string", "null"] },
|
||||||
"state": { "type": "string" },
|
"state": { "type": "string" },
|
||||||
|
"percentage_complete": { "type": "integer" },
|
||||||
"created_at": { "type": "date" },
|
"created_at": { "type": "date" },
|
||||||
"updated_at": { "type": "date" },
|
"updated_at": { "type": "date" },
|
||||||
"start_date": { "type": "date" },
|
"start_date": { "type": "date" },
|
||||||
|
|
|
@ -8,12 +8,17 @@ shared_examples_for 'group and project milestones' do |route_definition|
|
||||||
|
|
||||||
describe "GET #{route_definition}" do
|
describe "GET #{route_definition}" do
|
||||||
it 'returns milestones list' do
|
it 'returns milestones list' do
|
||||||
|
create(:issue, project: project, milestone: milestone)
|
||||||
|
create(:closed_issue, project: project, milestone: milestone)
|
||||||
|
create(:closed_issue, project: project, milestone: milestone)
|
||||||
|
|
||||||
get api(route, user)
|
get api(route, user)
|
||||||
|
|
||||||
expect(response).to have_gitlab_http_status(200)
|
expect(response).to have_gitlab_http_status(200)
|
||||||
expect(response).to include_pagination_headers
|
expect(response).to include_pagination_headers
|
||||||
expect(json_response).to be_an Array
|
expect(json_response).to be_an Array
|
||||||
expect(json_response.first['title']).to eq(milestone.title)
|
expect(json_response.first['title']).to eq(milestone.title)
|
||||||
|
expect(json_response.first['percentage_complete']).to eq(66)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a 401 error if user not authenticated' do
|
it 'returns a 401 error if user not authenticated' do
|
||||||
|
|
Loading…
Reference in New Issue