Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuy Adorno <ruyadorno@hotmail.com>2020-12-02 01:52:35 +0300
committerRuy Adorno <ruyadorno@hotmail.com>2020-12-04 22:19:09 +0300
commitbc655b17e841eabc67a66c236dfb0aa9ca0317f1 (patch)
tree82d2162e5c1fea49c4c232fff0311c7b4565e6f9 /test/lib/update.js
parent2a1192e4b03acdf6e6e24e58de68f736ab9bb35f (diff)
test: add lib/update.js tests
Fixes: https://github.com/npm/statusboard/issues/181 PR-URL: https://github.com/npm/cli/pull/2275 Credit: @ruyadorno Close: #2275 Reviewed-by: @nlf
Diffstat (limited to 'test/lib/update.js')
-rw-r--r--test/lib/update.js162
1 files changed, 162 insertions, 0 deletions
diff --git a/test/lib/update.js b/test/lib/update.js
new file mode 100644
index 000000000..993fbbab5
--- /dev/null
+++ b/test/lib/update.js
@@ -0,0 +1,162 @@
+const { resolve } = require('path')
+const t = require('tap')
+const requireInject = require('require-inject')
+
+const noop = () => null
+const npm = {
+ globalDir: '',
+ flatOptions: {
+ depth: 0,
+ global: false,
+ },
+ prefix: '',
+}
+const mocks = {
+ npmlog: { warn () {} },
+ '@npmcli/arborist': class {
+ reify () {}
+ },
+ '../../lib/npm.js': npm,
+ '../../lib/utils/reify-finish.js': noop,
+ '../../lib/utils/usage.js': () => 'usage instructions',
+}
+
+t.afterEach(cb => {
+ npm.prefix = ''
+ npm.flatOptions.global = false
+ npm.globalDir = ''
+ cb()
+})
+
+t.test('no args', t => {
+ t.plan(3)
+
+ npm.prefix = '/project/a'
+
+ class Arborist {
+ constructor (args) {
+ t.deepEqual(
+ args,
+ { ...npm.flatOptions, path: npm.prefix },
+ 'should call arborist contructor with expected args'
+ )
+ }
+
+ reify ({ update }) {
+ t.equal(update, true, 'should update all deps')
+ }
+ }
+
+ const update = requireInject('../../lib/update.js', {
+ ...mocks,
+ '../../lib/utils/reify-finish.js': (arb) => {
+ t.isLike(arb, Arborist, 'should reify-finish with arborist instance')
+ },
+ '@npmcli/arborist': Arborist,
+ })
+
+ update([], err => {
+ if (err)
+ throw err
+ })
+})
+
+t.test('with args', t => {
+ t.plan(3)
+
+ npm.prefix = '/project/a'
+
+ class Arborist {
+ constructor (args) {
+ t.deepEqual(
+ args,
+ { ...npm.flatOptions, path: npm.prefix },
+ 'should call arborist contructor with expected args'
+ )
+ }
+
+ reify ({ update }) {
+ t.deepEqual(update, ['ipt'], 'should update listed deps')
+ }
+ }
+
+ const update = requireInject('../../lib/update.js', {
+ ...mocks,
+ '../../lib/utils/reify-finish.js': (arb) => {
+ t.isLike(arb, Arborist, 'should reify-finish with arborist instance')
+ },
+ '@npmcli/arborist': Arborist,
+ })
+
+ update(['ipt'], err => {
+ if (err)
+ throw err
+ })
+})
+
+t.test('update --depth=<number>', t => {
+ t.plan(2)
+
+ npm.prefix = '/project/a'
+ npm.flatOptions.depth = 1
+
+ const update = requireInject('../../lib/update.js', {
+ ...mocks,
+ npmlog: {
+ warn: (title, msg) => {
+ t.equal(title, 'update', 'should print expected title')
+ t.match(
+ msg,
+ /The --depth option no longer has any effect/,
+ 'should print expected warning message'
+ )
+ },
+ },
+ })
+
+ update([], err => {
+ if (err)
+ throw err
+ })
+})
+
+t.test('update --global', t => {
+ t.plan(2)
+
+ const normalizePath = p => p.replace(/\\+/g, '/')
+ const redactCwd = (path) => normalizePath(path)
+ .replace(new RegExp(normalizePath(process.cwd()), 'g'), '{CWD}')
+
+ npm.prefix = '/project/a'
+ npm.globalDir = resolve(process.cwd(), 'global/lib/node_modules')
+ npm.flatOptions.global = true
+
+ class Arborist {
+ constructor (args) {
+ const { path, ...opts } = args
+ t.deepEqual(
+ opts,
+ npm.flatOptions,
+ 'should call arborist contructor with expected options'
+ )
+
+ t.equal(
+ redactCwd(path),
+ '{CWD}/global/lib',
+ 'should run with expected prefix'
+ )
+ }
+
+ reify () {}
+ }
+
+ const update = requireInject('../../lib/update.js', {
+ ...mocks,
+ '@npmcli/arborist': Arborist,
+ })
+
+ update([], err => {
+ if (err)
+ throw err
+ })
+})