diff options
Diffstat (limited to 'spec/frontend/api/projects_api_spec.js')
-rw-r--r-- | spec/frontend/api/projects_api_spec.js | 83 |
1 files changed, 76 insertions, 7 deletions
diff --git a/spec/frontend/api/projects_api_spec.js b/spec/frontend/api/projects_api_spec.js index 8459021421f..2d4ed39dad0 100644 --- a/spec/frontend/api/projects_api_spec.js +++ b/spec/frontend/api/projects_api_spec.js @@ -3,18 +3,22 @@ import getTransferLocationsResponse from 'test_fixtures/api/projects/transfer_lo import * as projectsApi from '~/api/projects_api'; import { DEFAULT_PER_PAGE } from '~/api'; import axios from '~/lib/utils/axios_utils'; +import { HTTP_STATUS_OK } from '~/lib/utils/http_status'; describe('~/api/projects_api.js', () => { let mock; let originalGon; const projectId = 1; + const setfullPathProjectSearch = (value) => { + window.gon.features.fullPathProjectSearch = value; + }; beforeEach(() => { mock = new MockAdapter(axios); originalGon = window.gon; - window.gon = { api_version: 'v7' }; + window.gon = { api_version: 'v7', features: { fullPathProjectSearch: true } }; }); afterEach(() => { @@ -27,14 +31,53 @@ describe('~/api/projects_api.js', () => { jest.spyOn(axios, 'get'); }); + const expectedUrl = '/api/v7/projects.json'; + const expectedProjects = [{ name: 'project 1' }]; + const options = {}; + it('retrieves projects from the correct URL and returns them in the response data', () => { - const expectedUrl = '/api/v7/projects.json'; const expectedParams = { params: { per_page: 20, search: '', simple: true } }; - const expectedProjects = [{ name: 'project 1' }]; const query = ''; - const options = {}; - mock.onGet(expectedUrl).reply(200, { data: expectedProjects }); + mock.onGet(expectedUrl).reply(HTTP_STATUS_OK, { data: expectedProjects }); + + return projectsApi.getProjects(query, options).then(({ data }) => { + expect(axios.get).toHaveBeenCalledWith(expectedUrl, expectedParams); + expect(data.data).toEqual(expectedProjects); + }); + }); + + it('omits search param if query is undefined', () => { + const expectedParams = { params: { per_page: 20, simple: true } }; + + mock.onGet(expectedUrl).reply(HTTP_STATUS_OK, { data: expectedProjects }); + + return projectsApi.getProjects(undefined, options).then(({ data }) => { + expect(axios.get).toHaveBeenCalledWith(expectedUrl, expectedParams); + expect(data.data).toEqual(expectedProjects); + }); + }); + + it('searches namespaces if query contains a slash', () => { + const expectedParams = { + params: { per_page: 20, search: 'group/project1', search_namespaces: true, simple: true }, + }; + const query = 'group/project1'; + + mock.onGet(expectedUrl).reply(HTTP_STATUS_OK, { data: expectedProjects }); + + return projectsApi.getProjects(query, options).then(({ data }) => { + expect(axios.get).toHaveBeenCalledWith(expectedUrl, expectedParams); + expect(data.data).toEqual(expectedProjects); + }); + }); + + it('does not search namespaces if fullPathProjectSearch is disabled', () => { + setfullPathProjectSearch(false); + const expectedParams = { params: { per_page: 20, search: 'group/project1', simple: true } }; + const query = 'group/project1'; + + mock.onGet(expectedUrl).reply(HTTP_STATUS_OK, { data: expectedProjects }); return projectsApi.getProjects(query, options).then(({ data }) => { expect(axios.get).toHaveBeenCalledWith(expectedUrl, expectedParams); @@ -53,7 +96,7 @@ describe('~/api/projects_api.js', () => { const expectedUrl = '/api/v7/projects/1/import_project_members/2'; const expectedMessage = 'Successfully imported'; - mock.onPost(expectedUrl).replyOnce(200, expectedMessage); + mock.onPost(expectedUrl).replyOnce(HTTP_STATUS_OK, expectedMessage); return projectsApi.importProjectMembers(projectId, targetId).then(({ data }) => { expect(axios.post).toHaveBeenCalledWith(expectedUrl); @@ -71,7 +114,7 @@ describe('~/api/projects_api.js', () => { const params = { page: 1 }; const expectedUrl = '/api/v7/projects/1/transfer_locations'; - mock.onGet(expectedUrl).replyOnce(200, { data: getTransferLocationsResponse }); + mock.onGet(expectedUrl).replyOnce(HTTP_STATUS_OK, { data: getTransferLocationsResponse }); await expect(projectsApi.getTransferLocations(projectId, params)).resolves.toMatchObject({ data: { data: getTransferLocationsResponse }, @@ -82,4 +125,30 @@ describe('~/api/projects_api.js', () => { }); }); }); + + describe('getProjectMembers', () => { + it('requests members of a project', async () => { + const expectedUrl = `/api/v7/projects/1/members`; + + const response = [{ id: 0, username: 'root' }]; + + mock.onGet(expectedUrl).replyOnce(HTTP_STATUS_OK, response); + + await expect(projectsApi.getProjectMembers(projectId)).resolves.toMatchObject({ + data: response, + }); + }); + + it('requests inherited members of a project when requested', async () => { + const expectedUrl = `/api/v7/projects/1/members/all`; + + const response = [{ id: 0, username: 'root' }]; + + mock.onGet(expectedUrl).replyOnce(HTTP_STATUS_OK, response); + + await expect(projectsApi.getProjectMembers(projectId, true)).resolves.toMatchObject({ + data: response, + }); + }); + }); }); |