|
1 | 1 | const t = require('tap')
|
2 | 2 | const { load: loadMockNpm } = require('../../fixtures/mock-npm')
|
| 3 | +const path = require('path') |
| 4 | +const fs = require('fs') |
| 5 | + |
| 6 | +const MockRegistry = require('../../fixtures/mock-registry.js') |
3 | 7 |
|
4 | 8 | t.test('should throw in global mode', async (t) => {
|
5 | 9 | const { npm } = await loadMockNpm(t, {
|
@@ -14,45 +18,78 @@ t.test('should throw in global mode', async (t) => {
|
14 | 18 | )
|
15 | 19 | })
|
16 | 20 |
|
17 |
| -t.test('should remove dupes using Arborist', async (t) => { |
18 |
| -t.plan(5) |
19 |
| -const { npm } = await loadMockNpm(t, { |
20 |
| -mocks: { |
21 |
| -'@npmcli/arborist': function (args) { |
22 |
| -t.ok(args, 'gets options object') |
23 |
| -t.ok(args.path, 'gets path option') |
24 |
| -t.ok(args.dryRun, 'gets dryRun from user') |
25 |
| -this.dedupe = () => { |
26 |
| -t.ok(true, 'dedupe is called') |
27 |
| -} |
28 |
| -}, |
29 |
| -'../../lib/utils/reify-finish.js': (npm, arb) => { |
30 |
| -t.ok(arb, 'gets arborist tree') |
| 21 | +const testTop = { |
| 22 | +name: 'test-top', |
| 23 | +version: '1.0.0', |
| 24 | +dependencies: { |
| 25 | +'test-dep-a': '*', |
| 26 | +'test-dep-b': '*', |
| 27 | +}, |
| 28 | +} |
| 29 | +const testDepA = { |
| 30 | +name: 'test-dep-a', |
| 31 | +version: '1.0.1', |
| 32 | +dependencies: { 'test-sub': '*' }, |
| 33 | +} |
| 34 | +const testDepB = { |
| 35 | +name: 'test-dep-b', |
| 36 | +version: '1.0.0', |
| 37 | +dependencies: { 'test-sub': '*' }, |
| 38 | +} |
| 39 | +const testSub = { |
| 40 | +name: 'test-sub', |
| 41 | +version: '1.0.0', |
| 42 | +} |
| 43 | + |
| 44 | +const treeWithDupes = { |
| 45 | +'package.json': JSON.stringify(testTop), |
| 46 | +node_modules: { |
| 47 | +'test-dep-a': { |
| 48 | +'package.json': JSON.stringify(testDepA), |
| 49 | +node_modules: { |
| 50 | +'test-sub': { |
| 51 | +'package.json': JSON.stringify(testSub), |
| 52 | +}, |
31 | 53 | },
|
32 | 54 | },
|
33 |
| -config: { |
34 |
| -'dry-run': 'true', |
| 55 | +'test-dep-b': { |
| 56 | +'package.json': JSON.stringify(testDepB), |
| 57 | +node_modules: { |
| 58 | +'test-sub': { |
| 59 | +'package.json': JSON.stringify(testSub), |
| 60 | +}, |
| 61 | +}, |
35 | 62 | },
|
| 63 | +}, |
| 64 | +} |
| 65 | + |
| 66 | +t.test('dedupe', async (t) => { |
| 67 | +const { npm, joinedOutput } = await loadMockNpm(t, { |
| 68 | +prefixDir: treeWithDupes, |
| 69 | +}) |
| 70 | +const registry = new MockRegistry({ |
| 71 | +tap: t, |
| 72 | +registry: npm.config.get('registry'), |
| 73 | +}) |
| 74 | +const manifestSub = registry.manifest({ |
| 75 | +name: 'test-sub', |
| 76 | +packuments: [{ version: '1.0.0' }], |
36 | 77 | })
|
37 |
| -await npm.exec('dedupe', []) |
38 |
| -}) |
39 | 78 |
|
40 |
| -t.test('should remove dupes using Arborist - no arguments', async (t) => { |
41 |
| -t.plan(2) |
42 |
| -const { npm } = await loadMockNpm(t, { |
43 |
| -mocks: { |
44 |
| -'@npmcli/arborist': function (args) { |
45 |
| -t.ok(args.dryRun, 'gets dryRun from config') |
46 |
| -t.ok(args.save, 'gets user-set save value from config') |
47 |
| -this.dedupe = () => {} |
48 |
| -}, |
49 |
| -'../../lib/utils/reify-output.js': () => {}, |
50 |
| -'../../lib/utils/reify-finish.js': () => {}, |
51 |
| -}, |
52 |
| -config: { |
53 |
| -'dry-run': true, |
54 |
| -save: true, |
| 79 | +await registry.package({ |
| 80 | +manifest: manifestSub, |
| 81 | +tarballs: { |
| 82 | +'1.0.0': path.join(npm.prefix, 'node_modules', 'test-dep-a', 'node_modules', 'test-sub'), |
55 | 83 | },
|
56 | 84 | })
|
57 | 85 | await npm.exec('dedupe', [])
|
| 86 | +t.match(joinedOutput(), /added 1 package, and removed 2 packages/) |
| 87 | +t.ok(fs.existsSync(path.join(npm.prefix, 'node_modules', 'test-sub')), 'test-sub was hoisted') |
| 88 | +t.notOk( |
| 89 | +fs.existsSync(path.join(npm.prefix, 'node_modules', 'test-dep-a', 'node_modules', 'test-sub')), |
| 90 | +'test-dep-a/test-sub was removed' |
| 91 | +) |
| 92 | +t.notOk( |
| 93 | +fs.existsSync(path.join(npm.prefix, 'node_modules', 'test-dep-b', 'node_modules', 'test-sub')), |
| 94 | +'test-dep-b/test-sub was removed') |
58 | 95 | })
|
0 commit comments