Files
atom/packages/dalek/test/dalek.test.js
2020-09-22 18:17:58 +03:00

104 lines
2.9 KiB
JavaScript

/** @babel */
const assert = require('assert');
const fs = require('fs');
const sinon = require('sinon');
const path = require('path');
const dalek = require('../lib/dalek');
describe('dalek', function() {
describe('enumerate', function() {
let availablePackages = {};
let realPaths = {};
let bundledPackages = [];
let packageDirPaths = [];
let sandbox = null;
beforeEach(function() {
availablePackages = {
'an-unduplicated-installed-package': path.join(
'Users',
'username',
'.atom',
'packages',
'an-unduplicated-installed-package'
),
'duplicated-package': path.join(
'Users',
'username',
'.atom',
'packages',
'duplicated-package'
),
'unduplicated-package': path.join(
`${atom.getLoadSettings().resourcePath}`,
'node_modules',
'unduplicated-package'
)
};
atom.devMode = false;
bundledPackages = ['duplicated-package', 'unduplicated-package'];
packageDirPaths = [path.join('Users', 'username', '.atom', 'packages')];
sandbox = sinon.createSandbox();
sandbox
.stub(dalek, 'realpath')
.callsFake(filePath =>
Promise.resolve(realPaths[filePath] || filePath)
);
sandbox.stub(atom.packages, 'isBundledPackage').callsFake(packageName => {
return bundledPackages.includes(packageName);
});
sandbox
.stub(atom.packages, 'getAvailablePackageNames')
.callsFake(() => Object.keys(availablePackages));
sandbox.stub(atom.packages, 'getPackageDirPaths').callsFake(() => {
return packageDirPaths;
});
sandbox.stub(fs, 'existsSync').callsFake(candidate => {
return (
Object.values(availablePackages).includes(candidate) &&
!candidate.includes(atom.getLoadSettings().resourcePath)
);
});
});
afterEach(function() {
sandbox.restore();
});
it('returns a list of duplicate names', async function() {
assert.deepEqual(await dalek.enumerate(), ['duplicated-package']);
});
describe('when in dev mode', function() {
beforeEach(function() {
atom.devMode = true;
});
it('always returns an empty list', async function() {
assert.deepEqual(await dalek.enumerate(), []);
});
});
describe('when a package is symlinked into the package directory', async function() {
beforeEach(function() {
const realPath = path.join('Users', 'username', 'duplicated-package');
const packagePath = path.join(
'Users',
'username',
'.atom',
'packages',
'duplicated-package'
);
realPaths[packagePath] = realPath;
});
it('is not included in the list of duplicate names', async function() {
assert.deepEqual(await dalek.enumerate(), []);
});
});
});
});