'use strict'; const assert = require('assert'); const LocalData = require('../../src/lib/storage/local/local-data'); const path = require('path'); const _ = require('lodash'); const fs = require('fs-extra'); describe('Local Database', function() { const buildCorruptedPath = () => path.join(__dirname, './partials/storage/verdaccio-corrupted.db.json'); const buildValidDbPath = () => path.join(__dirname, './partials/storage/verdaccio.db.json'); describe('reading database', () => { it('should return empty database on read corrupted database', () => { const dataLocal = new LocalData(buildCorruptedPath()); assert(_.isEmpty(dataLocal.data.list)); }); it('should return a database on read valid database', () => { const dataLocal = new LocalData(buildValidDbPath()); assert(_.isEmpty(dataLocal.data.list) === false); }); it('should fails on sync a corrupted database', () => { const dataLocal = new LocalData(buildCorruptedPath()); const error = dataLocal.sync(); assert(_.isError(error)); assert(error.message.match(/locked/)); assert(dataLocal.locked); }); }); describe('add/remove packages to database', () => { it('should add a new package to local database', () => { const dataLocal = new LocalData(buildCorruptedPath()); assert(_.isEmpty(dataLocal.data.list)); dataLocal.add('package1'); assert(!_.isEmpty(dataLocal.data.list)); }); it('should remove a new package to local database', () => { const dataLocal = new LocalData(buildCorruptedPath()); const pkgName = 'package1'; assert(_.isEmpty(dataLocal.data.list)); dataLocal.add(pkgName); dataLocal.remove(pkgName); assert(_.isEmpty(dataLocal.data.list)); }); }); describe('sync packages to database', () => { beforeEach(function() { this.newDb = path.join(__dirname, './test-storage/verdaccio.temp.db.json'); fs.copySync(buildValidDbPath(), this.newDb); }); it('should check sync packages', function() { const localData1 = new LocalData(this.newDb); localData1.add('package1'); const localData2 = new LocalData(this.newDb); assert(_.isEmpty(localData2.data.list) === false); assert(localData2.data.list.length === 2); }); }); });