%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/ci.js |
const t = require('tap') const { load: _loadMockNpm } = require('../../fixtures/mock-npm') const MockRegistry = require('@npmcli/mock-registry') const path = require('path') const fs = require('fs') // t.cleanSnapshot = str => str.replace(/ in [0-9ms]+/g, ' in {TIME}') const loadMockNpm = async (t, opts) => { const mock = await _loadMockNpm(t, opts) const registry = new MockRegistry({ tap: t, registry: mock.npm.config.get('registry'), }) return { registry, ...mock } } const packageJson = { name: 'test-package', version: '1.0.0', dependencies: { abbrev: '^1.0.0', }, } const packageLock = { name: 'test-package', version: '1.0.0', lockfileVersion: 2, requires: true, packages: { '': { name: 'test-package', version: '1.0.0', dependencies: { abbrev: '^1.0.0', }, }, 'node_modules/abbrev': { version: '1.0.0', resolved: 'https://registry.npmjs.org/abbrev/-/abbrev-1.0.0.tgz', // integrity changes w/ each test cause the path is different? }, }, dependencies: { abbrev: { version: '1.0.0', resolved: 'https://registry.npmjs.org/abbrev/-/abbrev-1.0.0.tgz', // integrity changes w/ each test cause the path is different? }, }, } const abbrev = { 'package.json': '{"name": "abbrev", "version": "1.0.0"}', test: 'test file', } t.test('reifies, audits, removes node_modules', async t => { const { npm, joinedOutput, registry } = await loadMockNpm(t, { prefixDir: { abbrev: abbrev, 'package.json': JSON.stringify(packageJson), 'package-lock.json': JSON.stringify(packageLock), node_modules: { test: 'test file that will be removed' }, }, }) const manifest = registry.manifest({ name: 'abbrev' }) await registry.tarball({ manifest: manifest.versions['1.0.0'], tarball: path.join(npm.prefix, 'abbrev'), }) registry.nock.post('/-/npm/v1/security/advisories/bulk').reply(200, {}) await npm.exec('ci', []) t.match(joinedOutput(), 'added 1 package, and audited 2 packages in') const nmTest = path.join(npm.prefix, 'node_modules', 'test') t.equal(fs.existsSync(nmTest), false, 'existing node_modules is removed') const nmAbbrev = path.join(npm.prefix, 'node_modules', 'abbrev') t.equal(fs.existsSync(nmAbbrev), true, 'installs abbrev') }) t.test('reifies, audits, removes node_modules on repeat run', async t => { const { npm, joinedOutput, registry } = await loadMockNpm(t, { prefixDir: { abbrev: abbrev, 'package.json': JSON.stringify(packageJson), 'package-lock.json': JSON.stringify(packageLock), node_modules: { test: 'test file that will be removed' }, }, }) const manifest = registry.manifest({ name: 'abbrev' }) await registry.tarball({ manifest: manifest.versions['1.0.0'], tarball: path.join(npm.prefix, 'abbrev'), }) registry.nock.post('/-/npm/v1/security/advisories/bulk').reply(200, {}) await npm.exec('ci', []) await npm.exec('ci', []) t.match(joinedOutput(), 'added 1 package, and audited 2 packages in') const nmTest = path.join(npm.prefix, 'node_modules', 'test') t.equal(fs.existsSync(nmTest), false, 'existing node_modules is removed') const nmAbbrev = path.join(npm.prefix, 'node_modules', 'abbrev') t.equal(fs.existsSync(nmAbbrev), true, 'installs abbrev') }) t.test('--no-audit and --ignore-scripts', async t => { const { npm, joinedOutput, registry } = await loadMockNpm(t, { config: { 'ignore-scripts': true, audit: false, }, prefixDir: { abbrev: { 'package.json': '{"name": "abbrev", "version": "1.0.0"}', test: 'test-file', }, 'package.json': JSON.stringify({ ...packageJson, // Would make install fail scripts: { install: 'echo "SHOULD NOT RUN" && exit 1' }, }), 'package-lock.json': JSON.stringify(packageLock), }, }) require('nock').emitter.on('no match', req => { t.fail('Should not audit') }) const manifest = registry.manifest({ name: 'abbrev' }) await registry.tarball({ manifest: manifest.versions['1.0.0'], tarball: path.join(npm.prefix, 'abbrev'), }) await npm.exec('ci', []) t.match(joinedOutput(), 'added 1 package in', 'would fail if install script ran') }) t.test('lifecycle scripts', async t => { const scripts = [] const { npm, registry } = await loadMockNpm(t, { prefixDir: { abbrev: abbrev, 'package.json': JSON.stringify(packageJson), 'package-lock.json': JSON.stringify(packageLock), }, mocks: { '@npmcli/run-script': (opts) => { t.ok(opts.banner) scripts.push(opts.event) }, }, }) const manifest = registry.manifest({ name: 'abbrev' }) await registry.tarball({ manifest: manifest.versions['1.0.0'], tarball: path.join(npm.prefix, 'abbrev'), }) registry.nock.post('/-/npm/v1/security/advisories/bulk').reply(200, {}) await npm.exec('ci', []) t.same(scripts, [ 'preinstall', 'install', 'postinstall', 'prepublish', 'preprepare', 'prepare', 'postprepare', ], 'runs appropriate scripts, in order') }) t.test('should throw if package-lock.json or npm-shrinkwrap missing', async t => { const { npm } = await loadMockNpm(t, { prefixDir: { 'package.json': JSON.stringify(packageJson), node_modules: { 'test-file': 'should not be removed', }, }, }) await t.rejects(npm.exec('ci', []), { code: 'EUSAGE', message: /package-lock.json/ }) const nmTestFile = path.join(npm.prefix, 'node_modules', 'test-file') t.equal(fs.existsSync(nmTestFile), true, 'does not remove node_modules') }) t.test('should throw ECIGLOBAL', async t => { const { npm } = await loadMockNpm(t, { config: { global: true }, }) await t.rejects(npm.exec('ci', []), { code: 'ECIGLOBAL' }) }) t.test('should throw error when ideal inventory mismatches virtual', async t => { const { npm, registry } = await loadMockNpm(t, { prefixDir: { abbrev: abbrev, 'package.json': JSON.stringify({ ...packageJson, dependencies: { notabbrev: '^1.0.0' }, }), 'package-lock.json': JSON.stringify(packageLock), node_modules: { 'test-file': 'should not be removed', }, }, }) const manifest = registry.manifest({ name: 'notabbrev' }) await registry.package({ manifest }) await t.rejects( npm.exec('ci', []), { code: 'EUSAGE', message: /in sync/ } ) const nmTestFile = path.join(npm.prefix, 'node_modules', 'test-file') t.equal(fs.existsSync(nmTestFile), true, 'does not remove node_modules') })