Resolve "Get milestone by title via API"
This commit is contained in:
parent
978aa04f30
commit
035c8af12e
6 changed files with 26 additions and 0 deletions
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Add select by title to milestones API
|
||||
merge_request: 26573
|
||||
author:
|
||||
type: added
|
|
@ -12,6 +12,7 @@ GET /groups/:id/milestones?iids[]=42
|
|||
GET /groups/:id/milestones?iids[]=42&iids[]=43
|
||||
GET /groups/:id/milestones?state=active
|
||||
GET /groups/:id/milestones?state=closed
|
||||
GET /groups/:id/milestones?title=1.0
|
||||
GET /groups/:id/milestones?search=version
|
||||
```
|
||||
|
||||
|
@ -22,6 +23,7 @@ Parameters:
|
|||
| `id` | integer/string | yes | The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `iids[]` | Array[integer] | optional | Return only the milestones having the given `iid` |
|
||||
| `state` | string | optional | Return only `active` or `closed` milestones |
|
||||
| `title` | string | optional | Return only the milestones having the given `title` |
|
||||
| `search` | string | optional | Return only milestones with a title or description matching the provided string |
|
||||
|
||||
```bash
|
||||
|
|
|
@ -10,6 +10,7 @@ GET /projects/:id/milestones?iids[]=42
|
|||
GET /projects/:id/milestones?iids[]=42&iids[]=43
|
||||
GET /projects/:id/milestones?state=active
|
||||
GET /projects/:id/milestones?state=closed
|
||||
GET /projects/:id/milestones?title=1.0
|
||||
GET /projects/:id/milestones?search=version
|
||||
```
|
||||
|
||||
|
@ -20,6 +21,7 @@ Parameters:
|
|||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `iids[]` | Array[integer] | optional | Return only the milestones having the given `iid` |
|
||||
| `state` | string | optional | Return only `active` or `closed` milestones |
|
||||
| `title` | string | optional | Return only the milestones having the given `title` |
|
||||
| `search` | string | optional | Return only milestones with a title or description matching the provided string |
|
||||
|
||||
```bash
|
||||
|
|
|
@ -302,6 +302,12 @@ module API
|
|||
end
|
||||
# rubocop: enable CodeReuse/ActiveRecord
|
||||
|
||||
# rubocop: disable CodeReuse/ActiveRecord
|
||||
def filter_by_title(items, title)
|
||||
items.where(title: title)
|
||||
end
|
||||
# rubocop: enable CodeReuse/ActiveRecord
|
||||
|
||||
def filter_by_search(items, text)
|
||||
items.search(text)
|
||||
end
|
||||
|
|
|
@ -16,6 +16,7 @@ module API
|
|||
optional :state, type: String, values: %w[active closed all], default: 'all',
|
||||
desc: 'Return "active", "closed", or "all" milestones'
|
||||
optional :iids, type: Array[Integer], desc: 'The IIDs of the milestones'
|
||||
optional :title, type: String, desc: 'The title of the milestones'
|
||||
optional :search, type: String, desc: 'The search criteria for the title or description of the milestone'
|
||||
use :pagination
|
||||
end
|
||||
|
@ -33,6 +34,7 @@ module API
|
|||
milestones = parent.milestones.order_id_desc
|
||||
milestones = Milestone.filter_by_state(milestones, params[:state])
|
||||
milestones = filter_by_iid(milestones, params[:iids]) if params[:iids].present?
|
||||
milestones = filter_by_title(milestones, params[:title]) if params[:title]
|
||||
milestones = filter_by_search(milestones, params[:search]) if params[:search]
|
||||
|
||||
present paginate(milestones), with: Entities::Milestone
|
||||
|
|
|
@ -72,6 +72,15 @@ shared_examples_for 'group and project milestones' do |route_definition|
|
|||
expect(json_response.first['id']).to eq closed_milestone.id
|
||||
end
|
||||
|
||||
it 'returns a milestone by title' do
|
||||
get api(route, user), params: { title: 'version2' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(json_response.size).to eq(1)
|
||||
expect(json_response.first['title']).to eq milestone.title
|
||||
expect(json_response.first['id']).to eq milestone.id
|
||||
end
|
||||
|
||||
it 'returns a milestone by searching for title' do
|
||||
get api(route, user), params: { search: 'version2' }
|
||||
|
||||
|
|
Loading…
Reference in a new issue