diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js index 7cebb88f3a4..4f66a5d080c 100644 --- a/app/assets/javascripts/api.js +++ b/app/assets/javascripts/api.js @@ -12,6 +12,7 @@ const Api = { groupProjectsPath: '/api/:version/groups/:id/projects.json', projectsPath: '/api/:version/projects.json', projectPath: '/api/:version/projects/:id', + forkedProjectsPath: '/api/:version/projects/:id/forks', projectLabelsPath: '/:namespace_path/:project_path/-/labels', projectMergeRequestsPath: '/api/:version/projects/:id/merge_requests', projectMergeRequestPath: '/api/:version/projects/:id/merge_requests/:mrid', @@ -113,6 +114,21 @@ const Api = { return axios.get(url); }, + /** + * Get all projects for a forked relationship to a specified project + * @param {string} projectPath - Path or ID of a project + * @param {Object} params - Get request parameters + * @returns {Promise} - Request promise + */ + projectForks(projectPath, params) { + const url = Api.buildUrl(Api.forkedProjectsPath).replace( + ':id', + encodeURIComponent(projectPath), + ); + + return axios.get(url, { params }); + }, + /** * Get all Merge Requests for a project, eventually filtering based on * supplied parameters diff --git a/spec/frontend/api_spec.js b/spec/frontend/api_spec.js index 6010488d9e0..0188d12a57d 100644 --- a/spec/frontend/api_spec.js +++ b/spec/frontend/api_spec.js @@ -474,4 +474,27 @@ describe('Api', () => { .catch(done.fail); }); }); + + describe('projectForks', () => { + it('gets forked projects', done => { + const dummyProjectPath = 'gitlab-org/gitlab-ce'; + const expectedUrl = `${dummyUrlRoot}/api/${dummyApiVersion}/projects/${encodeURIComponent( + dummyProjectPath, + )}/forks`; + + jest.spyOn(axios, 'get'); + + mock.onGet(expectedUrl).replyOnce(200, ['fork']); + + Api.projectForks(dummyProjectPath, { visibility: 'private' }) + .then(({ data }) => { + expect(data).toEqual(['fork']); + expect(axios.get).toHaveBeenCalledWith(expectedUrl, { + params: { visibility: 'private' }, + }); + }) + .then(done) + .catch(done.fail); + }); + }); });