2020-08-13 16:27:00 -05:00
|
|
|
import path from 'path';
|
|
|
|
import express, { Application } from 'express';
|
2020-06-30 14:55:14 -05:00
|
|
|
import supertest from 'supertest';
|
2020-07-03 16:38:49 -05:00
|
|
|
import bodyParser from 'body-parser';
|
2020-06-30 14:55:14 -05:00
|
|
|
|
2020-11-05 17:22:09 -05:00
|
|
|
import { Config, parseConfigFile } from '@verdaccio/config';
|
2020-06-30 14:55:14 -05:00
|
|
|
import { Storage } from '@verdaccio/store';
|
|
|
|
import { final, handleError, errorReportingMiddleware } from '@verdaccio/middleware';
|
2020-09-16 23:48:16 -05:00
|
|
|
import { Auth, IAuth } from '@verdaccio/auth';
|
2020-11-15 05:14:09 -05:00
|
|
|
import { HEADERS, HEADER_TYPE, HTTP_STATUS, generatePackageMetadata } from '@verdaccio/commons-api';
|
2020-08-11 00:21:51 -05:00
|
|
|
import apiEndpoints from '../../src';
|
2020-06-30 14:55:14 -05:00
|
|
|
|
|
|
|
const getConf = (conf) => {
|
2020-08-13 16:27:00 -05:00
|
|
|
const configPath = path.join(__dirname, 'config', conf);
|
2020-06-30 14:55:14 -05:00
|
|
|
|
2020-08-13 16:27:00 -05:00
|
|
|
return parseConfigFile(configPath);
|
2020-06-30 14:55:14 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
export async function initializeServer(configName): Promise<Application> {
|
2020-08-13 16:27:00 -05:00
|
|
|
const app = express();
|
|
|
|
const config = new Config(getConf(configName));
|
|
|
|
const storage = new Storage(config);
|
|
|
|
await storage.init(config, []);
|
|
|
|
const auth: IAuth = new Auth(config);
|
|
|
|
app.use(bodyParser.json({ strict: false, limit: '10mb' }));
|
|
|
|
// @ts-ignore
|
|
|
|
app.use(errorReportingMiddleware);
|
|
|
|
// @ts-ignore
|
|
|
|
app.use(apiEndpoints(config, auth, storage));
|
|
|
|
// @ts-ignore
|
|
|
|
app.use(handleError);
|
|
|
|
// @ts-ignore
|
|
|
|
app.use(final);
|
2020-06-30 14:55:14 -05:00
|
|
|
|
2020-08-13 16:27:00 -05:00
|
|
|
app.use(function (request, response) {
|
|
|
|
response.status(590);
|
|
|
|
console.log('respo', response);
|
|
|
|
response.json({ error: 'cannot handle this' });
|
|
|
|
});
|
2020-06-30 14:55:14 -05:00
|
|
|
|
2020-08-13 16:27:00 -05:00
|
|
|
return app;
|
2020-06-30 14:55:14 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
export function publishVersion(app, configFile, pkgName, version): supertest.Test {
|
2020-08-13 16:27:00 -05:00
|
|
|
const pkgMetadata = generatePackageMetadata(pkgName, version);
|
2020-06-30 14:55:14 -05:00
|
|
|
|
2020-08-13 16:27:00 -05:00
|
|
|
return supertest(app)
|
|
|
|
.put(`/${encodeURIComponent(pkgName)}`)
|
|
|
|
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
|
|
.send(JSON.stringify(pkgMetadata))
|
|
|
|
.set('accept', HEADERS.GZIP)
|
|
|
|
.set(HEADER_TYPE.ACCEPT_ENCODING, HEADERS.JSON)
|
|
|
|
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON);
|
2020-06-30 14:55:14 -05:00
|
|
|
}
|
|
|
|
|
2020-09-16 23:48:16 -05:00
|
|
|
export async function publishTaggedVersion(
|
|
|
|
app,
|
|
|
|
configFile,
|
|
|
|
pkgName: string,
|
|
|
|
version: string,
|
|
|
|
tag: string
|
|
|
|
) {
|
2020-08-13 16:27:00 -05:00
|
|
|
const pkgMetadata = generatePackageMetadata(pkgName, version, {
|
|
|
|
[tag]: version,
|
|
|
|
});
|
2020-06-30 14:55:14 -05:00
|
|
|
|
2020-08-13 16:27:00 -05:00
|
|
|
return supertest(app)
|
2020-09-16 23:48:16 -05:00
|
|
|
.put(
|
|
|
|
`/${encodeURIComponent(pkgName)}/${encodeURIComponent(version)}/-tag/${encodeURIComponent(
|
|
|
|
tag
|
|
|
|
)}`
|
|
|
|
)
|
2020-08-13 16:27:00 -05:00
|
|
|
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
|
|
.send(JSON.stringify(pkgMetadata))
|
|
|
|
.expect(HTTP_STATUS.CREATED)
|
|
|
|
.set('accept', HEADERS.GZIP)
|
|
|
|
.set(HEADER_TYPE.ACCEPT_ENCODING, HEADERS.JSON)
|
|
|
|
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON);
|
2020-06-30 14:55:14 -05:00
|
|
|
}
|