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

otplease.js « utils « lib « test - github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 048856b4857707f74cd11c050a33367e49dc0a63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
const { test } = require('tap')
const requireInject = require('require-inject')

const readUserInfo = {
  otp: async () => '1234',
}

const otplease = requireInject('../../../lib/utils/otplease.js', {
  '../../../lib/utils/read-user-info.js': readUserInfo,
})

test('prompts for otp for EOTP', async (t) => {
  const stdinTTY = process.stdin.isTTY
  const stdoutTTY = process.stdout.isTTY
  process.stdin.isTTY = true
  process.stdout.isTTY = true
  t.teardown(() => {
    process.stdin.isTTY = stdinTTY
    process.stdout.isTTY = stdoutTTY
  })

  let runs = 0
  const fn = async (opts) => {
    if (++runs === 1)
      throw Object.assign(new Error('nope'), { code: 'EOTP' })

    t.equal(opts.some, 'prop', 'carried original options')
    t.equal(opts.otp, '1234', 'received the otp')
    t.done()
  }

  await otplease({ some: 'prop' }, fn)
})

test('prompts for otp for 401', async (t) => {
  const stdinTTY = process.stdin.isTTY
  const stdoutTTY = process.stdout.isTTY
  process.stdin.isTTY = true
  process.stdout.isTTY = true
  t.teardown(() => {
    process.stdin.isTTY = stdinTTY
    process.stdout.isTTY = stdoutTTY
  })

  let runs = 0
  const fn = async (opts) => {
    if (++runs === 1) {
      throw Object.assign(new Error('nope'), {
        code: 'E401',
        body: 'one-time pass required',
      })
    }

    t.equal(opts.some, 'prop', 'carried original options')
    t.equal(opts.otp, '1234', 'received the otp')
    t.done()
  }

  await otplease({ some: 'prop' }, fn)
})

test('does not prompt for non-otp errors', async (t) => {
  const stdinTTY = process.stdin.isTTY
  const stdoutTTY = process.stdout.isTTY
  process.stdin.isTTY = true
  process.stdout.isTTY = true
  t.teardown(() => {
    process.stdin.isTTY = stdinTTY
    process.stdout.isTTY = stdoutTTY
  })

  const fn = async (opts) => {
    throw new Error('nope')
  }

  t.rejects(otplease({ some: 'prop' }, fn), { message: 'nope' }, 'rejects with the original error')
})

test('does not prompt if stdin or stdout is not a tty', async (t) => {
  const stdinTTY = process.stdin.isTTY
  const stdoutTTY = process.stdout.isTTY
  process.stdin.isTTY = false
  process.stdout.isTTY = false
  t.teardown(() => {
    process.stdin.isTTY = stdinTTY
    process.stdout.isTTY = stdoutTTY
  })

  const fn = async (opts) => {
    throw Object.assign(new Error('nope'), { code: 'EOTP' })
  }

  t.rejects(otplease({ some: 'prop' }, fn), { message: 'nope' }, 'rejects with the original error')
})