diff options
Diffstat (limited to 'spec/frontend/api')
-rw-r--r-- | spec/frontend/api/harbor_registry_spec.js | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/spec/frontend/api/harbor_registry_spec.js b/spec/frontend/api/harbor_registry_spec.js new file mode 100644 index 00000000000..8a4c377ebd1 --- /dev/null +++ b/spec/frontend/api/harbor_registry_spec.js @@ -0,0 +1,107 @@ +import MockAdapter from 'axios-mock-adapter'; +import * as harborRegistryApi from '~/api/harbor_registry'; +import axios from '~/lib/utils/axios_utils'; +import httpStatus from '~/lib/utils/http_status'; + +describe('~/api/harbor_registry', () => { + let mock; + + beforeEach(() => { + mock = new MockAdapter(axios); + jest.spyOn(axios, 'get'); + }); + + afterEach(() => { + mock.restore(); + }); + + describe('getHarborRepositoriesList', () => { + it('fetches the harbor repositories of the configured harbor project', () => { + const requestPath = '/flightjs/Flight/-/harbor/repositories'; + const expectedUrl = `${requestPath}.json`; + const expectedParams = { + limit: 10, + page: 1, + sort: 'update_time desc', + requestPath, + }; + const expectResponse = [ + { + harbor_id: 1, + name: 'test-project/image-1', + artifact_count: 1, + creation_time: '2022-07-16T08:20:34.851Z', + update_time: '2022-07-16T08:20:34.851Z', + harbor_project_id: 2, + pull_count: 0, + location: 'http://demo.harbor.com/harbor/projects/2/repositories/image-1', + }, + ]; + mock.onGet(expectedUrl).reply(httpStatus.OK, expectResponse); + + return harborRegistryApi.getHarborRepositoriesList(expectedParams).then(({ data }) => { + expect(data).toEqual(expectResponse); + }); + }); + }); + + describe('getHarborArtifacts', () => { + it('fetches the artifacts of a particular harbor repository', () => { + const requestPath = '/flightjs/Flight/-/harbor/repositories'; + const repoName = 'image-1'; + const expectedUrl = `${requestPath}/${repoName}/artifacts.json`; + const expectedParams = { + limit: 10, + page: 1, + sort: 'name asc', + repoName, + requestPath, + }; + const expectResponse = [ + { + harbor_id: 1, + digest: 'sha256:dcdf379c574e1773d703f0c0d56d67594e7a91d6b84d11ff46799f60fb081c52', + size: 775241, + push_time: '2022-07-16T08:20:34.867Z', + tags: ['v2', 'v1', 'latest'], + }, + ]; + mock.onGet(expectedUrl).reply(httpStatus.OK, expectResponse); + + return harborRegistryApi.getHarborArtifacts(expectedParams).then(({ data }) => { + expect(data).toEqual(expectResponse); + }); + }); + }); + + describe('getHarborTags', () => { + it('fetches the tags of a particular artifact', () => { + const requestPath = '/flightjs/Flight/-/harbor/repositories'; + const repoName = 'image-1'; + const digest = 'sha256:5d98daa36cdc8d6c7ed6579ce17230f0f9fd893a9012fc069cb7d714c0e3df35'; + const expectedUrl = `${requestPath}/${repoName}/artifacts/${digest}/tags.json`; + const expectedParams = { + requestPath, + digest, + repoName, + }; + const expectResponse = [ + { + repositoryId: 4, + artifactId: 5, + id: 4, + name: 'latest', + pullTime: '0001-01-01T00:00:00.000Z', + pushTime: '2022-05-27T18:21:27.903Z', + signed: false, + immutable: false, + }, + ]; + mock.onGet(expectedUrl).reply(httpStatus.OK, expectResponse); + + return harborRegistryApi.getHarborTags(expectedParams).then(({ data }) => { + expect(data).toEqual(expectResponse); + }); + }); + }); +}); |