Commit 7b5708d1 authored by Kushal Pandya's avatar Kushal Pandya

Merge branch...

Merge branch 'ee-2502-refactor-ee-app-assets-javascripts-approvals-components-approvers_select-vue-to-remove-approverusers' into 'master'

Add a new method to `Api.js`: `projectUsers`

See merge request gitlab-org/gitlab-ce!31801
parents 11fd6bdf cf88f9dd
...@@ -14,6 +14,7 @@ const Api = { ...@@ -14,6 +14,7 @@ const Api = {
projectPath: '/api/:version/projects/:id', projectPath: '/api/:version/projects/:id',
forkedProjectsPath: '/api/:version/projects/:id/forks', forkedProjectsPath: '/api/:version/projects/:id/forks',
projectLabelsPath: '/:namespace_path/:project_path/-/labels', projectLabelsPath: '/:namespace_path/:project_path/-/labels',
projectUsersPath: '/api/:version/projects/:id/users',
projectMergeRequestsPath: '/api/:version/projects/:id/merge_requests', projectMergeRequestsPath: '/api/:version/projects/:id/merge_requests',
projectMergeRequestPath: '/api/:version/projects/:id/merge_requests/:mrid', projectMergeRequestPath: '/api/:version/projects/:id/merge_requests/:mrid',
projectMergeRequestChangesPath: '/api/:version/projects/:id/merge_requests/:mrid/changes', projectMergeRequestChangesPath: '/api/:version/projects/:id/merge_requests/:mrid/changes',
...@@ -108,6 +109,20 @@ const Api = { ...@@ -108,6 +109,20 @@ const Api = {
}); });
}, },
projectUsers(projectPath, query = '', options = {}) {
const url = Api.buildUrl(this.projectUsersPath).replace(':id', encodeURIComponent(projectPath));
return axios
.get(url, {
params: {
search: query,
per_page: 20,
...options,
},
})
.then(({ data }) => data);
},
// Return single project // Return single project
project(projectPath) { project(projectPath) {
const url = Api.buildUrl(Api.projectPath).replace(':id', encodeURIComponent(projectPath)); const url = Api.buildUrl(Api.projectPath).replace(':id', encodeURIComponent(projectPath));
......
---
title: 'Add new API method in Api.js: projectUsers'
merge_request: 31801
author:
type: other
...@@ -855,6 +855,7 @@ GET /projects/:id/users ...@@ -855,6 +855,7 @@ GET /projects/:id/users
| Attribute | Type | Required | Description | | Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- | | --------- | ---- | -------- | ----------- |
| `search` | string | no | Search for specific users | | `search` | string | no | Search for specific users |
| `skip_users` | array[int] | no | Filter out users with the specified IDs |
```json ```json
[ [
......
...@@ -489,11 +489,13 @@ module API ...@@ -489,11 +489,13 @@ module API
end end
params do params do
optional :search, type: String, desc: 'Return list of users matching the search criteria' optional :search, type: String, desc: 'Return list of users matching the search criteria'
optional :skip_users, type: Array[Integer], desc: 'Filter out users with the specified IDs'
use :pagination use :pagination
end end
get ':id/users' do get ':id/users' do
users = DeclarativePolicy.subject_scope { user_project.team.users } users = DeclarativePolicy.subject_scope { user_project.team.users }
users = users.search(params[:search]) if params[:search].present? users = users.search(params[:search]) if params[:search].present?
users = users.where_not_in(params[:skip_users]) if params[:skip_users].present?
present paginate(users), with: Entities::UserBasic present paginate(users), with: Entities::UserBasic
end end
......
...@@ -151,6 +151,28 @@ describe('Api', () => { ...@@ -151,6 +151,28 @@ describe('Api', () => {
}); });
}); });
describe('projectUsers', () => {
it('fetches all users of a particular project', done => {
const query = 'dummy query';
const options = { unused: 'option' };
const projectPath = 'gitlab-org%2Fgitlab-ce';
const expectedUrl = `${dummyUrlRoot}/api/${dummyApiVersion}/projects/${projectPath}/users`;
mock.onGet(expectedUrl).reply(200, [
{
name: 'test',
},
]);
Api.projectUsers('gitlab-org/gitlab-ce', query, options)
.then(response => {
expect(response.length).toBe(1);
expect(response[0].name).toBe('test');
})
.then(done)
.catch(done.fail);
});
});
describe('projectMergeRequests', () => { describe('projectMergeRequests', () => {
const projectPath = 'abc'; const projectPath = 'abc';
const expectedUrl = `${dummyUrlRoot}/api/${dummyApiVersion}/projects/${projectPath}/merge_requests`; const expectedUrl = `${dummyUrlRoot}/api/${dummyApiVersion}/projects/${projectPath}/merge_requests`;
......
...@@ -1494,6 +1494,17 @@ describe API::Projects do ...@@ -1494,6 +1494,17 @@ describe API::Projects do
expect(response).to have_gitlab_http_status(404) expect(response).to have_gitlab_http_status(404)
end end
it 'filters out users listed in skip_users' do
other_user = create(:user)
project.team.add_developer(other_user)
get api("/projects/#{project.id}/users?skip_users=#{user.id}", user)
expect(response).to have_gitlab_http_status(200)
expect(json_response.size).to eq(1)
expect(json_response[0]['id']).to eq(other_user.id)
end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment