Files
ArtPlayer/refactor/scripts/install-graph.test.mjs
T

48 lines
2.7 KiB
JavaScript

import assert from 'node:assert/strict'
import fs from 'node:fs'
import path from 'node:path'
// eslint-disable-next-line test/no-import-node-test -- Verify install comparison cannot borrow ancestor dependencies.
import test from 'node:test'
import { consumerDirectory, removeConsumer } from '../../scripts/package-consumer.mjs'
import { installedGraph } from './install-graph.mjs'
function write(directory, manifest) {
fs.mkdirSync(directory, { recursive: true })
fs.writeFileSync(path.join(directory, 'package.json'), JSON.stringify(manifest))
}
test('installation audit rejects a dependency resolved from the parent checkout', () => {
const directory = consumerDirectory()
try {
const root = path.join(directory, 'checkout')
write(root, { name: 'root', version: '1.0.0', dependencies: { borrowed: '1.0.0' } })
fs.mkdirSync(path.join(root, 'packages'))
write(path.join(directory, 'node_modules/borrowed'), { name: 'borrowed', version: '1.0.0' })
assert.throws(() => installedGraph(root), /escaped isolated checkout/)
}
finally { removeConsumer(directory) }
})
test('installation audit records workspace peers, nested resolution and resource identities', () => {
const directory = consumerDirectory()
try {
write(directory, { name: 'root', version: '1.0.0', devDependencies: { compiler: '1.0.0' }, dependencies: { buffer: '5.7.1' } })
write(path.join(directory, 'node_modules/buffer'), { name: 'buffer', version: '5.7.1' })
write(path.join(directory, 'node_modules/compiler'), { name: 'compiler', version: '1.0.0', dependencies: { engine: '2.0.0' }, scripts: { postinstall: 'node install.js' } })
write(path.join(directory, 'node_modules/compiler/node_modules/engine'), { name: 'engine', version: '2.0.0' })
fs.writeFileSync(path.join(directory, 'node_modules/compiler/node_modules/engine/code.wasm'), 'fixture')
write(path.join(directory, 'packages/plugin'), { name: 'plugin', version: '1.0.0', peerDependencies: { host: '^1' }, peerDependenciesMeta: { host: { optional: true } } })
const graph = installedGraph(directory)
assert.equal(graph.rootTools[0].resolved, 'compiler@1.0.0')
assert.equal(graph.requests.find(item => item.name === 'buffer').resolved, 'buffer@5.7.1')
assert.equal(graph.requests.find(item => item.name === 'engine').resolved, 'engine@2.0.0')
assert.equal(graph.missing[0].name, 'host')
assert.equal(graph.missing[0].optional, true)
assert.equal(graph.resources.length, 1)
assert.equal(graph.resources[0].package, 'engine@2.0.0')
assert.equal(graph.resources[0].bytes, 7)
assert.equal(graph.packages.find(item => item.name === 'compiler').lifecycle.postinstall, 'node install.js')
}
finally { removeConsumer(directory) }
})