0
Fork 0
mirror of https://github.com/verdaccio/verdaccio.git synced 2024-12-16 21:56:25 -05:00
verdaccio/packages/middleware/test/encode.spec.ts
Marc Bernard 58e0d950df
fix(middleware): error 404 when getting scoped tarballs (#4913)
* fix(middleware): error 404 when getting scoped tarballs

* Create mbt.yml

* Update mbt.yml

* Change to relative URL, constants, proxy url

* Split into make-url-relative.ts

* add debug
2024-10-28 07:39:23 +01:00

131 lines
4.7 KiB
TypeScript

import request from 'supertest';
import { describe, expect, test } from 'vitest';
import { HTTP_STATUS } from '@verdaccio/core';
import { encodeScopePackage } from '../src';
import { getApp } from './helper';
test('encode is json with relative path', async () => {
const app = getApp([]);
// @ts-ignore
app.use(encodeScopePackage);
app.get('/:id', (req, res) => {
const { id } = req.params;
res.status(HTTP_STATUS.OK).json({ id });
});
const res = await request(app).get('/@scope/foo');
expect(res.body).toEqual({ id: '@scope/foo' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
describe('packages requests', () => {
const app = getApp([]);
// @ts-ignore
app.use(encodeScopePackage);
app.get('/:package/:version?', (req, res) => {
const { package: pkg, version } = req.params;
res.status(HTTP_STATUS.OK).json({ package: pkg, version });
});
test('just package', async () => {
const res = await request(app).get('/foo');
expect(res.body).toEqual({ package: 'foo' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
test('package with version', async () => {
const res = await request(app).get('/foo/1.0.0');
expect(res.body).toEqual({ package: 'foo', version: '1.0.0' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
test('scoped package', async () => {
const res = await request(app).get('/@scope/foo');
expect(res.body).toEqual({ package: '@scope/foo' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
test('scoped package with version', async () => {
const res = await request(app).get('/@scope/foo/1.0.0');
expect(res.body).toEqual({ package: '@scope/foo', version: '1.0.0' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
test('scoped package with encoded path', async () => {
const res = await request(app).get('/@scope%2ffoo');
expect(res.body).toEqual({ package: '@scope/foo' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
test('scoped package and version with encoded path', async () => {
const res = await request(app).get('/@scope%2ffoo/1.0.0');
expect(res.body).toEqual({ package: '@scope/foo', version: '1.0.0' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
test('scoped package with encoded @ and path ', async () => {
const res = await request(app).get('/%40scope%2ffoo');
expect(res.body).toEqual({ package: '@scope/foo' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
test('scoped package and version with encoded @ and path', async () => {
const res = await request(app).get('/%40scope%2ffoo/1.0.0');
expect(res.body).toEqual({ package: '@scope/foo', version: '1.0.0' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
test('scoped package with encoded @', async () => {
const res = await request(app).get('/%40scope/foo');
expect(res.body).toEqual({ package: '@scope/foo' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
test('scoped package and version with encoded @', async () => {
const res = await request(app).get('/%40scope/foo/1.0.0');
expect(res.body).toEqual({ package: '@scope/foo', version: '1.0.0' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
});
describe('tarball requests', () => {
const app = getApp([]);
// @ts-ignore
app.use(encodeScopePackage);
app.get('/:package/-/:filename', (req, res) => {
const { package: pkg, filename } = req.params;
res.status(HTTP_STATUS.OK).json({ package: pkg, filename });
});
test('just package', async () => {
const res = await request(app).get('/foo/-/foo-1.2.3.tgz');
expect(res.body).toEqual({ package: 'foo', filename: 'foo-1.2.3.tgz' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
test('scoped package', async () => {
const res = await request(app).get('/@scope/foo/-/foo-1.2.3.tgz');
expect(res.body).toEqual({ package: '@scope/foo', filename: 'foo-1.2.3.tgz' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
test('scoped package with encoded path', async () => {
const res = await request(app).get('/@scope%2ffoo/-/foo-1.2.3.tgz');
expect(res.body).toEqual({ package: '@scope/foo', filename: 'foo-1.2.3.tgz' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
test('scoped package with encoded @ and path', async () => {
const res = await request(app).get('/%40scope%2ffoo/-/foo-1.2.3.tgz');
expect(res.body).toEqual({ package: '@scope/foo', filename: 'foo-1.2.3.tgz' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
test('scoped package with encoded @', async () => {
const res = await request(app).get('/%40scope/foo/-/foo-1.2.3.tgz');
expect(res.body).toEqual({ package: '@scope/foo', filename: 'foo-1.2.3.tgz' });
expect(res.status).toEqual(HTTP_STATUS.OK);
});
});