API: get participants from merge_requests & issues
This commit is contained in:
parent
6eeb69fc9a
commit
34b9cc9674
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: 'API: get participants from merge_requests & issues'
|
||||
merge_request: 16187
|
||||
author: Brent Greeff
|
||||
type: added
|
|
@ -1124,6 +1124,45 @@ Example response:
|
|||
```
|
||||
|
||||
|
||||
## Participants on issues
|
||||
|
||||
```
|
||||
GET /projects/:id/issues/:issue_iid/participants
|
||||
```
|
||||
|
||||
| Attribute | Type | Required | Description |
|
||||
|-------------|---------|----------|--------------------------------------|
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `issue_iid` | integer | yes | The internal ID of a project's issue |
|
||||
|
||||
```bash
|
||||
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/5/issues/93/participants
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"name": "John Doe1",
|
||||
"username": "user1",
|
||||
"state": "active",
|
||||
"avatar_url": "http://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon",
|
||||
"web_url": "http://localhost/user1"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "John Doe5",
|
||||
"username": "user5",
|
||||
"state": "active",
|
||||
"avatar_url": "http://www.gravatar.com/avatar/4aea8cf834ed91844a2da4ff7ae6b491?s=80&d=identicon",
|
||||
"web_url": "http://localhost/user5"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
## Comments on issues
|
||||
|
||||
Comments are done via the [notes](notes.md) resource.
|
||||
|
|
|
@ -308,6 +308,41 @@ Parameters:
|
|||
}
|
||||
```
|
||||
|
||||
## Get single MR participants
|
||||
|
||||
Get a list of merge request participants.
|
||||
|
||||
```
|
||||
GET /projects/:id/merge_requests/:merge_request_iid/participants
|
||||
```
|
||||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user
|
||||
- `merge_request_iid` (required) - The internal ID of the merge request
|
||||
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"name": "John Doe1",
|
||||
"username": "user1",
|
||||
"state": "active",
|
||||
"avatar_url": "http://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon",
|
||||
"web_url": "http://localhost/user1"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "John Doe2",
|
||||
"username": "user2",
|
||||
"state": "active",
|
||||
"avatar_url": "http://www.gravatar.com/avatar/10fc7f102be8de7657fb4d80898bbfe3?s=80&d=identicon",
|
||||
"web_url": "http://localhost/user2"
|
||||
},
|
||||
]
|
||||
```
|
||||
|
||||
## Get single MR commits
|
||||
|
||||
Get a list of merge request commits.
|
||||
|
|
|
@ -277,6 +277,19 @@ module API
|
|||
present paginate(merge_requests), with: Entities::MergeRequestBasic, current_user: current_user, project: user_project
|
||||
end
|
||||
|
||||
desc 'List participants for an issue' do
|
||||
success Entities::UserBasic
|
||||
end
|
||||
params do
|
||||
requires :issue_iid, type: Integer, desc: 'The internal ID of a project issue'
|
||||
end
|
||||
get ':id/issues/:issue_iid/participants' do
|
||||
issue = find_project_issue(params[:issue_iid])
|
||||
participants = ::Kaminari.paginate_array(issue.participants)
|
||||
|
||||
present paginate(participants), with: Entities::UserBasic, current_user: current_user, project: user_project
|
||||
end
|
||||
|
||||
desc 'Get the user agent details for an issue' do
|
||||
success Entities::UserAgentDetail
|
||||
end
|
||||
|
|
|
@ -185,6 +185,16 @@ module API
|
|||
present merge_request, with: Entities::MergeRequest, current_user: current_user, project: user_project
|
||||
end
|
||||
|
||||
desc 'Get the participants of a merge request' do
|
||||
success Entities::UserBasic
|
||||
end
|
||||
get ':id/merge_requests/:merge_request_iid/participants' do
|
||||
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
||||
participants = ::Kaminari.paginate_array(merge_request.participants)
|
||||
|
||||
present paginate(participants), with: Entities::UserBasic
|
||||
end
|
||||
|
||||
desc 'Get the commits of a merge request' do
|
||||
success Entities::Commit
|
||||
end
|
||||
|
|
|
@ -1582,4 +1582,16 @@ describe API::Issues, :mailer do
|
|||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(size) if size
|
||||
end
|
||||
|
||||
describe 'GET projects/:id/issues/:issue_iid/participants' do
|
||||
it_behaves_like 'issuable participants endpoint' do
|
||||
let(:entity) { issue }
|
||||
end
|
||||
|
||||
it 'returns 404 if the issue is confidential' do
|
||||
post api("/projects/#{project.id}/issues/#{confidential_issue.iid}/participants", non_member)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -500,6 +500,12 @@ describe API::MergeRequests do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'GET /projects/:id/merge_requests/:merge_request_iid/participants' do
|
||||
it_behaves_like 'issuable participants endpoint' do
|
||||
let(:entity) { merge_request }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET /projects/:id/merge_requests/:merge_request_iid/commits' do
|
||||
it 'returns a 200 when merge request is valid' do
|
||||
get api("/projects/#{project.id}/merge_requests/#{merge_request.iid}/commits", user)
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
shared_examples 'issuable participants endpoint' do
|
||||
let(:area) { entity.class.name.underscore.pluralize }
|
||||
|
||||
it 'returns participants' do
|
||||
get api("/projects/#{project.id}/#{area}/#{entity.iid}/participants", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.size).to eq(entity.participants.size)
|
||||
|
||||
last_participant = entity.participants.last
|
||||
expect(json_response.last['id']).to eq(last_participant.id)
|
||||
expect(json_response.last['name']).to eq(last_participant.name)
|
||||
expect(json_response.last['username']).to eq(last_participant.username)
|
||||
end
|
||||
|
||||
it 'returns a 404 when iid does not exist' do
|
||||
get api("/projects/#{project.id}/#{area}/999/participants", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
end
|
||||
|
||||
it 'returns a 404 when id is used instead of iid' do
|
||||
get api("/projects/#{project.id}/#{area}/#{entity.id}/participants", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue