npm CLI robot 063afa85fe
deps: upgrade npm to 10.8.1
PR-URL: https://github.com/nodejs/node/pull/53207
Reviewed-By: Richard Lau <rlau@redhat.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com>
2024-05-30 11:21:05 +00:00

132 lines
3.6 KiB
JavaScript

const t = require('tap')
const path = require('node:path')
const tspawk = require('../../fixtures/tspawk')
const { load: loadMockNpm } = require('../../fixtures/mock-npm')
const spawk = tspawk(t)
const npmConfig = {
config: {
'ignore-scripts': false,
editor: 'testeditor',
'script-shell': process.platform === 'win32' ? process.env.COMSPEC : 'sh',
},
prefixDir: {
node_modules: {
semver: {
'package.json': JSON.stringify({
scripts: {
install: 'testinstall',
},
}),
node_modules: {
abbrev: {},
},
},
'@npmcli': {
'scoped-package': {},
},
},
},
}
const isCmdRe = /(?:^|\\)cmd(?:\.exe)?$/i
t.test('npm edit', async t => {
const { npm, joinedOutput } = await loadMockNpm(t, npmConfig)
const semverPath = path.resolve(npm.prefix, 'node_modules', 'semver')
spawk.spawn('testeditor', [semverPath])
const scriptShell = npm.config.get('script-shell')
const scriptArgs = isCmdRe.test(scriptShell)
? ['/d', '/s', '/c', 'testinstall']
: ['-c', 'testinstall']
spawk.spawn(scriptShell, scriptArgs, { cwd: semverPath })
await npm.exec('edit', ['semver'])
t.match(joinedOutput(), 'rebuilt dependencies successfully')
})
t.test('rebuild failure', async t => {
const { npm } = await loadMockNpm(t, npmConfig)
const semverPath = path.resolve(npm.prefix, 'node_modules', 'semver')
spawk.spawn('testeditor', [semverPath])
const scriptShell = npm.config.get('script-shell')
const scriptArgs = isCmdRe.test(scriptShell)
? ['/d', '/s', '/c', 'testinstall']
: ['-c', 'testinstall']
spawk.spawn(scriptShell, scriptArgs, { cwd: semverPath }).exit(1).stdout('test error')
await t.rejects(
npm.exec('edit', ['semver']),
{ message: 'command failed' }
)
})
t.test('editor failure', async t => {
const { npm } = await loadMockNpm(t, npmConfig)
const semverPath = path.resolve(npm.prefix, 'node_modules', 'semver')
spawk.spawn('testeditor', [semverPath]).exit(1).stdout('test editor failure')
await t.rejects(
npm.exec('edit', ['semver']),
{ message: 'editor process exited with code: 1' }
)
})
t.test('npm edit editor has flags', async t => {
const { npm } = await loadMockNpm(t, {
...npmConfig,
config: {
...npmConfig.config,
editor: 'testeditor --flag',
},
})
const semverPath = path.resolve(npm.prefix, 'node_modules', 'semver')
spawk.spawn('testeditor', ['--flag', semverPath])
const scriptShell = npm.config.get('script-shell')
const scriptArgs = isCmdRe.test(scriptShell)
? ['/d', '/s', '/c', 'testinstall']
: ['-c', 'testinstall']
spawk.spawn(scriptShell, scriptArgs, { cwd: semverPath })
await npm.exec('edit', ['semver'])
})
t.test('npm edit no args', async t => {
const { npm } = await loadMockNpm(t)
await t.rejects(
npm.exec('edit', []),
{ code: 'EUSAGE' },
'throws usage error'
)
})
t.test('npm edit nonexistent package', async t => {
const { npm } = await loadMockNpm(t, npmConfig)
await t.rejects(
npm.exec('edit', ['abbrev']),
/lstat/
)
})
t.test('scoped package', async t => {
const { npm } = await loadMockNpm(t, npmConfig)
const scopedPath = path.resolve(npm.prefix, 'node_modules', '@npmcli', 'scoped-package')
spawk.spawn('testeditor', [scopedPath])
await npm.exec('edit', ['@npmcli/scoped-package'])
})
t.test('subdependency', async t => {
const { npm } = await loadMockNpm(t, npmConfig)
const subdepPath = path.resolve(npm.prefix, 'node_modules', 'semver', 'node_modules', 'abbrev')
spawk.spawn('testeditor', [subdepPath])
await npm.exec('edit', ['semver/abbrev'])
})