Files
atom/packages/dalek/test/dalek.test.js
2019-02-25 12:19:44 +01:00

102 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.sandbox.create()
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(), [])
})
})
})
})