0
0
mirror of https://github.com/nodejs/node.git synced 2024-11-28 14:33:11 +01:00
nodejs/deps/npm/test/lib/utils/installed-deep.js
npm CLI robot c923ce7414
deps: upgrade npm to 10.7.0
PR-URL: https://github.com/nodejs/node/pull/52767
Reviewed-By: Richard Lau <rlau@redhat.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
2024-05-01 06:53:22 +00:00

206 lines
3.9 KiB
JavaScript

const t = require('tap')
const installedDeep = require('../../../lib/utils/installed-deep.js')
const mockNpm = require('../../fixtures/mock-npm')
const fixture = {
'package.json': JSON.stringify({
name: 'test-installed-deep',
version: '1.0.0',
dependencies: {
a: '^1.0.0',
b: '^1.0.0',
c: '^1.0.0',
},
devDependencies: {
d: '^1.0.0',
},
peerDependencies: {
e: '^1.0.0',
},
}),
node_modules: {
a: {
'package.json': JSON.stringify({
name: 'a',
version: '1.0.0',
dependencies: {
f: '^1.0.0',
},
}),
},
b: {
'package.json': JSON.stringify({
name: 'b',
version: '1.0.0',
}),
},
c: {
'package.json': JSON.stringify({
name: 'c',
version: '1.0.0',
dependencies: {
ch: '1.0.0',
},
}),
},
ch: {
'package.json': JSON.stringify({
name: 'ch',
version: '1.0.0',
}),
},
d: {
'package.json': JSON.stringify({
name: 'd',
version: '1.0.0',
}),
},
e: {
'package.json': JSON.stringify({
name: 'e',
version: '1.0.0',
}),
},
f: {
'package.json': JSON.stringify({
name: 'f',
version: '1.0.0',
dependencies: {
g: '^1.0.0',
e: '^2.0.0',
},
}),
node_modules: {
e: {
'package.json': JSON.stringify({
name: 'e',
version: '2.0.0',
dependencies: {
bb: '^1.0.0',
},
}),
node_modules: {
bb: {
'package.json': JSON.stringify({
name: 'bb',
version: '1.0.0',
}),
},
},
},
},
},
g: {
'package.json': JSON.stringify({
name: 'g',
version: '1.0.0',
}),
},
},
}
const globalFixture = {
node_modules: {
foo: {
'package.json': JSON.stringify({
name: 'foo',
version: '1.0.0',
}),
},
bar: {
'package.json': JSON.stringify({
name: 'bar',
version: '1.0.0',
dependencies: {
'a-bar': '^1.0.0',
},
}),
node_modules: {
'a-bar': {
'package.json': JSON.stringify({
name: 'a-bar',
version: '1.0.0',
}),
},
},
},
},
}
const mockDeep = async (t, config) => {
const mock = await mockNpm(t, {
prefixDir: fixture,
globalPrefixDir: globalFixture,
config: {
depth: Infinity,
...config,
},
})
const res = await installedDeep(mock.npm)
return res
}
t.test('get list of package names', async t => {
const res = await mockDeep(t)
t.same(
res,
[
['bar', '-g'],
['foo', '-g'],
['a-bar', '-g'],
'a', 'b', 'c',
'ch', 'd', 'e',
'f', 'g', 'bb',
],
'should return list of package names and global flag'
)
t.end()
})
t.test('get list of package names as global', async t => {
const res = await mockDeep(t, { global: true })
t.same(
res,
[
'bar',
'foo',
'a-bar',
],
'should return list of global packages with no extra flags'
)
})
t.test('limit depth', async t => {
const res = await mockDeep(t, { depth: 0 })
t.same(
res,
[
['bar', '-g'],
['foo', '-g'],
// XXX https://github.com/npm/statusboard/issues/380
['a-bar', '-g'],
'a', 'b',
'c', 'ch',
'd', 'e',
'f', 'g',
],
'should print only packages up to the specified depth'
)
})
t.test('limit depth as global', async t => {
const res = await mockDeep(t, { depth: 0, global: true })
t.same(
res,
[
'bar',
'foo',
// https://github.com/npm/statusboard/issues/380
'a-bar',
],
'should reorder so that packages above that level depth goes last'
)
})