summaryrefslogtreecommitdiff
path: root/deps/npm/test/lib/utils
diff options
context:
space:
mode:
authornpm CLI robot <npm-cli+bot@github.com>2022-06-24 18:21:50 -0700
committerGitHub <noreply@github.com>2022-06-25 02:21:50 +0100
commit687e50aded0d264873911847717e7567382b1401 (patch)
treeb7f38b32e988bf3f7a9567dc3cd1c62e0be1c43f /deps/npm/test/lib/utils
parent3507b3f9a9da6c451c18f303d3b96e4deedf2f5b (diff)
downloadnode-new-687e50aded0d264873911847717e7567382b1401.tar.gz
deps: upgrade npm to 8.13.1
PR-URL: https://github.com/nodejs/node/pull/43552 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com>
Diffstat (limited to 'deps/npm/test/lib/utils')
-rw-r--r--deps/npm/test/lib/utils/open-url-prompt.js150
1 files changed, 150 insertions, 0 deletions
diff --git a/deps/npm/test/lib/utils/open-url-prompt.js b/deps/npm/test/lib/utils/open-url-prompt.js
new file mode 100644
index 0000000000..6908e36b7c
--- /dev/null
+++ b/deps/npm/test/lib/utils/open-url-prompt.js
@@ -0,0 +1,150 @@
+const t = require('tap')
+const mockGlobals = require('../../fixtures/mock-globals.js')
+const EventEmitter = require('events')
+
+const OUTPUT = []
+const output = (...args) => OUTPUT.push(args)
+const npm = {
+ _config: {
+ json: false,
+ browser: true,
+ },
+ config: {
+ get: k => npm._config[k],
+ set: (k, v) => {
+ npm._config[k] = v
+ },
+ },
+ output,
+}
+
+let openerUrl = null
+let openerOpts = null
+let openerResult = null
+const opener = (url, opts, cb) => {
+ openerUrl = url
+ openerOpts = opts
+ return cb(openerResult)
+}
+
+let questionShouldResolve = true
+const readline = {
+ createInterface: () => ({
+ question: (_q, cb) => {
+ if (questionShouldResolve === true) {
+ cb()
+ }
+ },
+ close: () => {},
+ }),
+}
+
+const openUrlPrompt = t.mock('../../../lib/utils/open-url-prompt.js', {
+ opener,
+ readline,
+})
+
+mockGlobals(t, {
+ 'process.stdin.isTTY': true,
+ 'process.stdout.isTTY': true,
+})
+
+t.test('does not open a url in non-interactive environments', async t => {
+ t.teardown(() => {
+ openerUrl = null
+ openerOpts = null
+ OUTPUT.length = 0
+ })
+
+ mockGlobals(t, {
+ 'process.stdin.isTTY': false,
+ 'process.stdout.isTTY': false,
+ })
+
+ await openUrlPrompt(npm, 'https://www.npmjs.com', 'npm home', 'prompt')
+ t.equal(openerUrl, null, 'did not open')
+ t.same(openerOpts, null, 'did not open')
+})
+
+t.test('opens a url', async t => {
+ t.teardown(() => {
+ openerUrl = null
+ openerOpts = null
+ OUTPUT.length = 0
+ npm._config.browser = true
+ })
+
+ npm._config.browser = 'browser'
+ await openUrlPrompt(npm, 'https://www.npmjs.com', 'npm home', 'prompt')
+ t.equal(openerUrl, 'https://www.npmjs.com', 'opened the given url')
+ t.same(openerOpts, { command: 'browser' }, 'passed command as null (the default)')
+ t.matchSnapshot(OUTPUT)
+})
+
+t.test('prints json output', async t => {
+ t.teardown(() => {
+ openerUrl = null
+ openerOpts = null
+ OUTPUT.length = 0
+ npm._config.json = false
+ })
+
+ npm._config.json = true
+ await openUrlPrompt(npm, 'https://www.npmjs.com', 'npm home', 'prompt')
+ t.matchSnapshot(OUTPUT)
+})
+
+t.test('returns error for non-https url', async t => {
+ t.teardown(() => {
+ openerUrl = null
+ openerOpts = null
+ OUTPUT.length = 0
+ })
+ await t.rejects(
+ openUrlPrompt(npm, 'ftp://www.npmjs.com', 'npm home', 'prompt'),
+ /Invalid URL/,
+ 'got the correct error'
+ )
+ t.equal(openerUrl, null, 'did not open')
+ t.same(openerOpts, null, 'did not open')
+ t.same(OUTPUT, [], 'printed no output')
+})
+
+t.test('does not open url if canceled', async t => {
+ t.teardown(() => {
+ openerUrl = null
+ openerOpts = null
+ OUTPUT.length = 0
+ questionShouldResolve = true
+ })
+
+ questionShouldResolve = false
+ const emitter = new EventEmitter()
+
+ const open = openUrlPrompt(npm, 'https://www.npmjs.com', 'npm home', 'prompt', emitter)
+
+ emitter.emit('abort')
+
+ await open
+
+ t.equal(openerUrl, null, 'did not open')
+ t.same(openerOpts, null, 'did not open')
+})
+
+t.test('returns error when opener errors', async t => {
+ t.teardown(() => {
+ openerUrl = null
+ openerOpts = null
+ openerResult = null
+ OUTPUT.length = 0
+ })
+
+ openerResult = new Error('Opener failed')
+
+ await t.rejects(
+ openUrlPrompt(npm, 'https://www.npmjs.com', 'npm home', 'prompt'),
+ /Opener failed/,
+ 'got the correct error'
+ )
+ t.equal(openerUrl, 'https://www.npmjs.com', 'did not open')
+})