• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict'
2
3const common = require('../common-tap.js')
4const test = require('tap').test
5
6test('hook add', (t) => {
7  let body
8  return common.withServer(server => {
9    server.filteringRequestBody(bod => {
10      body = JSON.parse(bod)
11      t.deepEqual(body, {
12        type: 'owner',
13        name: 'zkat',
14        endpoint: 'https://example.com',
15        secret: 'sekrit'
16      }, 'request sent correct body')
17      return true
18    })
19      .post('/-/npm/v1/hooks/hook', true)
20      .reply(201, {
21        name: 'zkat',
22        type: 'owner',
23        endpoint: 'https://example.com'
24      })
25    return common.npm([
26      'hook', 'add', '~zkat', 'https://example.com', 'sekrit',
27      '--registry', server.registry
28    ], {}).then(([code, stdout, stderr]) => {
29      t.comment(stdout)
30      t.comment(stderr)
31      t.equal(code, 0, 'exited successfully')
32      t.match(
33        stdout.trim(),
34        /^\+ ~zkat.*https:\/\/example\.com$/,
35        'output info about new hook'
36      )
37    })
38  })
39})
40
41test('hook add --json', (t) => {
42  return common.withServer(server => {
43    server
44      .filteringRequestBody(() => true)
45      .post('/-/npm/v1/hooks/hook', true)
46      .reply(201, {
47        name: 'npm',
48        type: 'scope',
49        endpoint: 'https://example.com'
50      })
51    return common.npm([
52      'hook', 'add', '~zkat', 'https://example.com', 'sekrit',
53      '--json',
54      '--registry', server.registry
55    ], {}).then(([code, stdout, stderr]) => {
56      t.comment(stdout)
57      t.comment(stderr)
58      t.equal(code, 0, 'exited successfully')
59      t.deepEqual(JSON.parse(stdout), {
60        name: 'npm',
61        type: 'scope',
62        endpoint: 'https://example.com'
63      }, 'json response data returned')
64    })
65  })
66})
67
68test('hook rm', t => {
69  return common.withServer(server => {
70    server
71      .delete('/-/npm/v1/hooks/hook/dead%40beef')
72      .reply(200, {
73        name: 'zkat',
74        type: 'owner',
75        endpoint: 'https://example.com',
76        secret: 'sekrit'
77      })
78    return common.npm([
79      'hook', 'rm', 'dead@beef',
80      '--registry', server.registry
81    ], {}).then(([code, stdout, stderr]) => {
82      t.comment(stdout)
83      t.comment(stderr)
84      t.equal(code, 0, 'exited successfully')
85      t.match(
86        stdout.trim(),
87        /^- ~zkat.*https:\/\/example\.com$/,
88        'output info about new hook'
89      )
90    })
91  })
92})
93
94test('hook rm --json', t => {
95  return common.withServer(server => {
96    server
97      .delete('/-/npm/v1/hooks/hook/dead%40beef')
98      .reply(200, {
99        name: 'zkat',
100        type: 'owner',
101        endpoint: 'https://example.com',
102        secret: 'sekrit'
103      })
104    return common.npm([
105      'hook', 'rm', 'dead@beef',
106      '--json',
107      '--registry', server.registry
108    ], {}).then(([code, stdout, stderr]) => {
109      t.comment(stdout)
110      t.comment(stderr)
111      t.equal(code, 0, 'exited successfully')
112      t.deepEqual(JSON.parse(stdout), {
113        name: 'zkat',
114        type: 'owner',
115        endpoint: 'https://example.com',
116        secret: 'sekrit'
117      }, 'json response data returned')
118    })
119  })
120})
121
122test('hook ls', t => {
123  const objects = [
124    {id: 'foo', type: 'package', name: '@foo/pkg', endpoint: 'foo.com'},
125    {id: 'bar', type: 'owner', name: 'bar', endpoint: 'bar.com'},
126    {id: 'baz', type: 'scope', name: 'baz', endpoint: 'baz.com'}
127  ]
128  return common.withServer(server => {
129    server
130      .get('/-/npm/v1/hooks?package=%40npm%2Fhooks')
131      .reply(200, {objects})
132    return common.npm([
133      'hook', 'ls', '@npm/hooks',
134      '--registry', server.registry
135    ], {}).then(([code, stdout, stderr]) => {
136      t.comment(stdout)
137      t.comment(stderr)
138      t.equal(code, 0, 'exited successfully')
139      t.match(
140        stdout,
141        /You have 3 hooks configured/,
142        'message about hook count'
143      )
144      t.match(
145        stdout,
146        /foo\s+.*\s+@foo\/pkg\s+.*\s+foo\.com/,
147        'package displayed as expected'
148      )
149      t.match(
150        stdout,
151        /bar\s+.*\s+~bar\s+.*\s+bar\.com/,
152        'owner displayed as expected'
153      )
154      t.match(
155        stdout,
156        /baz\s+.*\s+@baz\s+.*\s+baz\.com/,
157        'scope displayed as expected'
158      )
159    })
160  })
161})
162
163test('hook ls --json', t => {
164  const objects = [
165    {id: 'foo'},
166    {id: 'bar'},
167    {id: 'baz'}
168  ]
169  return common.withServer(server => {
170    server
171      .get('/-/npm/v1/hooks?package=%40npm%2Fhooks')
172      .reply(200, {objects})
173    return common.npm([
174      'hook', 'ls', '@npm/hooks',
175      '--json',
176      '--registry', server.registry
177    ], {}).then(([code, stdout, stderr]) => {
178      t.comment(stdout)
179      t.comment(stderr)
180      t.equal(code, 0, 'exited successfully')
181      t.deepEqual(JSON.parse(stdout), objects, 'objects output as json')
182    })
183  })
184})
185
186test('hook update', t => {
187  return common.withServer(server => {
188    server.filteringRequestBody(() => true)
189      .put('/-/npm/v1/hooks/hook/dead%40beef', true)
190      .reply(200, {
191        type: 'scope',
192        name: 'npm',
193        endpoint: 'https://example.com',
194        secret: 'sekrit'
195      })
196    return common.npm([
197      'hook', 'update', 'dead@beef', 'https://example.com', 'sekrit',
198      '--registry', server.registry
199    ], {}).then(([code, stdout, stderr]) => {
200      t.comment(stdout)
201      t.comment(stderr)
202      t.equal(code, 0, 'exited successfully')
203      t.match(
204        stdout.trim(),
205        /^\+ @npm\s+.*\s+https:\/\/example\.com$/,
206        'output info about updated hook'
207      )
208    })
209  })
210})
211
212test('hook update --json', t => {
213  let body
214  return common.withServer(server => {
215    server.filteringRequestBody(bod => {
216      body = JSON.parse(bod)
217      t.deepEqual(body, {
218        endpoint: 'https://example.com',
219        secret: 'sekrit'
220      }, 'request sent correct body')
221      return true
222    })
223      .put('/-/npm/v1/hooks/hook/dead%40beef', true)
224      .reply(200, {
225        endpoint: 'https://example.com',
226        secret: 'sekrit'
227      })
228    return common.npm([
229      'hook', 'update', 'dead@beef', 'https://example.com', 'sekrit',
230      '--json',
231      '--registry', server.registry
232    ], {}).then(([code, stdout, stderr]) => {
233      t.comment(stdout)
234      t.comment(stderr)
235      t.equal(code, 0, 'exited successfully')
236      const json = JSON.parse(stdout)
237      t.deepEqual(json, {
238        endpoint: 'https://example.com',
239        secret: 'sekrit'
240      }, 'json response data returned')
241    })
242  })
243})
244