• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1var fs = require('graceful-fs')
2var path = require('path')
3
4var mkdirp = require('mkdirp')
5var osenv = require('osenv')
6var rimraf = require('rimraf')
7var test = require('tap').test
8
9var common = require('../common-tap.js')
10
11var pkg = common.pkg
12
13var EXEC_OPTS = { cwd: pkg }
14
15var json = {
16  name: 'install-test-cli-with-broken-package-lock',
17  description: 'fixture',
18  version: '0.0.0',
19  dependencies: {
20    optimist: '0.6.0'
21  }
22}
23
24var brokenLockfile = {
25  name: 'install-test-cli-with-broken-package-lock',
26  version: '0.0.0',
27  lockfileVersion: 1,
28  requires: true,
29  dependencies: {
30    optimist: {
31      version: '0.6.0',
32      resolved: 'https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz',
33      integrity: 'sha1-aUJIJvNAX3nxQub8PZrljU27kgA=',
34      requires: {
35        minimist: '~0.0.1',
36        wordwrap: '~0.0.2'
37      }
38    },
39    wordwrap: {
40      version: '0.0.3',
41      resolved: 'https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz',
42      integrity: 'sha1-o9XabNXAvAAI03I0u68b7WMFkQc='
43    }
44  }
45}
46
47var expected = {
48  name: 'install-test-cli-with-broken-package-lock',
49  version: '0.0.0',
50  lockfileVersion: 1,
51  requires: true,
52  dependencies: {
53    minimist: {
54      version: '0.0.10',
55      resolved: 'https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz',
56      integrity: 'sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8='
57    },
58    optimist: {
59      version: '0.6.0',
60      resolved: 'https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz',
61      integrity: 'sha1-aUJIJvNAX3nxQub8PZrljU27kgA=',
62      requires: {
63        minimist: '~0.0.1',
64        wordwrap: '~0.0.2'
65      }
66    },
67    wordwrap: {
68      version: '0.0.3',
69      resolved: 'https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz',
70      integrity: 'sha1-o9XabNXAvAAI03I0u68b7WMFkQc='
71    }
72  }
73}
74
75test('setup', function (t) {
76  setup()
77  t.end()
78})
79
80test('\'npm install-test\' should repair package-lock.json', function (t) {
81  common.npm(['install-test'], EXEC_OPTS, function (err, code, stderr, stdout) {
82    if (err) throw err
83    t.comment(stdout.trim())
84    t.comment(stderr.trim())
85    t.is(code, 0, 'npm install did not raise error code')
86    var lockfile = JSON.parse(fs.readFileSync(path.join(pkg, 'package-lock.json')))
87    t.same(
88      lockfile,
89      expected,
90      'package-lock.json should be repaired'
91    )
92    t.end()
93  })
94})
95
96test('cleanup', function (t) {
97  cleanup()
98  t.end()
99})
100
101function setup () {
102  cleanup()
103  mkdirp.sync(pkg)
104  fs.writeFileSync(
105    path.join(pkg, 'package.json'),
106    JSON.stringify(json, null, 2)
107  )
108  fs.writeFileSync(
109    path.join(pkg, 'package-lock.json'),
110    JSON.stringify(brokenLockfile, null, 2)
111  )
112  process.chdir(pkg)
113}
114
115function cleanup () {
116  process.chdir(osenv.tmpdir())
117  rimraf.sync(pkg)
118}
119