import supertest from 'supertest'; import { HEADER_TYPE, HEADERS, HTTP_STATUS } from '@verdaccio/commons-api'; import { $ResponseExtend, $RequestExtend } from '../../types/custom'; import { initializeServer, publishTaggedVersion, publishVersion } from './_helper'; const mockApiJWTmiddleware = jest.fn( () => (req: $RequestExtend, res: $ResponseExtend, _next): void => { req.remote_user = { name: 'foo', groups: [], real_groups: [] }; _next(); } ); jest.mock('@verdaccio/auth', () => ({ Auth: class { apiJWTmiddleware() { return mockApiJWTmiddleware(); } allow_access(_d, _f, cb) { // always allow access cb(null, true); } allow_publish(_d, _f, cb) { // always allow publish cb(null, true); } }, })); describe('package', () => { let app; beforeEach(async () => { app = await initializeServer('package.yaml'); }); test('should return a package', async () => { await publishVersion(app, 'package.yaml', 'foo', '1.0.0'); return new Promise((resolve) => { supertest(app) .get('/foo') .set('Accept', HEADERS.JSON) .expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET) .expect(HTTP_STATUS.OK) .then((response) => { expect(response.body.name).toEqual('foo'); resolve(response); }); }); }); test('should return a package by version', async () => { await publishVersion(app, 'package.yaml', 'foo2', '1.0.0'); return new Promise((resolve) => { supertest(app) .get('/foo2/1.0.0') .set('Accept', HEADERS.JSON) .expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET) .expect(HTTP_STATUS.OK) .then((response) => { expect(response.body.name).toEqual('foo2'); resolve(response); }); }); }); // FIXME: investigate the 404 test.skip('should return a package by dist-tag', async (done) => { // await publishVersion(app, 'package.yaml', 'foo3', '1.0.0'); await publishVersion(app, 'package.yaml', 'foo-tagged', '1.0.0'); await publishTaggedVersion(app, 'package.yaml', 'foo-tagged', '1.0.1', 'test'); return supertest(app) .get('/foo-tagged/1.0.1') .set('Accept', HEADERS.JSON) .expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET) .expect(HTTP_STATUS.CREATED) .then((response) => { expect(response.body.name).toEqual('foo3'); done(); }); }); test('should return 404', async () => { return supertest(app) .get('/404-not-found') .set('Accept', HEADERS.JSON) .expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET) .expect(HTTP_STATUS.NOT_FOUND); }); });