summaryrefslogtreecommitdiff
path: root/deps/npm/test/lib/utils/audit-error.js
blob: 1cb29a0857d75252336c0b0ae9e7649914e6c1e5 (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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
const t = require('tap')
const mockLogs = require('../../fixtures/mock-logs')
const mockNpm = require('../../fixtures/mock-npm')
const tmock = require('../../fixtures/tmock')

const auditError = async (t, { command, error, ...config } = {}) => {
  const { logs, logMocks } = mockLogs()
  const mockAuditError = tmock(t, '{LIB}/utils/audit-error', logMocks)

  const mock = await mockNpm(t, {
    command,
    config,
  })

  const res = {}
  try {
    res.result = mockAuditError(mock.npm, error ? { error } : {})
  } catch (err) {
    res.error = err
  }

  return {
    ...res,
    logs: logs.warn.filter((l) => l[0] === 'audit'),
    output: mock.joinedOutput(),
  }
}

t.test('no error, not audit command', async t => {
  const { result, error, logs, output } = await auditError(t, { command: 'install' })

  t.equal(result, false, 'no error')
  t.notOk(error, 'no error')

  t.strictSame(output, '', 'no output')
  t.strictSame(logs, [], 'no warnings')
})

t.test('error, not audit command', async t => {
  const { result, error, logs, output } = await auditError(t, {
    command: 'install',
    error: {
      message: 'message',
      body: Buffer.from('body'),
      method: 'POST',
      uri: 'https://example.com/not/a/registry',
      headers: {
        head: ['ers'],
      },
      statusCode: '420',
    },
  })

  t.equal(result, true, 'had error')
  t.notOk(error, 'no error')
  t.strictSame(output, '', 'no output')
  t.strictSame(logs, [], 'no warnings')
})

t.test('error, audit command, not json', async t => {
  const { result, error, logs, output } = await auditError(t, {
    command: 'audit',
    error: {
      message: 'message',
      body: Buffer.from('body'),
      method: 'POST',
      uri: 'https://example.com/not/a/registry',
      headers: {
        head: ['ers'],
      },
      statusCode: '420',
    },
  })

  t.equal(result, undefined)

  t.ok(error, 'throws error')
  t.strictSame(output, 'body', 'some output')
  t.strictSame(logs, [['audit', 'message']], 'some warnings')
})

t.test('error, audit command, json', async t => {
  const { result, error, logs, output } = await auditError(t, {
    json: true,
    command: 'audit',
    error: {
      message: 'message',
      body: { response: 'body' },
      method: 'POST',
      uri: 'https://username:password@example.com/not/a/registry',
      headers: {
        head: ['ers'],
      },
      statusCode: '420',
    },
  })

  t.equal(result, undefined)
  t.ok(error, 'throws error')
  t.strictSame(output,
    '{\n' +
      '  "message": "message",\n' +
      '  "method": "POST",\n' +
      '  "uri": "https://username:***@example.com/not/a/registry",\n' +
      '  "headers": {\n' +
      '    "head": [\n' +
      '      "ers"\n' +
      '    ]\n' +
      '  },\n' +
      '  "statusCode": "420",\n' +
      '  "body": {\n' +
      '    "response": "body"\n' +
      '  }\n' +
      '}'
    , 'some output')
  t.strictSame(logs, [['audit', 'message']], 'some warnings')
})