@@ -270,14 +270,45 @@ const packument = (nv, opts) => {
270
270
},
271
271
},
272
272
},
273
+
// this is a packaged named error which will conflict with
274
+
// the error key in json output
275
+
error: {
276
+
_id: 'error',
277
+
name: 'error',
278
+
'dist-tags': {
279
+
latest: '1.0.0',
280
+
},
281
+
versions: {
282
+
'1.0.0': {
283
+
name: 'error',
284
+
version: '1.0.0',
285
+
dist: {
286
+
shasum: '123',
287
+
tarball: 'http://hm.error.com/1.0.0.tgz',
288
+
fileCount: 1,
289
+
},
290
+
},
291
+
},
292
+
},
273
293
}
294
+
274
295
if (nv.type === 'git') {
275
296
return mocks[nv.hosted.project]
276
297
}
298
+
277
299
if (nv.raw === './blue') {
278
300
return mocks.blue
279
301
}
280
-
return mocks[nv.name]
302
+
303
+
if (mocks[nv.name]) {
304
+
return mocks[nv.name]
305
+
}
306
+
307
+
if (nv.name === 'unknown-error') {
308
+
throw new Error('Unknown error')
309
+
}
310
+
311
+
throw Object.assign(new Error('404'), { code: 'E404' })
281
312
}
282
313
283
314
const loadMockNpm = async function (t, opts = {}) {
@@ -543,6 +574,33 @@ t.test('workspaces', async t => {
543
574
},
544
575
}
545
576
577
+
const prefixDir404 = {
578
+
'test-workspace-b': {
579
+
'package.json': JSON.stringify({
580
+
name: 'missing-package',
581
+
version: '1.2.3',
582
+
}),
583
+
},
584
+
}
585
+
586
+
const prefixDirError = {
587
+
'test-workspace-b': {
588
+
'package.json': JSON.stringify({
589
+
name: 'unknown-error',
590
+
version: '1.2.3',
591
+
}),
592
+
},
593
+
}
594
+
595
+
const prefixPackageNamedError = {
596
+
'test-workspace-a': {
597
+
'package.json': JSON.stringify({
598
+
name: 'error',
599
+
version: '1.2.3',
600
+
}),
601
+
},
602
+
}
603
+
546
604
t.test('all workspaces', async t => {
547
605
const { view, joinedOutput } = await loadMockNpm(t, {
548
606
prefixDir,
@@ -624,6 +682,56 @@ t.test('workspaces', async t => {
624
682
t.matchSnapshot(joinedOutput())
625
683
t.matchSnapshot(logs.warn, 'should have warning of ignoring workspaces')
626
684
})
685
+
686
+
t.test('404 workspaces', async t => {
687
+
t.test('basic', async t => {
688
+
const { view, joinedFullOutput } = await loadMockNpm(t, {
689
+
prefixDir: { ...prefixDir, ...prefixDir404 },
690
+
config: { workspaces: true, loglevel: 'error' },
691
+
})
692
+
await view.exec([])
693
+
t.matchSnapshot(joinedFullOutput())
694
+
t.equal(process.exitCode, 1)
695
+
})
696
+
697
+
t.test('json', async t => {
698
+
const { view, joinedFullOutput } = await loadMockNpm(t, {
699
+
prefixDir: { ...prefixDir, ...prefixDir404 },
700
+
config: { workspaces: true, json: true, loglevel: 'error' },
701
+
})
702
+
await view.exec([])
703
+
t.matchSnapshot(joinedFullOutput())
704
+
t.equal(process.exitCode, 1)
705
+
})
706
+
707
+
t.test('json with package named error', async t => {
708
+
const { view, joinedFullOutput } = await loadMockNpm(t, {
709
+
prefixDir: { ...prefixDir, ...prefixDir404, ...prefixPackageNamedError },
710
+
config: { workspaces: true, json: true, loglevel: 'warn' },
711
+
})
712
+
await view.exec([])
713
+
t.matchSnapshot(joinedFullOutput())
714
+
t.equal(process.exitCode, 1)
715
+
})
716
+
717
+
t.test('non-404 error rejects', async t => {
718
+
const { view, joinedFullOutput } = await loadMockNpm(t, {
719
+
prefixDir: { ...prefixDir, ...prefixDirError },
720
+
config: { workspaces: true, loglevel: 'error' },
721
+
})
722
+
await t.rejects(view.exec([]))
723
+
t.matchSnapshot(joinedFullOutput())
724
+
})
725
+
726
+
t.test('non-404 error rejects with single arg', async t => {
727
+
const { view, joinedFullOutput } = await loadMockNpm(t, {
728
+
prefixDir: { ...prefixDir, ...prefixDirError },
729
+
config: { workspaces: true, loglevel: 'error' },
730
+
})
731
+
await t.rejects(view.exec(['.', 'version']))
732
+
t.matchSnapshot(joinedFullOutput())
733
+
})
734
+
})
627
735
})
628
736
629
737
t.test('completion', async t => {
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4