diff options
author | claudiahdz <cghr1990@gmail.com> | 2020-07-08 02:37:13 +0300 |
---|---|---|
committer | claudiahdz <cghr1990@gmail.com> | 2020-07-08 02:37:13 +0300 |
commit | 3fbfaa0ccc4d1188c7bdc7fc9e3a88adcac35e83 (patch) | |
tree | 3ab72c9ed590505a00ec0e636668d6ed8f5f58fa | |
parent | dc0ebf930b54705b0ca2e9e44f7cc6c5a96029da (diff) |
test: clean up prune/dedupe tests suitetest/v7-dedupe
-rw-r--r-- | lib/dedupe.js | 2 | ||||
-rw-r--r-- | test/lib/dedupe.js | 55 | ||||
-rw-r--r-- | test/lib/find-dupes.js | 23 | ||||
-rw-r--r-- | test/lib/prune.js | 8 | ||||
-rw-r--r-- | test/tap/dedupe-git-semver.js | 138 | ||||
-rw-r--r-- | test/tap/dedupe-scoped.js | 155 | ||||
-rw-r--r-- | test/tap/dedupe.js | 122 |
7 files changed, 87 insertions, 416 deletions
diff --git a/lib/dedupe.js b/lib/dedupe.js index f09cd4b06..96591329c 100644 --- a/lib/dedupe.js +++ b/lib/dedupe.js @@ -10,7 +10,7 @@ const completion = (cb) => cb(null, []) const cmd = (args, cb) => dedupe(args).then(() => cb()).catch(cb) const dedupe = async (args) => { - const dryRun = args.dryRun || npm.flatOptions.dryRun + const dryRun = (args && args.dryRun) || npm.flatOptions.dryRun const where = npm.prefix const arb = new Arborist({ ...npm.flatOptions, diff --git a/test/lib/dedupe.js b/test/lib/dedupe.js new file mode 100644 index 000000000..cf6f79e0a --- /dev/null +++ b/test/lib/dedupe.js @@ -0,0 +1,55 @@ +const { test } = require('tap') +const dedupe = require('../../lib/dedupe.js') +const requireInject = require('require-inject') + +test('should remove dupes using Arborist', (t) => { + const dedupe = requireInject('../../lib/dedupe.js', { + '../../lib/npm.js': { + prefix: 'foo', + flatOptions: { + 'dryRun': 'false' + } + }, + '@npmcli/arborist': function (args) { + t.ok(args, 'gets options object') + t.ok(args.path, 'gets path option') + t.ok(args.dryRun, 'gets dryRun from user') + this.dedupe = () => { + t.ok(true, 'dedupe is called') + } + }, + '../../lib/utils/reify-output.js': (arb) => { + t.ok(arb, 'gets arborist tree') + } + }) + dedupe({ dryRun: true }, () => { + t.ok(true, 'callback is called') + t.end() + }) +}) + +test('should remove dupes using Arborist - no arguments', (t) => { + const dedupe = requireInject('../../lib/dedupe.js', { + '../../lib/npm.js': { + prefix: 'foo', + flatOptions: { + 'dryRun': 'true' + } + }, + '@npmcli/arborist': function (args) { + t.ok(args.dryRun, 'gets dryRun from flatOptions') + this.dedupe = () => {} + }, + '../../lib/utils/reify-output.js': () => {} + }) + dedupe(null, () => { + t.end() + }) +}) + +test('calls completion', (t) => { + dedupe.completion(() => { + t.ok(true, 'callback is called') + t.end() + }) +}) diff --git a/test/lib/find-dupes.js b/test/lib/find-dupes.js new file mode 100644 index 000000000..f11eb53e0 --- /dev/null +++ b/test/lib/find-dupes.js @@ -0,0 +1,23 @@ +const { test } = require('tap') +const findDupes = require('../../lib/find-dupes.js') +const requireInject = require('require-inject') + +test('should run dedupe in dryRun mode', (t) => { + const findDupes = requireInject('../../lib/find-dupes.js', { + '../../lib/dedupe.js': function (args, cb) { + t.ok(args.dryRun, 'dryRun is true') + cb() + } + }) + findDupes(null, () => { + t.ok(true, 'callback is called') + t.end() + }) +}) + +test('calls completion', (t) => { + findDupes.completion(() => { + t.ok(true, 'callback is called') + t.end() + }) +}) diff --git a/test/lib/prune.js b/test/lib/prune.js index a89c9d360..8c8eb9fff 100644 --- a/test/lib/prune.js +++ b/test/lib/prune.js @@ -1,4 +1,5 @@ const { test } = require('tap') +const prune = require('../../lib/prune.js') const requireInject = require('require-inject') test('should prune using Arborist', (t) => { @@ -25,3 +26,10 @@ test('should prune using Arborist', (t) => { t.end() }) }) + +test('calls completion', (t) => { + prune.completion(() => { + t.ok(true, 'callback is called') + t.end() + }) +}) diff --git a/test/tap/dedupe-git-semver.js b/test/tap/dedupe-git-semver.js deleted file mode 100644 index b7e31b086..000000000 --- a/test/tap/dedupe-git-semver.js +++ /dev/null @@ -1,138 +0,0 @@ -'use strict' -const fs = require('fs') -const path = require('path') -const test = require('tap').test -const requireInject = require('require-inject') -const Tacks = require('tacks') -const File = Tacks.File -const Dir = Tacks.Dir - -const manifests = { - 'git-wrap': { - name: 'git-wrap', - version: '1.0.0', - dependencies: { - git: 'git+https://example.com/git#semver:1.0' - } - }, - git: { - name: 'git', - version: '1.0.0' - } -} - -const npm = requireInject.installGlobally('../../lib/npm.js', { - pacote: { - manifest: function (spec) { - const manifest = manifests[spec.name] - manifest._requested = spec - manifest._resolved = spec.saveSpec.replace(/^file:/, '').replace(/(:?#.*)$/, '#0000000000000000000000000000000000000000') - manifest._from = spec.rawSpec - return Promise.resolve(manifest) - } - }, - '../../lib/utils/output.js': function () { - // do not output to stdout - } -}) - -const common = require('../common-tap.js') -const basedir = common.pkg -const testdir = path.join(basedir, 'testdir') -const cachedir = common.cache -const tmpdir = path.join(basedir, 'tmp') - -const cwd = process.cwd() - -const conf = { - cache: cachedir, - tmp: tmpdir, - loglevel: 'silent', - 'package-lock-only': true -} - -const fixture = new Tacks(Dir({ - cache: Dir(), - global: Dir(), - tmp: Dir(), - testdir: Dir({ - 'package.json': File({ - name: 'fixture', - version: '1.0.0', - dependencies: { - git: 'git+https://example.com/git#semver:1', - 'git-wrap': 'file:git-wrap-1.0.0.tgz' - } - }), - // Tarball source: - // 'git-wrap': Dir({ - // 'package.json': File({ - // name: 'git-wrap', - // version: '1.0.0', - // dependencies: { - // git: 'git+https://example.com/git#semver:1.0' - // } - // }) - // }), - 'git-wrap-1.0.0.tgz': File(Buffer.from( - '1f8b0800000000000003ed8fcd0ac23010843df729423caaf9c13642df26' + - 'b44bad9a3434f107a4efeec68aa7de2c8898ef32cb0c3bec3a5d1d7503dc' + - '8dca0ebeb38b991142a83c27537e44ee30db164a48a994c01987a210a873' + - '1f32c5d907dde3299ff68cbf90b7fe08f78c106ab5015a12dab46173edb5' + - 'a3ebe85ea0f76d676320996062746b70606bb0550b1ea3b84f9e9baf82d5' + - '3e04e74bcee1a68d3b01ab3ac3d15f7a30d8586215c59d211bb26fff9e48' + - '2412ffcc034458283d00080000', - 'hex' - )) - }) -})) - -function setup () { - cleanup() - fixture.create(basedir) -} - -function cleanup () { - fixture.remove(basedir) -} - -test('setup', function (t) { - setup() - process.chdir(testdir) - npm.load(conf, function (err) { - if (err) throw err - t.done() - }) -}) - -test('dedupe matching git semver ranges', function (t) { - npm.commands.install(function (err) { - if (err) throw err - const packageLock = JSON.parse(fs.readFileSync('package-lock.json')) - t.same(packageLock, { - name: 'fixture', - version: '1.0.0', - lockfileVersion: 1, - requires: true, - dependencies: { - git: { - from: 'git+https://example.com/git#semver:1', - version: 'git+https://example.com/git#0000000000000000000000000000000000000000' - }, - 'git-wrap': { - version: 'file:git-wrap-1.0.0.tgz', - requires: { - git: 'git+https://example.com/git#semver:1' - } - } - } - }) - t.done() - }) -}) - -test('cleanup', function (t) { - process.chdir(cwd) - cleanup() - t.done() -}) diff --git a/test/tap/dedupe-scoped.js b/test/tap/dedupe-scoped.js deleted file mode 100644 index 957f67e14..000000000 --- a/test/tap/dedupe-scoped.js +++ /dev/null @@ -1,155 +0,0 @@ -var fs = require('fs') -var join = require('path').join - -var mkdirp = require('mkdirp') -var rimraf = require('rimraf') -var test = require('tap').test - -var common = require('../common-tap.js') -var pkg = common.pkg -var modules = join(pkg, 'node_modules') - -var EXEC_OPTS = { cwd: pkg } - -var body = [ - 'move\t@scope/shared\t2.1.6\tnode_modules/@scope/shared\t\tnode_modules/first/node_modules/@scope/shared', - 'move\tfirstUnique\t0.6.0\tnode_modules/firstUnique\t\tnode_modules/first/node_modules/firstUnique', - 'remove\t@scope/shared\t2.1.6\tnode_modules/second/node_modules/@scope/shared', - 'move\tsecondUnique\t1.2.0\tnode_modules/secondUnique\t\tnode_modules/second/node_modules/secondUnique' -] - -var deduper = { - 'name': 'dedupe', - 'version': '0.0.0', - 'dependencies': { - 'first': '1.0.0', - 'second': '2.0.0' - } -} - -var first = { - 'name': 'first', - 'version': '1.0.0', - 'dependencies': { - 'firstUnique': '0.6.0', - '@scope/shared': '2.1.6' - }, - '_resolved': 'foo', - '_integrity': 'sha1-deadbeef' -} - -var second = { - 'name': 'second', - 'version': '2.0.0', - 'dependencies': { - 'secondUnique': '1.2.0', - '@scope/shared': '2.1.6' - }, - '_resolved': 'foo', - '_integrity': 'sha1-deadbeef' -} - -var shared = { - 'name': '@scope/shared', - 'version': '2.1.6', - '_resolved': 'foo', - '_integrity': 'sha1-deadbeef' -} - -var firstUnique = { - 'name': 'firstUnique', - 'version': '0.6.0', - '_resolved': 'foo', - '_integrity': 'sha1-deadbeef' -} - -var secondUnique = { - 'name': 'secondUnique', - 'version': '1.2.0', - '_resolved': 'foo', - '_integrity': 'sha1-deadbeef' -} - -test('setup', function (t) { - setup() - t.end() -}) - -// we like the cars -function ltrimm (l) { return l.trim() } - -test('dedupe finds the common scoped modules and moves it up one level', function (t) { - common.npm( - [ - 'find-dupes' // I actually found a use for this command! - ], - EXEC_OPTS, - function (err, code, stdout, stderr) { - t.ifError(err, 'successful dry run against fake install') - t.notOk(code, 'npm ran without issue') - t.notOk(stderr, 'npm printed no errors') - t.same( - stdout.trim().replace(/\\/g, '/').split('\n').map(ltrimm), - body.map(ltrimm), - 'got expected output' - ) - - t.end() - } - ) -}) - -test('cleanup', function (t) { - cleanup() - t.end() -}) - -function setup (cb) { - cleanup() - - mkdirp.sync(pkg) - fs.writeFileSync( - join(pkg, 'package.json'), - JSON.stringify(deduper, null, 2) - ) - - mkdirp.sync(join(modules, 'first')) - fs.writeFileSync( - join(modules, 'first', 'package.json'), - JSON.stringify(first, null, 2) - ) - - mkdirp.sync(join(modules, 'first', 'node_modules', 'firstUnique')) - fs.writeFileSync( - join(modules, 'first', 'node_modules', 'firstUnique', 'package.json'), - JSON.stringify(firstUnique, null, 2) - ) - - mkdirp.sync(join(modules, 'first', 'node_modules', '@scope', 'shared')) - fs.writeFileSync( - join(modules, 'first', 'node_modules', '@scope', 'shared', 'package.json'), - JSON.stringify(shared, null, 2) - ) - - mkdirp.sync(join(modules, 'second')) - fs.writeFileSync( - join(modules, 'second', 'package.json'), - JSON.stringify(second, null, 2) - ) - - mkdirp.sync(join(modules, 'second', 'node_modules', 'secondUnique')) - fs.writeFileSync( - join(modules, 'second', 'node_modules', 'secondUnique', 'package.json'), - JSON.stringify(secondUnique, null, 2) - ) - - mkdirp.sync(join(modules, 'second', 'node_modules', '@scope', 'shared')) - fs.writeFileSync( - join(modules, 'second', 'node_modules', '@scope', 'shared', 'package.json'), - JSON.stringify(shared, null, 2) - ) -} - -function cleanup () { - rimraf.sync(pkg) -} diff --git a/test/tap/dedupe.js b/test/tap/dedupe.js deleted file mode 100644 index 109f81656..000000000 --- a/test/tap/dedupe.js +++ /dev/null @@ -1,122 +0,0 @@ -var fs = require('graceful-fs') -var path = require('path') -var existsSync = fs.existsSync || path.existsSync - -var mkdirp = require('mkdirp') -var mr = require('npm-registry-mock') -var rimraf = require('rimraf') -var test = require('tap').test - -var common = require('../common-tap.js') -var server - -var pkg = common.pkg - -var EXEC_OPTS = { cwd: pkg } - -var json = { - author: 'Dedupe tester', - name: 'dedupe', - version: '0.0.0', - dependencies: { - optimist: '0.6.0', - clean: '2.1.6' - } -} - -var shrinkwrap = { - name: 'dedupe', - version: '0.0.0', - dependencies: { - clean: { - version: '2.1.6', - dependencies: { - checker: { - version: '0.5.2', - dependencies: { - async: { version: '0.2.10' } - } - }, - minimist: { version: '0.0.5' } - } - }, - optimist: { - version: '0.6.0', - dependencies: { - wordwrap: { version: '0.0.2' }, - minimist: { version: '0.0.5' } - } - } - } -} - -test('setup', function (t) { - t.comment('test for https://github.com/npm/npm/issues/4675') - setup(function () { - t.end() - }) -}) - -test('dedupe finds the common module and moves it up one level', function (t) { - common.npm([ - '--registry', common.registry, - '--no-save', - 'install', '.' - ], - EXEC_OPTS, - function (err, code) { - t.ifError(err, 'successfully installed directory') - t.equal(code, 0, 'npm install exited with code') - common.npm( - [ - 'dedupe' - ], - EXEC_OPTS, - function (err, code) { - t.ifError(err, 'successfully deduped against previous install') - t.notOk(code, 'npm dedupe exited with code') - - t.ok(existsSync(path.join(pkg, 'node_modules', 'minimist')), 'minimist module exists') - t.notOk( - existsSync(path.join(pkg, 'node_modules', 'clean', 'node_modules', 'minimist')), - 'no clean/minimist' - ) - t.notOk( - existsSync(path.join(pkg, 'node_modules', 'optimist', 'node_modules', 'minimist')), - 'no optmist/minimist' - ) - t.end() - } - ) - }) -}) - -test('cleanup', function (t) { - server.close() - cleanup() - - t.end() -}) - -function cleanup () { - rimraf.sync(pkg) -} - -function setup (cb) { - cleanup() - mkdirp.sync(pkg) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - fs.writeFileSync( - path.join(pkg, 'npm-shrinkwrap.json'), - JSON.stringify(shrinkwrap, null, 2) - ) - process.chdir(pkg) - - mr({ port: common.port }, function (er, s) { - server = s - cb() - }) -} |