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