11const { join } = require ( 'path' )
2- const { promisify } = require ( 'util ' )
3- const fs = require ( 'fs ' )
2+ const fs = require ( 'fs/promises ' )
3+ const ini = require ( 'ini ' )
44const tspawk = require ( '../../fixtures/tspawk' )
55const t = require ( 'tap' )
66
77const spawk = tspawk ( t )
88
9- const readFile = promisify ( fs . readFile )
10-
119const Sandbox = require ( '../../fixtures/sandbox.js' )
1210
1311t . test ( 'config no args' , async t => {
@@ -142,60 +140,100 @@ t.test('config delete no args', async t => {
142140t . test ( 'config delete single key' , async t => {
143141 // location defaults to user, so we work with a userconfig
144142 const home = t . testdir ( {
145- '.npmrc' : 'foo=bar\nbar=baz ' ,
143+ '.npmrc' : 'access=public\nall=true ' ,
146144 } )
147145
148146 const sandbox = new Sandbox ( t )
149- await sandbox . run ( 'config' , [ 'delete' , 'foo ' ] , { home } )
147+ await sandbox . run ( 'config' , [ 'delete' , 'access ' ] , { home } )
150148
151- t . equal ( sandbox . config . get ( 'foo ' ) , undefined , 'foo should no longer be set ' )
149+ t . equal ( sandbox . config . get ( 'access ' ) , null , 'acces should be defaulted ' )
152150
153- const contents = await readFile ( join ( home , '.npmrc' ) , { encoding : 'utf8' } )
154- t . not ( contents . includes ( 'foo=' ) , 'foo was removed on disk' )
151+ const contents = await fs . readFile ( join ( home , '.npmrc' ) , { encoding : 'utf8' } )
152+ const rc = ini . parse ( contents )
153+ t . not ( rc . access , 'access is not set' )
155154} )
156155
157156t . test ( 'config delete multiple keys' , async t => {
158157 const home = t . testdir ( {
159- '.npmrc' : 'foo=bar\nbar=baz\nbaz=buz ' ,
158+ '.npmrc' : 'access=public\nall=true\naudit=false ' ,
160159 } )
161160
162161 const sandbox = new Sandbox ( t )
163- await sandbox . run ( 'config' , [ 'delete' , 'foo ' , 'bar ' ] , { home } )
162+ await sandbox . run ( 'config' , [ 'delete' , 'access ' , 'all ' ] , { home } )
164163
165- t . equal ( sandbox . config . get ( 'foo ' ) , undefined , 'foo should no longer be set ' )
166- t . equal ( sandbox . config . get ( 'bar ' ) , undefined , 'bar should no longer be set ' )
164+ t . equal ( sandbox . config . get ( 'access ' ) , null , 'access should be defaulted ' )
165+ t . equal ( sandbox . config . get ( 'all ' ) , false , 'all should be defaulted ' )
167166
168- const contents = await readFile ( join ( home , '.npmrc' ) , { encoding : 'utf8' } )
169- t . not ( contents . includes ( 'foo=' ) , 'foo was removed on disk' )
170- t . not ( contents . includes ( 'bar=' ) , 'bar was removed on disk' )
167+ const contents = await fs . readFile ( join ( home , '.npmrc' ) , { encoding : 'utf8' } )
168+ const rc = ini . parse ( contents )
169+ t . not ( rc . access , 'access is not set' )
170+ t . not ( rc . all , 'all is not set' )
171171} )
172172
173173t . test ( 'config delete key --location=global' , async t => {
174174 const global = t . testdir ( {
175- npmrc : 'foo=bar\nbar=baz ' ,
175+ npmrc : 'access=public\nall=true ' ,
176176 } )
177177
178178 const sandbox = new Sandbox ( t )
179- await sandbox . run ( 'config' , [ 'delete' , 'foo ' , '--location=global' ] , { global } )
179+ await sandbox . run ( 'config' , [ 'delete' , 'access ' , '--location=global' ] , { global } )
180180
181- t . equal ( sandbox . config . get ( 'foo ' , 'global' ) , undefined , 'foo should no longer be set ' )
181+ t . equal ( sandbox . config . get ( 'access ' , 'global' ) , undefined , 'access should be defaulted ' )
182182
183- const contents = await readFile ( join ( global , 'npmrc' ) , { encoding : 'utf8' } )
184- t . not ( contents . includes ( 'foo=' ) , 'foo was removed on disk' )
183+ const contents = await fs . readFile ( join ( global , 'npmrc' ) , { encoding : 'utf8' } )
184+ const rc = ini . parse ( contents )
185+ t . not ( rc . access , 'access is not set' )
185186} )
186187
187188t . test ( 'config delete key --global' , async t => {
188189 const global = t . testdir ( {
189- npmrc : 'foo=bar\nbar=baz ' ,
190+ npmrc : 'access=public\nall=true ' ,
190191 } )
191192
192193 const sandbox = new Sandbox ( t )
193- await sandbox . run ( 'config' , [ 'delete' , 'foo' , '--global' ] , { global } )
194+ await sandbox . run ( 'config' , [ 'delete' , 'access' , '--global' ] , { global } )
195+
196+ t . equal ( sandbox . config . get ( 'access' , 'global' ) , undefined , 'access should no longer be set' )
197+
198+ const contents = await fs . readFile ( join ( global , 'npmrc' ) , { encoding : 'utf8' } )
199+ const rc = ini . parse ( contents )
200+ t . not ( rc . access , 'access is not set' )
201+ } )
202+
203+ t . test ( 'config set invalid option' , async t => {
204+ const sandbox = new Sandbox ( t )
205+ await t . rejects (
206+ sandbox . run ( 'config' , [ 'set' , 'nonexistantconfigoption' , 'something' ] ) ,
207+ / n o t a v a l i d n p m o p t i o n /
208+ )
209+ } )
210+
211+ t . test ( 'config set deprecated option' , async t => {
212+ const sandbox = new Sandbox ( t )
213+ await t . rejects (
214+ sandbox . run ( 'config' , [ 'set' , 'shrinkwrap' , 'true' ] ) ,
215+ / d e p r e c a t e d /
216+ )
217+ } )
194218
195- t . equal ( sandbox . config . get ( 'foo' , 'global' ) , undefined , 'foo should no longer be set' )
219+ t . test ( 'config set nerf-darted option' , async t => {
220+ const sandbox = new Sandbox ( t )
221+ await sandbox . run ( 'config' , [ 'set' , '//npm.pkg.github.com/:_authToken' , '0xdeadbeef' ] )
222+ t . equal (
223+ sandbox . config . get ( '//npm.pkg.github.com/:_authToken' ) ,
224+ '0xdeadbeef' ,
225+ 'nerf-darted config is set'
226+ )
227+ } )
196228
197- const contents = await readFile ( join ( global , 'npmrc' ) , { encoding : 'utf8' } )
198- t . not ( contents . includes ( 'foo=' ) , 'foo was removed on disk' )
229+ t . test ( 'config set scoped optoin' , async t => {
230+ const sandbox = new Sandbox ( t )
231+ await sandbox . run ( 'config' , [ 'set' , '@npm:registry' , 'https://registry.npmjs.org' ] )
232+ t . equal (
233+ sandbox . config . get ( '@npm:registry' ) ,
234+ 'https://registry.npmjs.org' ,
235+ 'scoped config is set'
236+ )
199237} )
200238
201239t . test ( 'config set no args' , async t => {
@@ -212,65 +250,67 @@ t.test('config set no args', async t => {
212250
213251t . test ( 'config set key' , async t => {
214252 const home = t . testdir ( {
215- '.npmrc' : 'foo=bar ' ,
253+ '.npmrc' : 'access=public ' ,
216254 } )
217255
218256 const sandbox = new Sandbox ( t , { home } )
219257
220- await sandbox . run ( 'config' , [ 'set' , 'foo ' ] )
258+ await sandbox . run ( 'config' , [ 'set' , 'access ' ] )
221259
222- t . equal ( sandbox . config . get ( 'foo ' ) , '' , 'set the value for foo ' )
260+ t . equal ( sandbox . config . get ( 'access ' ) , null , 'set the value for access ' )
223261
224- const contents = await readFile ( join ( home , '.npmrc' ) , { encoding : 'utf8' } )
225- t . ok ( contents . includes ( 'foo=' ) , 'wrote foo to disk' )
262+ await t . rejects ( fs . stat ( join ( home , '.npmrc' ) , { encoding : 'utf8' } ) , 'removed empty config' )
226263} )
227264
228265t . test ( 'config set key value' , async t => {
229266 const home = t . testdir ( {
230- '.npmrc' : 'foo=bar ' ,
267+ '.npmrc' : 'access=public ' ,
231268 } )
232269
233270 const sandbox = new Sandbox ( t , { home } )
234271
235- await sandbox . run ( 'config' , [ 'set' , 'foo ' , 'baz ' ] )
272+ await sandbox . run ( 'config' , [ 'set' , 'access ' , 'restricted ' ] )
236273
237- t . equal ( sandbox . config . get ( 'foo ' ) , 'baz ' , 'set the value for foo ' )
274+ t . equal ( sandbox . config . get ( 'access ' ) , 'restricted ' , 'set the value for access ' )
238275
239- const contents = await readFile ( join ( home , '.npmrc' ) , { encoding : 'utf8' } )
240- t . ok ( contents . includes ( 'foo=baz' ) , 'wrote foo to disk' )
276+ const contents = await fs . readFile ( join ( home , '.npmrc' ) , { encoding : 'utf8' } )
277+ const rc = ini . parse ( contents )
278+ t . equal ( rc . access , 'restricted' , 'access is set to restricted' )
241279} )
242280
243281t . test ( 'config set key=value' , async t => {
244282 const home = t . testdir ( {
245- '.npmrc' : 'foo=bar ' ,
283+ '.npmrc' : 'access=public ' ,
246284 } )
247285
248286 const sandbox = new Sandbox ( t , { home } )
249287
250- await sandbox . run ( 'config' , [ 'set' , 'foo=baz ' ] )
288+ await sandbox . run ( 'config' , [ 'set' , 'access=restricted ' ] )
251289
252- t . equal ( sandbox . config . get ( 'foo ' ) , 'baz ' , 'set the value for foo ' )
290+ t . equal ( sandbox . config . get ( 'access ' ) , 'restricted ' , 'set the value for access ' )
253291
254- const contents = await readFile ( join ( home , '.npmrc' ) , { encoding : 'utf8' } )
255- t . ok ( contents . includes ( 'foo=baz' ) , 'wrote foo to disk' )
292+ const contents = await fs . readFile ( join ( home , '.npmrc' ) , { encoding : 'utf8' } )
293+ const rc = ini . parse ( contents )
294+ t . equal ( rc . access , 'restricted' , 'access is set to restricted' )
256295} )
257296
258297t . test ( 'config set key1 value1 key2=value2 key3' , async t => {
259298 const home = t . testdir ( {
260- '.npmrc' : 'foo=bar\nbar=baz\nbaz=foo ' ,
299+ '.npmrc' : 'access=public\nall=true\naudit=true ' ,
261300 } )
262301
263302 const sandbox = new Sandbox ( t , { home } )
264- await sandbox . run ( 'config' , [ 'set' , 'foo ' , 'oof ' , 'bar=rab ' , 'baz ' ] )
303+ await sandbox . run ( 'config' , [ 'set' , 'access ' , 'restricted ' , 'all=false ' , 'audit ' ] )
265304
266- t . equal ( sandbox . config . get ( 'foo ' ) , 'oof ' , 'foo was set' )
267- t . equal ( sandbox . config . get ( 'bar ' ) , 'rab' , 'bar was set' )
268- t . equal ( sandbox . config . get ( 'baz ' ) , '' , 'baz was set' )
305+ t . equal ( sandbox . config . get ( 'access ' ) , 'restricted ' , 'access was set' )
306+ t . equal ( sandbox . config . get ( 'all ' ) , false , 'all was set' )
307+ t . equal ( sandbox . config . get ( 'audit ' ) , false , 'audit was set' )
269308
270- const contents = await readFile ( join ( home , '.npmrc' ) , { encoding : 'utf8' } )
271- t . ok ( contents . includes ( 'foo=oof' ) , 'foo was written to disk' )
272- t . ok ( contents . includes ( 'bar=rab' ) , 'bar was written to disk' )
273- t . ok ( contents . includes ( 'baz=' ) , 'baz was written to disk' )
309+ const contents = await fs . readFile ( join ( home , '.npmrc' ) , { encoding : 'utf8' } )
310+ const rc = ini . parse ( contents )
311+ t . equal ( rc . access , 'restricted' , 'access is set to restricted' )
312+ t . equal ( rc . all , false , 'all is set to false' )
313+ t . equal ( rc . audit , false , 'audit is set to false' )
274314} )
275315
276316t . test ( 'config set invalid key logs warning' , async t => {
@@ -287,30 +327,32 @@ t.test('config set invalid key logs warning', async t => {
287327
288328t . test ( 'config set key=value --location=global' , async t => {
289329 const global = t . testdir ( {
290- npmrc : 'foo=bar\nbar=baz ' ,
330+ npmrc : 'access=public\nall=true ' ,
291331 } )
292332
293333 const sandbox = new Sandbox ( t , { global } )
294- await sandbox . run ( 'config' , [ 'set' , 'foo=buzz ' , '--location=global' ] )
334+ await sandbox . run ( 'config' , [ 'set' , 'access=restricted ' , '--location=global' ] )
295335
296- t . equal ( sandbox . config . get ( 'foo ' , 'global' ) , 'buzz ' , 'foo should be set' )
336+ t . equal ( sandbox . config . get ( 'access ' , 'global' ) , 'restricted ' , 'foo should be set' )
297337
298- const contents = await readFile ( join ( global , 'npmrc' ) , { encoding : 'utf8' } )
299- t . not ( contents . includes ( 'foo=buzz' ) , 'foo was saved on disk' )
338+ const contents = await fs . readFile ( join ( global , 'npmrc' ) , { encoding : 'utf8' } )
339+ const rc = ini . parse ( contents )
340+ t . equal ( rc . access , 'restricted' , 'access is set to restricted' )
300341} )
301342
302343t . test ( 'config set key=value --global' , async t => {
303344 const global = t . testdir ( {
304- npmrc : 'foo=bar\nbar=baz ' ,
345+ npmrc : 'access=public\nall=true ' ,
305346 } )
306347
307348 const sandbox = new Sandbox ( t , { global } )
308- await sandbox . run ( 'config' , [ 'set' , 'foo=buzz ' , '--global' ] )
349+ await sandbox . run ( 'config' , [ 'set' , 'access=restricted ' , '--global' ] )
309350
310- t . equal ( sandbox . config . get ( 'foo ' , 'global' ) , 'buzz ' , 'foo should be set' )
351+ t . equal ( sandbox . config . get ( 'access ' , 'global' ) , 'restricted ' , 'access should be set' )
311352
312- const contents = await readFile ( join ( global , 'npmrc' ) , { encoding : 'utf8' } )
313- t . not ( contents . includes ( 'foo=buzz' ) , 'foo was saved on disk' )
353+ const contents = await fs . readFile ( join ( global , 'npmrc' ) , { encoding : 'utf8' } )
354+ const rc = ini . parse ( contents )
355+ t . equal ( rc . access , 'restricted' , 'access is set to restricted' )
314356} )
315357
316358t . test ( 'config get no args' , async t => {
@@ -383,7 +425,7 @@ t.test('config edit', async t => {
383425 'editor opened the user config file'
384426 )
385427
386- const contents = await readFile ( join ( home , '.npmrc' ) , { encoding : 'utf8' } )
428+ const contents = await fs . readFile ( join ( home , '.npmrc' ) , { encoding : 'utf8' } )
387429 t . ok ( contents . includes ( 'foo=bar' ) , 'kept foo' )
388430 t . ok ( contents . includes ( 'bar=baz' ) , 'kept bar' )
389431 t . ok ( contents . includes ( 'shown below with default values' ) , 'appends defaults to file' )
@@ -448,7 +490,7 @@ t.test('config fix', (t) => {
448490 t . not ( sandbox . config . get ( '_authToken' , 'global' ) , '_authToken is not set globally' )
449491 t . equal ( sandbox . config . get ( `${ registry } :_authToken` , 'global' ) , 'afaketoken' ,
450492 'global _authToken was scoped' )
451- const globalConfig = await readFile ( join ( root , 'global' , 'npmrc' ) , { encoding : 'utf8' } )
493+ const globalConfig = await fs . readFile ( join ( root , 'global' , 'npmrc' ) , { encoding : 'utf8' } )
452494 t . equal ( globalConfig , `${ registry } :_authToken=afaketoken\n` , 'global config was written' )
453495
454496 // user config fixes
@@ -459,7 +501,7 @@ t.test('config fix', (t) => {
459501 t . not ( sandbox . config . get ( '_authtoken' , 'user' ) , '_authtoken is not set in user config' )
460502 t . not ( sandbox . config . get ( '_auth' ) , '_auth is not set in user config' )
461503 t . equal ( sandbox . config . get ( `${ registry } :_auth` , 'user' ) , 'beef' , 'user _auth was scoped' )
462- const userConfig = await readFile ( join ( root , 'home' , '.npmrc' ) , { encoding : 'utf8' } )
504+ const userConfig = await fs . readFile ( join ( root , 'home' , '.npmrc' ) , { encoding : 'utf8' } )
463505 t . equal ( userConfig , `${ registry } :_auth=beef\n` , 'user config was written' )
464506 } )
465507
@@ -488,7 +530,7 @@ t.test('config fix', (t) => {
488530 t . equal ( sandbox . config . get ( '_authtoken' , 'global' ) , 'notatoken' , 'global _authtoken untouched' )
489531 t . equal ( sandbox . config . get ( '_authToken' , 'global' ) , 'afaketoken' , 'global _authToken untouched' )
490532 t . not ( sandbox . config . get ( `${ registry } :_authToken` , 'global' ) , 'global _authToken not scoped' )
491- const globalConfig = await readFile ( join ( root , 'global' , 'npmrc' ) , { encoding : 'utf8' } )
533+ const globalConfig = await fs . readFile ( join ( root , 'global' , 'npmrc' ) , { encoding : 'utf8' } )
492534 t . equal ( globalConfig , '_authtoken=notatoken\n_authToken=afaketoken' ,
493535 'global config was not written' )
494536
@@ -500,7 +542,7 @@ t.test('config fix', (t) => {
500542 t . not ( sandbox . config . get ( '_authtoken' , 'user' ) , '_authtoken is not set in user config' )
501543 t . not ( sandbox . config . get ( '_auth' , 'user' ) , '_auth is not set in user config' )
502544 t . equal ( sandbox . config . get ( `${ registry } :_auth` , 'user' ) , 'beef' , 'user _auth was scoped' )
503- const userConfig = await readFile ( join ( root , 'home' , '.npmrc' ) , { encoding : 'utf8' } )
545+ const userConfig = await fs . readFile ( join ( root , 'home' , '.npmrc' ) , { encoding : 'utf8' } )
504546 t . equal ( userConfig , `${ registry } :_auth=beef\n` , 'user config was written' )
505547 } )
506548
0 commit comments