• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict'
2const path = require('path')
3const test = require('tap').test
4const Tacks = require('tacks')
5const File = Tacks.File
6const Dir = Tacks.Dir
7const common = require('../common-tap.js')
8
9const basedir = common.pkg
10const testdir = path.join(basedir, 'testdir')
11const cachedir = common.cache
12const globaldir = path.join(basedir, 'global')
13const tmpdir = path.join(basedir, 'tmp')
14
15const conf = {
16  cwd: testdir,
17  env: common.newEnv().extend({
18    npm_config_cache: cachedir,
19    npm_config_tmp: tmpdir,
20    npm_config_prefix: globaldir,
21    npm_config_registry: common.registry,
22    npm_config_loglevel: 'warn'
23  })
24}
25
26const fixture = new Tacks(Dir({
27  cache: Dir(),
28  global: Dir(),
29  tmp: Dir(),
30  testdir: Dir({
31    'package.json': File({
32      name: 'fixture',
33      version: '1.0.0',
34      dependencies: {
35        dep: 'file:dep-1.0.0.tgz',
36        'peer-dep': 'file:peer-dep-2.0.0.tgz'
37      }
38    }),
39    // Source dir
40    // dep: Dir({
41    //   'package.json': File({
42    //     name: 'dep',
43    //     version: '1.0.0',
44    //     peerDependencies: {
45    //       'peer-dep': 'file:peer-dep-1.0.0.tgz'
46    //     }
47    //   })
48    // }),
49    'dep-1.0.0.tgz': File(Buffer.from(
50      '1f8b0800000000000003ed8f3d0ec2300c853be71451661a1cd166e8cc45' +
51      'a2d654e1278d92c200eadd491a60ea462584946fb1f5fc9e655bd59e548f' +
52      '5b9b2a3ffac1142b0300b2aae8921e1152d062574b10424a08bed0d4d10f' +
53      '6b1fb2c4d58fca8553bedd937ea19ffa273c08a5cca80bb286b20e2ddb44' +
54      'e186ceebc1444d70e090548be8f668d174685a8d3e8c63fc3529633a040e' +
55      'fa8ccd5b28e7381ffb3b0bce894ce4d70f6732994c66e60975aec5690008' +
56      '0000',
57      'hex'
58    )),
59    // Source dir
60    // 'peer-dep': Dir({
61    //   'package.json': File({
62    //     name: 'peer-dep',
63    //     version: '2.0.0'
64    //   })
65    // }),
66    'peer-dep-1.0.0.tgz': File(Buffer.from(
67      '1f8b08000000000000032b484cce4e4c4fd52f80d07a59c5f9790c540606' +
68      '06066626260ad8c4c1c0d45c81c1d8d4ccc0d0d0cccc00a80ec830353500' +
69      'd2d4760836505a5c925804740aa5e640bca200a78708a8e6525050ca4bcc' +
70      '4d55b252502a484d2dd24d492d50d2018996a5161567e6e781240cf50cf4' +
71      '0c94b86ab906dab9a360148c8251300aa80400c1c67f6300080000',
72      'hex'
73    )),
74    'peer-dep-2.0.0.tgz': File(Buffer.from(
75      '1f8b08000000000000032b484cce4e4c4fd52f80d07a59c5f9790c540606' +
76      '06066626260ad8c4c1c0d45c81c1d8d4ccc0d0d0cccc00a80ec830353500' +
77      'd2d4760836505a5c925804740aa5e640bca200a78708a8e6525050ca4bcc' +
78      '4d55b252502a484d2dd24d492d50d2018996a5161567e6e781248cf40cf4' +
79      '0c94b86ab906dab9a360148c8251300aa80400cb30060800080000',
80      'hex'
81    ))
82  })
83}))
84
85function setup () {
86  cleanup()
87  fixture.create(basedir)
88}
89
90function cleanup () {
91  fixture.remove(basedir)
92}
93
94test('setup', t => {
95  setup()
96  return common.fakeRegistry.listen().then(() => common.npm(['install'], conf))
97})
98
99test('list warns about unmet peer dependency', t => {
100  return common.npm(['ls'], conf).then(([code, stdout, stderr]) => {
101    t.is(code, 1, 'command ran not ok')
102    t.comment(stdout.trim())
103    t.comment(stderr.trim())
104    t.match(stdout, 'UNMET PEER DEPENDENCY peer-dep@2.0.0')
105    t.match(stderr, 'npm ERR! peer dep missing: peer-dep@file:peer-dep-1.0.0.tgz, required by dep@1.0.0')
106  })
107})
108
109test('list shows installed but unmet peer dependency', t => {
110  return common.npm(['ls', 'peer-dep'], conf).then(([code, stdout, stderr]) => {
111    t.is(code, 1, 'command ran not ok')
112    t.comment(stdout.trim())
113    t.comment(stderr.trim())
114    t.match(stdout, 'UNMET PEER DEPENDENCY peer-dep@2.0.0')
115    t.match(stderr, 'npm ERR! peer dep missing: peer-dep@file:peer-dep-1.0.0.tgz, required by dep@1.0.0')
116  })
117})
118
119test('cleanup', t => {
120  common.fakeRegistry.close()
121  cleanup()
122  t.done()
123})
124