mirror of
https://github.com/verdaccio/verdaccio.git
synced 2024-12-16 21:56:25 -05:00
test(storage): add better test for changePackage
This commit is contained in:
parent
d1b46df423
commit
25c62f09ea
4 changed files with 88 additions and 20 deletions
|
@ -315,35 +315,35 @@ class LocalStorage implements IStorage {
|
|||
* Update the package metadata, tags and attachments (tarballs).
|
||||
* Note: Currently supports unpublishing only.
|
||||
* @param {*} name
|
||||
* @param {*} pkg
|
||||
* @param {*} incomingPkg
|
||||
* @param {*} revision
|
||||
* @param {*} callback
|
||||
* @return {Function}
|
||||
*/
|
||||
changePackage(name: string,
|
||||
pkg: Package,
|
||||
incomingPkg: Package,
|
||||
revision?: string, callback: Callback) {
|
||||
if (!isObject(pkg.versions) || !isObject(pkg[DIST_TAGS])) {
|
||||
if (!isObject(incomingPkg.versions) || !isObject(incomingPkg[DIST_TAGS])) {
|
||||
return callback( ErrorCode.getBadData());
|
||||
}
|
||||
|
||||
this._updatePackage(name, (jsonData, cb) => {
|
||||
for (let ver in jsonData.versions) {
|
||||
if (_.isNil(pkg.versions[ver])) {
|
||||
this.logger.info( {name: name, version: ver}, 'unpublishing @{name}@@{version}');
|
||||
this._updatePackage(name, (localData, cb) => {
|
||||
for (let version in localData.versions) {
|
||||
if (_.isNil(incomingPkg.versions[version])) {
|
||||
this.logger.info( {name: name, version: version}, 'unpublishing @{name}@@{version}');
|
||||
|
||||
delete jsonData.versions[ver];
|
||||
delete jsonData.time[ver];
|
||||
delete localData.versions[version];
|
||||
delete localData.time[version];
|
||||
|
||||
for (let file in jsonData._attachments) {
|
||||
if (jsonData._attachments[file].version === ver) {
|
||||
delete jsonData._attachments[file].version;
|
||||
for (let file in localData._attachments) {
|
||||
if (localData._attachments[file].version === version) {
|
||||
delete localData._attachments[file].version;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
jsonData[DIST_TAGS] = pkg[DIST_TAGS];
|
||||
localData[DIST_TAGS] = incomingPkg[DIST_TAGS];
|
||||
cb();
|
||||
}, function(err) {
|
||||
if (err) {
|
||||
|
|
30
test/lib/utils-test.js
Normal file
30
test/lib/utils-test.js
Normal file
|
@ -0,0 +1,30 @@
|
|||
// @flow
|
||||
|
||||
import type { Version } from "@verdaccio/types";
|
||||
|
||||
export function generateNewVersion(pkgName: string, version: string): Version {
|
||||
// $FlowFixMe
|
||||
return {
|
||||
"name": pkgName,
|
||||
"version": version,
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"test": "^1.4.1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"readme": "ERROR: No README data found!",
|
||||
"_id": `${pkgName}@${version}`,
|
||||
"_npmVersion": "5.5.1",
|
||||
"_nodeVersion": "9.3.0",
|
||||
"_npmUser": {
|
||||
|
||||
},
|
||||
"dist": {
|
||||
"integrity": "sha512-zVEqt1JUCOPsash9q4wMkJEDPD+QCx95TRhQII+JnoS31uBUKoZxhzvvUJCcLVy2CQG4QdwXARU7dYWPnrwhGg==",
|
||||
"shasum": "b7088c30970489637f8b4e6795e8cf2b699d7569",
|
||||
"tarball": `http:\/\/localhost:4873\/${pkgName}\/-\/npm_test-${version}.tgz`
|
||||
}
|
||||
}
|
||||
}
|
|
@ -8,6 +8,9 @@ import AppConfig from '../../../src/lib/config';
|
|||
import configExample from '../partials/config/index';
|
||||
import Logger, {setup} from '../../../src/lib/logger';
|
||||
import {readFile} from '../../functional/lib/test.utils';
|
||||
import {generatePackageTemplate} from '../../../src/lib/storage-utils';
|
||||
import {generateNewVersion} from '../../lib/utils-test';
|
||||
|
||||
|
||||
const readMetadata = (fileName: string = 'metadata') => readFile(`../../unit/partials/${fileName}`);
|
||||
|
||||
|
@ -22,6 +25,29 @@ describe('LocalStorage', () => {
|
|||
const pkgNameScoped = `@scope/${pkgName}-scope`;
|
||||
const tarballName: string = `${pkgName}-add-tarball-1.0.4.tgz`;
|
||||
const tarballName2: string = `${pkgName}-add-tarball-1.0.5.tgz`;
|
||||
const addNewVersion = (pkgName: string, version: string) => {
|
||||
return new Promise((resolve) => {
|
||||
storage.addVersion(pkgName, version, generateNewVersion(pkgName, version), '', (err, data) => {
|
||||
resolve(data);
|
||||
});
|
||||
});
|
||||
};
|
||||
const addPackageToStore = (pkgName, metadata) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
// $FlowFixMe
|
||||
const pkgStoragePath = storage._getLocalStorage(pkgName);
|
||||
rimRaf(pkgStoragePath.path, (err) => {
|
||||
expect(err).toBeNull();
|
||||
storage.addPackage(pkgName, metadata, async (err, data) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
|
||||
resolve(data);
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
beforeAll(function () {
|
||||
const config: Config = new AppConfig(configExample);
|
||||
|
@ -123,13 +149,25 @@ describe('LocalStorage', () => {
|
|||
});
|
||||
|
||||
describe('LocalStorage::changePackage', () => {
|
||||
test('should unpublish a version', (done) => {
|
||||
const metadata = JSON.parse(readMetadata('metadata-unpublish'));
|
||||
const pkgName: string = 'change-package';
|
||||
|
||||
test('should unpublish a version', async done => {
|
||||
await addPackageToStore(pkgName, generatePackageTemplate(pkgName));
|
||||
await addNewVersion(pkgName, '1.0.1');
|
||||
await addNewVersion(pkgName, '1.0.2');
|
||||
await addNewVersion(pkgName, '1.0.3');
|
||||
const metadata = JSON.parse(readMetadata('changePackage/metadata-change'));
|
||||
const rev: string = metadata['_rev'];
|
||||
|
||||
storage.changePackage(pkgName, metadata, rev, (err) => {
|
||||
expect(err).toBeUndefined();
|
||||
done();
|
||||
storage.getPackageMetadata(pkgName, (err, data ) => {
|
||||
expect(err).toBeNull();
|
||||
expect(data.versions['1.0.1']).toBeDefined();
|
||||
expect(data.versions['1.0.2']).toBeUndefined();
|
||||
expect(data.versions['1.0.3']).toBeUndefined();
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"name": "npm_test",
|
||||
"name": "change-package",
|
||||
"versions": {
|
||||
"1.0.1": {
|
||||
"name": "npm_test",
|
||||
"name": "change-package",
|
||||
"version": "1.0.1",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
|
@ -20,7 +20,7 @@
|
|||
],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"_id": "npm_test@1.0.0",
|
||||
"_id": "change-package@1.0.0",
|
||||
"_npmVersion": "5.5.1",
|
||||
"_nodeVersion": "9.3.0",
|
||||
"_npmUser": {
|
||||
|
@ -29,7 +29,7 @@
|
|||
"dist": {
|
||||
"integrity": "sha512-tfzM1OFjWwg2d2Wke\/DV6icjeTZUVOZYLkbf8wmONRSAgMovL\/F+zyI24OhTtWyOXd1Kbj2YUMBvLpmpAjv8zg==",
|
||||
"shasum": "3e4e6bd5097b295e520b947c9be3259a9509a673",
|
||||
"tarball": "http:\/\/localhost:4873\/npm_test\/-\/npm_test-1.0.1.tgz"
|
||||
"tarball": "http:\/\/localhost:4873\/change-package\/-\/change-package-1.0.1.tgz"
|
||||
}
|
||||
}
|
||||
},
|
Loading…
Reference in a new issue