• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1var fs = require('graceful-fs')
2var path = require('path')
3
4var mkdirp = require('mkdirp')
5var mr = require('npm-registry-mock')
6var rimraf = require('rimraf')
7var test = require('tap').test
8
9var common = require('../common-tap.js')
10
11var pkg = require('path').join(__dirname, 'ignore-shrinkwrap')
12
13var EXEC_OPTS = { cwd: pkg }
14
15var customMocks = {
16  'get': {
17    '/package.js': [200, { ente: true }],
18    '/shrinkwrap.js': [200, { ente: true }]
19  }
20}
21
22var json = {
23  author: 'Rocko Artischocko',
24  name: 'ignore-shrinkwrap',
25  version: '0.0.0',
26  dependencies: {
27    'npm-test-ignore-shrinkwrap-file': 'http://localhost:' + common.port + '/package.js'
28  }
29}
30
31var shrinkwrap = {
32  name: 'ignore-shrinkwrap',
33  version: '0.0.0',
34  dependencies: {
35    'npm-test-ignore-shrinkwrap-file': {
36      version: '1.2.3',
37      from: 'http://localhost:' + common.port + '/shrinkwrap.js',
38      resolved: 'http://localhost:' + common.port + '/shrinkwrap.js',
39      dependencies: {
40        opener: {
41          version: '1.3.0',
42          from: 'opener@1.3.0'
43        }
44      }
45    }
46  }
47}
48
49test('setup', function (t) {
50  setup()
51  t.end()
52})
53
54test('npm install --no-shrinkwrap', function (t) {
55  mr({ port: common.port, mocks: customMocks }, function (err, s) {
56    t.ifError(err, 'mock registry bootstrapped without issue')
57    s._server.on('request', function (req) {
58      switch (req.url) {
59        case '/shrinkwrap.js':
60          t.fail('npm-shrinkwrap.json used instead of package.json')
61          break
62        case '/package.js':
63          t.pass('package.json used')
64      }
65    })
66
67    common.npm(
68      [
69        '--registry', common.registry,
70        '--loglevel', 'silent',
71        'install', '--no-shrinkwrap'
72      ],
73      EXEC_OPTS,
74      function (err, code) {
75        t.ifError(err, 'npm ran without issue')
76        t.ok(code, "install isn't going to succeed")
77        s.close()
78        t.end()
79      }
80    )
81  })
82})
83
84test('npm install (with shrinkwrap)', function (t) {
85  mr({ port: common.port, mocks: customMocks }, function (err, s) {
86    t.ifError(err, 'mock registry bootstrapped without issue')
87    s._server.on('request', function (req) {
88      switch (req.url) {
89        case '/shrinkwrap.js':
90          t.pass('shrinkwrap used')
91          break
92        case '/package.js':
93          t.fail('shrinkwrap ignored')
94      }
95    })
96
97    common.npm(
98      [
99        '--registry', common.registry,
100        '--loglevel', 'silent',
101        'install'
102      ],
103      EXEC_OPTS,
104      function (err, code) {
105        t.ifError(err, 'npm ran without issue')
106        t.ok(code, "install isn't going to succeed")
107        s.close()
108        t.end()
109      }
110    )
111  })
112})
113
114test('cleanup', function (t) {
115  cleanup()
116  t.end()
117})
118
119function cleanup () {
120  rimraf.sync(pkg)
121}
122
123function setup () {
124  cleanup()
125  mkdirp.sync(pkg)
126  fs.writeFileSync(
127    path.join(pkg, 'package.json'),
128    JSON.stringify(json, null, 2)
129  )
130  fs.writeFileSync(
131    path.join(pkg, 'npm-shrinkwrap.json'),
132    JSON.stringify(shrinkwrap, null, 2)
133  )
134  process.chdir(pkg)
135}
136