mirror of
https://github.com/verdaccio/verdaccio.git
synced 2024-12-30 22:34:10 -05:00
test: add additonal unit test for local-storage
This commit is contained in:
parent
d0e97cf076
commit
b494d47eeb
3 changed files with 259 additions and 21 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -10,6 +10,7 @@ test-storage*
|
||||||
node_modules
|
node_modules
|
||||||
package-lock.json
|
package-lock.json
|
||||||
build/
|
build/
|
||||||
|
npm_test-fails-add-tarball*
|
||||||
|
|
||||||
|
|
||||||
# Istanbul
|
# Istanbul
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
// @flow
|
// @flow
|
||||||
import rimRaf from 'rimraf';
|
import rimRaf from 'rimraf';
|
||||||
|
import path from 'path';
|
||||||
import LocalStorage from '../../src/lib/local-storage';
|
import LocalStorage from '../../src/lib/local-storage';
|
||||||
import AppConfig from '../../src/lib/config';
|
import AppConfig from '../../src/lib/config';
|
||||||
import configExample from './partials/config';
|
import configExample from './partials/config';
|
||||||
|
@ -15,9 +16,15 @@ setup([]);
|
||||||
describe('LocalStorage', () => {
|
describe('LocalStorage', () => {
|
||||||
let storage: IStorage;
|
let storage: IStorage;
|
||||||
const pkgName: string = 'npm_test';
|
const pkgName: string = 'npm_test';
|
||||||
|
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`;
|
||||||
|
|
||||||
beforeAll(function () {
|
beforeAll(function () {
|
||||||
storage = new LocalStorage(new AppConfig(configExample), Logger.logger);
|
const config: Config = new AppConfig(configExample);
|
||||||
|
config.self_path = path.join('../partials/store');
|
||||||
|
|
||||||
|
storage = new LocalStorage(config, Logger.logger);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should be defined', () => {
|
test('should be defined', () => {
|
||||||
|
@ -39,6 +46,21 @@ describe('LocalStorage', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should add a @scope package', (done) => {
|
||||||
|
const metadata = JSON.parse(readMetadata());
|
||||||
|
const pkgStoragePath: string = storage._getLocalStorage(pkgNameScoped);
|
||||||
|
|
||||||
|
rimRaf(pkgStoragePath.path, (err) => {
|
||||||
|
expect(err).toBeNull();
|
||||||
|
storage.addPackage(pkgNameScoped, metadata, (err, data) => {
|
||||||
|
expect(data.version).toMatch(/1.0.0/);
|
||||||
|
expect(data.dist.tarball).toMatch(/npm_test-1.0.0.tgz/);
|
||||||
|
expect(data.name).toMatch(pkgName);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
test('should fails on add a package', (done) => {
|
test('should fails on add a package', (done) => {
|
||||||
const metadata = JSON.parse(readMetadata());
|
const metadata = JSON.parse(readMetadata());
|
||||||
|
|
||||||
|
@ -82,7 +104,18 @@ describe('LocalStorage', () => {
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('LocalStorage::updateVersions', () => {
|
||||||
|
test('should update versions from origin', (done) => {
|
||||||
|
const metadata = JSON.parse(readMetadata('metadata-update-versions-tags'));
|
||||||
|
|
||||||
|
storage.updateVersions(pkgName, metadata, (err, data) => {
|
||||||
|
expect(err).toBeNull();
|
||||||
|
expect(data.versions['1.0.3']).toBeDefined();
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('LocalStorage::changePackage', () => {
|
describe('LocalStorage::changePackage', () => {
|
||||||
|
@ -98,9 +131,10 @@ describe('LocalStorage', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('LocalStorage::addTarball', () => {
|
describe('LocalStorage::addTarball', () => {
|
||||||
|
|
||||||
test('should add a new tarball', (done) => {
|
test('should add a new tarball', (done) => {
|
||||||
const tarballData = JSON.parse(readMetadata('addTarball'));
|
const tarballData = JSON.parse(readMetadata('addTarball'));
|
||||||
const stream = storage.addTarball(pkgName, `${pkgName}-add-tarball-1.0.4.tgz`);
|
const stream = storage.addTarball(pkgName, tarballName);
|
||||||
stream.on('error', function(err) {
|
stream.on('error', function(err) {
|
||||||
expect(err).toBeNull();
|
expect(err).toBeNull();
|
||||||
done();
|
done();
|
||||||
|
@ -113,9 +147,42 @@ describe('LocalStorage', () => {
|
||||||
stream.done();
|
stream.done();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should add a new second tarball', (done) => {
|
||||||
|
const tarballData = JSON.parse(readMetadata('addTarball'));
|
||||||
|
const stream = storage.addTarball(pkgName, tarballName2);
|
||||||
|
stream.on('error', function(err) {
|
||||||
|
expect(err).toBeNull();
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
stream.on('success', function() {
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
stream.end(new Buffer(tarballData.data, 'base64'));
|
||||||
|
stream.done();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should fails on add a duplicated new tarball ', (done) => {
|
||||||
|
const tarballData = JSON.parse(readMetadata('addTarball'));
|
||||||
|
const stream = storage.addTarball(pkgName, tarballName);
|
||||||
|
stream.on('error', function(err) {
|
||||||
|
expect(err).not.toBeNull();
|
||||||
|
expect(err.statusCode).toEqual(409);
|
||||||
|
expect(err.message).toMatch(/this package is already present/);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
stream.on('success', function() {
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
stream.end(new Buffer(tarballData.data, 'base64'));
|
||||||
|
stream.done();
|
||||||
|
});
|
||||||
|
|
||||||
test('should fails on add a new tarball on missing package', (done) => {
|
test('should fails on add a new tarball on missing package', (done) => {
|
||||||
const tarballData = JSON.parse(readMetadata('addTarball'));
|
const tarballData = JSON.parse(readMetadata('addTarball'));
|
||||||
const stream = storage.addTarball('unexsiting-package', `${pkgName}-add-tarball-1.0.4.tgz`);
|
const stream = storage.addTarball('unexsiting-package', tarballName);
|
||||||
stream.on('error', function(err) {
|
stream.on('error', function(err) {
|
||||||
expect(err).not.toBeNull();
|
expect(err).not.toBeNull();
|
||||||
expect(err.statusCode).toEqual(404);
|
expect(err.statusCode).toEqual(404);
|
||||||
|
@ -157,23 +224,102 @@ describe('LocalStorage', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// describe('LocalStorage::removePackage', () => {
|
describe('LocalStorage::removeTarball', () => {
|
||||||
// test('should remove completely package', (done) => {
|
|
||||||
// storage.removePackage(pkgName, (err, data) => {
|
test('should remove a tarball', (done) => {
|
||||||
// expect(err).toBeNull();
|
storage.removeTarball(pkgName, tarballName2, 'rev', (err, pkg) => {
|
||||||
// expect(data).toBeUndefined();
|
expect(err).toBeNull();
|
||||||
// done();
|
expect(pkg).toBeUndefined();
|
||||||
// });
|
done();
|
||||||
// });
|
});
|
||||||
//
|
});
|
||||||
// test('should fails with package not found', (done) => {
|
|
||||||
// const pkgName: string = 'npm_test_fake';
|
test('should remove a tarball that does not exist', (done) => {
|
||||||
// storage.removePackage(pkgName, (err, data) => {
|
storage.removeTarball(pkgName, tarballName2, 'rev', (err) => {
|
||||||
// expect(err).not.toBeNull();
|
expect(err).not.toBeNull();
|
||||||
// expect(err.message).toMatch(/no such package available/);
|
expect(err.statusCode).toEqual(404);
|
||||||
// done();
|
expect(err.message).toMatch(/no such file available/);
|
||||||
// });
|
done();
|
||||||
// });
|
});
|
||||||
// });
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('LocalStorage::getTarball', () => {
|
||||||
|
test('should get a existing tarball', (done) => {
|
||||||
|
const stream = storage.getTarball(pkgName, tarballName);
|
||||||
|
stream.on('content-length', function(contentLength) {
|
||||||
|
expect(contentLength).toBe(279);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
stream.on('open', function() {
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should fails on get a tarball that does not exist', (done) => {
|
||||||
|
const stream = storage.getTarball('fake', tarballName);
|
||||||
|
stream.on('error', function(err) {
|
||||||
|
expect(err).not.toBeNull();
|
||||||
|
expect(err.statusCode).toEqual(404);
|
||||||
|
expect(err.message).toMatch(/no such file available/);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('LocalStorage::search', () => {
|
||||||
|
test('should find a tarball', (done) => {
|
||||||
|
const stream = storage.search('99999');
|
||||||
|
|
||||||
|
stream.on('data', function each(pkg) {
|
||||||
|
expect(pkg.name).toEqual(pkgName);
|
||||||
|
});
|
||||||
|
|
||||||
|
stream.on('error', function(err) {
|
||||||
|
expect(err).not.toBeNull();
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
stream.on('end', function() {
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('LocalStorage::removePackage', () => {
|
||||||
|
test('should remove completely package', (done) => {
|
||||||
|
storage.removePackage(pkgName, (err, data) => {
|
||||||
|
expect(err).toBeNull();
|
||||||
|
expect(data).toBeUndefined();
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should remove completely @scoped package', (done) => {
|
||||||
|
storage.removePackage(pkgNameScoped, (err, data) => {
|
||||||
|
expect(err).toBeNull();
|
||||||
|
expect(data).toBeUndefined();
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should fails with package not found', (done) => {
|
||||||
|
const pkgName: string = 'npm_test_fake';
|
||||||
|
storage.removePackage(pkgName, (err, data) => {
|
||||||
|
expect(err).not.toBeNull();
|
||||||
|
expect(err.message).toMatch(/no such package available/);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should fails with @scoped package not found', (done) => {
|
||||||
|
storage.removePackage(pkgNameScoped, (err, data) => {
|
||||||
|
expect(err).not.toBeNull();
|
||||||
|
expect(err.message).toMatch(/no such package available/);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
91
test/unit/partials/metadata-update-versions-tags
Normal file
91
test/unit/partials/metadata-update-versions-tags
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
{
|
||||||
|
"name": "npm_test",
|
||||||
|
"versions": {
|
||||||
|
"1.0.1": {
|
||||||
|
"name": "npm_test",
|
||||||
|
"version": "1.0.1",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"dependencies": {
|
||||||
|
"test": "^1.4.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {},
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"_id": "npm_test@1.0.1",
|
||||||
|
"_npmVersion": "5.5.1",
|
||||||
|
"_nodeVersion": "9.3.0",
|
||||||
|
"_npmUser": {},
|
||||||
|
"dist": {
|
||||||
|
"integrity": "sha512-zVEqt1JUCOPsash9q4wMkJEDPD+QCx95TRhQII+JnoS31uBUKoZxhzvvUJCcLVy2CQG4QdwXARU7dYWPnrwhGg==",
|
||||||
|
"shasum": "b7088c30970489637f8b4e6795e8cf2b699d7569",
|
||||||
|
"tarball": "http://localhost:4873/npm_test/-/npm_test-1.0.1.tgz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"1.0.2": {
|
||||||
|
"name": "npm_test",
|
||||||
|
"version": "1.0.1",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"dependencies": {
|
||||||
|
"test": "^1.4.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {},
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"_id": "npm_test@1.0.1",
|
||||||
|
"_npmVersion": "5.5.1",
|
||||||
|
"_nodeVersion": "9.3.0",
|
||||||
|
"_npmUser": {},
|
||||||
|
"dist": {
|
||||||
|
"integrity": "sha512-zVEqt1JUCOPsash9q4wMkJEDPD+QCx95TRhQII+JnoS31uBUKoZxhzvvUJCcLVy2CQG4QdwXARU7dYWPnrwhGg==",
|
||||||
|
"shasum": "b7088c30970489637f8b4e6795e8cf2b699d7569",
|
||||||
|
"tarball": "http://localhost:4873/npm_test/-/npm_test-1.0.1.tgz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"1.0.3": {
|
||||||
|
"name": "npm_test",
|
||||||
|
"version": "1.0.3",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"dependencies": {
|
||||||
|
"test": "^1.4.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {},
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"_id": "npm_test@1.0.1",
|
||||||
|
"_npmVersion": "5.5.1",
|
||||||
|
"_nodeVersion": "9.3.0",
|
||||||
|
"_npmUser": {},
|
||||||
|
"dist": {
|
||||||
|
"integrity": "sha512-zVEqt1JUCOPsash9q4wMkJEDPD+QCx95TRhQII+JnoS31uBUKoZxhzvvUJCcLVy2CQG4QdwXARU7dYWPnrwhGg==",
|
||||||
|
"shasum": "b7088c30970489637f8b4e6795e8cf2b699d7569",
|
||||||
|
"tarball": "http://localhost:4873/npm_test/-/npm_test-1.0.1.tgz"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dist-tags": {
|
||||||
|
"latest": "1.0.1",
|
||||||
|
"beta": "1.0.2",
|
||||||
|
"next": "1.0.3"
|
||||||
|
},
|
||||||
|
"time": {},
|
||||||
|
"_distfiles": {},
|
||||||
|
"_attachments": {},
|
||||||
|
"_uplinks": {},
|
||||||
|
"_rev": "2-b8a00ec71cdc7323",
|
||||||
|
"readme": "ERROR: No README data found!"
|
||||||
|
}
|
Loading…
Reference in a new issue