%PDF- %PDF-
| Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/npm/test/lib/commands/ |
| Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/npm/test/lib/commands/install.js |
const t = require('tap')
const { load: loadMockNpm } = require('../../fixtures/mock-npm')
t.test('exec commands', async t => {
await t.test('with args, dev=true', async t => {
const SCRIPTS = []
let ARB_ARGS = null
let REIFY_CALLED = false
let ARB_OBJ = null
const { npm } = await loadMockNpm(t, {
mocks: {
'@npmcli/run-script': ({ event }) => {
SCRIPTS.push(event)
},
'@npmcli/arborist': function (args) {
ARB_ARGS = args
ARB_OBJ = this
this.reify = () => {
REIFY_CALLED = true
}
},
'{LIB}/utils/reify-finish.js': (_, arb) => {
if (arb !== ARB_OBJ) {
throw new Error('got wrong object passed to reify-finish')
}
},
},
config: {
// This is here because CI calls tests with `--ignore-scripts`, which config
// picks up from argv
'ignore-scripts': false,
'audit-level': 'low',
dev: true,
},
})
await npm.exec('install', ['fizzbuzz'])
t.match(
ARB_ARGS,
{ global: false, path: npm.prefix, auditLevel: null },
'Arborist gets correct args and ignores auditLevel'
)
t.equal(REIFY_CALLED, true, 'called reify')
t.strictSame(SCRIPTS, [], 'no scripts when adding dep')
})
await t.test('without args', async t => {
const SCRIPTS = []
let ARB_ARGS = null
let REIFY_CALLED = false
let ARB_OBJ = null
const { npm } = await loadMockNpm(t, {
mocks: {
'@npmcli/run-script': ({ event }) => {
SCRIPTS.push(event)
},
'@npmcli/arborist': function (args) {
ARB_ARGS = args
ARB_OBJ = this
this.reify = () => {
REIFY_CALLED = true
}
},
'{LIB}/utils/reify-finish.js': (_, arb) => {
if (arb !== ARB_OBJ) {
throw new Error('got wrong object passed to reify-finish')
}
},
},
config: {
},
})
await npm.exec('install', [])
t.match(ARB_ARGS, { global: false, path: npm.prefix })
t.equal(REIFY_CALLED, true, 'called reify')
t.strictSame(SCRIPTS, [
'preinstall',
'install',
'postinstall',
'prepublish',
'preprepare',
'prepare',
'postprepare',
], 'exec scripts when doing local build')
})
await t.test('should ignore scripts with --ignore-scripts', async t => {
const SCRIPTS = []
let REIFY_CALLED = false
const { npm } = await loadMockNpm(t, {
mocks: {
'{LIB}/utils/reify-finish.js': async () => {},
'@npmcli/run-script': ({ event }) => {
SCRIPTS.push(event)
},
'@npmcli/arborist': function () {
this.reify = () => {
REIFY_CALLED = true
}
},
},
config: {
'ignore-scripts': true,
},
})
await npm.exec('install', [])
t.equal(REIFY_CALLED, true, 'called reify')
t.strictSame(SCRIPTS, [], 'no scripts when adding dep')
})
await t.test('should install globally using Arborist', async t => {
const SCRIPTS = []
let ARB_ARGS = null
let REIFY_CALLED
const { npm } = await loadMockNpm(t, {
mocks: {
'@npmcli/run-script': ({ event }) => {
SCRIPTS.push(event)
},
'{LIB}/utils/reify-finish.js': async () => {},
'@npmcli/arborist': function (args) {
ARB_ARGS = args
this.reify = () => {
REIFY_CALLED = true
}
},
},
config: {
global: true,
},
})
await npm.exec('install', [])
t.match(
ARB_ARGS,
{ global: true, path: npm.globalPrefix }
)
t.equal(REIFY_CALLED, true, 'called reify')
t.strictSame(SCRIPTS, [], 'no scripts when installing globally')
t.notOk(npm.config.get('audit', 'cli'))
})
await t.test('should not install invalid global package name', async t => {
const { npm } = await loadMockNpm(t, {
mocks: {
'@npmcli/run-script': () => {},
'{LIB}/utils/reify-finish.js': async () => {},
'@npmcli/arborist': function (args) {
throw new Error('should not reify')
},
},
config: {
global: true,
},
})
await t.rejects(
npm.exec('install', ['']),
/Usage:/,
'should not install invalid package name'
)
})
await t.test('npm i -g npm engines check success', async t => {
const { npm } = await loadMockNpm(t, {
mocks: {
'{LIB}/utils/reify-finish.js': async () => {},
'@npmcli/arborist': function () {
this.reify = () => {}
},
pacote: {
manifest: () => {
return {
version: '100.100.100',
engines: {
node: '>1',
},
}
},
},
},
config: {
global: true,
},
})
await npm.exec('install', ['npm'])
t.ok('No exceptions happen')
})
await t.test('npm i -g npm engines check failure', async t => {
const { npm } = await loadMockNpm(t, {
mocks: {
pacote: {
manifest: () => {
return {
_id: 'npm@1.2.3',
version: '100.100.100',
engines: {
node: '>1000',
},
}
},
},
},
config: {
global: true,
},
})
await t.rejects(
npm.exec('install', ['npm']),
{
message: 'Unsupported engine',
pkgid: 'npm@1.2.3',
current: {
node: process.version,
npm: '100.100.100',
},
required: {
node: '>1000',
},
code: 'EBADENGINE',
}
)
})
await t.test('npm i -g npm engines check failure forced override', async t => {
const { npm } = await loadMockNpm(t, {
mocks: {
'{LIB}/utils/reify-finish.js': async () => {},
'@npmcli/arborist': function () {
this.reify = () => {}
},
pacote: {
manifest: () => {
return {
_id: 'npm@1.2.3',
version: '100.100.100',
engines: {
node: '>1000',
},
}
},
},
},
config: {
global: true,
force: true,
},
})
await npm.exec('install', ['npm'])
t.ok('Does not throw')
})
await t.test('npm i -g npm@version engines check failure', async t => {
const { npm } = await loadMockNpm(t, {
mocks: {
'{LIB}/utils/reify-finish.js': async () => {},
'@npmcli/arborist': function () {
this.reify = () => {}
},
pacote: {
manifest: () => {
return {
_id: 'npm@1.2.3',
version: '100.100.100',
engines: {
node: '>1000',
},
}
},
},
},
config: {
global: true,
},
})
await t.rejects(
npm.exec('install', ['npm@100']),
{
message: 'Unsupported engine',
pkgid: 'npm@1.2.3',
current: {
node: process.version,
npm: '100.100.100',
},
required: {
node: '>1000',
},
code: 'EBADENGINE',
}
)
})
})
t.test('completion', async t => {
const mockComp = async (t, { noChdir } = {}) => loadMockNpm(t, {
command: 'install',
prefixDir: {
arborist: {
'package.json': '{}',
},
'arborist.txt': 'just a file',
'other-dir': { a: 'a' },
},
...(noChdir ? { chdir: false } : {}),
})
await t.test('completion to folder - has a match', async t => {
const { install } = await mockComp(t)
const res = await install.completion({ partialWord: './ar' })
t.strictSame(res, ['arborist'], 'package dir match')
})
await t.test('completion to folder - invalid dir', async t => {
const { install } = await mockComp(t, { noChdir: true })
const res = await install.completion({ partialWord: '/does/not/exist' })
t.strictSame(res, [], 'invalid dir: no matching')
})
await t.test('completion to folder - no matches', async t => {
const { install } = await mockComp(t)
const res = await install.completion({ partialWord: './pa' })
t.strictSame(res, [], 'no name match')
})
await t.test('completion to folder - match is not a package', async t => {
const { install } = await mockComp(t)
const res = await install.completion({ partialWord: './othe' })
t.strictSame(res, [], 'no name match')
})
await t.test('completion to url', async t => {
const { install } = await mockComp(t)
const res = await install.completion({ partialWord: 'http://path/to/url' })
t.strictSame(res, [])
})
await t.test('no /', async t => {
const { install } = await mockComp(t)
const res = await install.completion({ partialWord: 'toto' })
t.notOk(res)
})
await t.test('only /', async t => {
const { install } = await mockComp(t)
const res = await install.completion({ partialWord: '/' })
t.strictSame(res, [])
})
})
t.test('location detection and audit', async (t) => {
await t.test('audit false without package.json', async t => {
const { npm } = await loadMockNpm(t, {
command: 'install',
prefixDir: {
// no package.json
'readme.txt': 'just a file',
'other-dir': { a: 'a' },
},
})
t.equal(npm.config.get('location'), 'user')
t.equal(npm.config.get('audit'), false)
})
await t.test('audit true with package.json', async t => {
const { npm } = await loadMockNpm(t, {
command: 'install',
prefixDir: {
'package.json': '{ "name": "testpkg", "version": "1.0.0" }',
'readme.txt': 'just a file',
},
})
t.equal(npm.config.get('location'), 'user')
t.equal(npm.config.get('audit'), true)
})
await t.test('audit true without package.json when set', async t => {
const { npm } = await loadMockNpm(t, {
command: 'install',
prefixDir: {
// no package.json
'readme.txt': 'just a file',
'other-dir': { a: 'a' },
},
config: {
audit: true,
},
})
t.equal(npm.config.get('location'), 'user')
t.equal(npm.config.get('audit'), true)
})
await t.test('audit true in root config without package.json', async t => {
const { npm } = await loadMockNpm(t, {
command: 'install',
prefixDir: {
// no package.json
'readme.txt': 'just a file',
'other-dir': { a: 'a' },
},
// change npmRoot to get it to use a builtin rc file
otherDirs: { npmrc: 'audit=true' },
npm: ({ other }) => ({ npmRoot: other }),
})
t.equal(npm.config.get('location'), 'user')
t.equal(npm.config.get('audit'), true)
})
await t.test('test for warning when --global & --audit', async t => {
const { npm, logs } = await loadMockNpm(t, {
command: 'install',
prefixDir: {
// no package.json
'readme.txt': 'just a file',
'other-dir': { a: 'a' },
},
config: {
audit: true,
global: true,
},
})
t.equal(npm.config.get('location'), 'user')
t.equal(npm.config.get('audit'), true)
t.equal(logs.warn[0][0], 'config')
t.equal(logs.warn[0][1], 'includes both --global and --audit, which is currently unsupported.')
})
})