• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1var fs = require('fs')
2var path = require('path')
3
4var mr = require('npm-registry-mock')
5var test = require('tap').test
6
7var common = require('../common-tap.js')
8var npm = require('../../')
9
10var pkg = common.pkg
11
12test('shrinkwrap adds optional property when optional dependency', function (t) {
13  t.plan(1)
14
15  mr({port: common.port}, function (er, s) {
16    t.parent.teardown(() => s.close())
17    setup(function (err) {
18      if (err) {
19        throw err
20      }
21
22      // Install with the optional dependency
23      npm.install('.', function (err) {
24        if (err) {
25          throw err
26        }
27
28        writePackage()
29
30        npm.commands.shrinkwrap([], true, function (err, results) {
31          if (err) {
32            throw err
33          }
34
35          t.deepEqual(results.dependencies, desired.dependencies)
36          s.close()
37          t.end()
38        })
39      })
40    })
41  })
42})
43
44var desired = {
45  name: 'npm-test-shrinkwrap-optional-dependency',
46  version: '0.0.0',
47  dependencies: {
48    'test-package': {
49      version: '0.0.0',
50      resolved: common.registry + '/test-package/-/test-package-0.0.0.tgz',
51      integrity: 'sha1-sNMrbEXCWcV4uiADdisgUTG9+9E='
52    },
53    'underscore': {
54      version: '1.3.3',
55      resolved: 'http://localhost:' + common.port + '/underscore/-/underscore-1.3.3.tgz',
56      optional: true,
57      integrity: 'sha1-R6xTaD2vgyv6lS4XdEF9pHgXrkI='
58    }
59  }
60}
61
62var json = {
63  author: 'Maximilian Antoni',
64  name: 'npm-test-shrinkwrap-optional-dependency',
65  version: '0.0.0',
66  dependencies: {
67    'test-package': '0.0.0'
68  },
69  optionalDependencies: {
70    'underscore': '1.3.3'
71  }
72}
73
74function writePackage () {
75  fs.writeFileSync(path.join(pkg, 'package.json'), JSON.stringify(json, null, 2))
76}
77
78function setup (cb) {
79  writePackage()
80  process.chdir(pkg)
81
82  var opts = {
83    cache: common.cache,
84    registry: common.registry
85  }
86  npm.load(opts, cb)
87}
88